WordPress.org

Make WordPress Core

Ticket #42213: 42213.1.diff

File 42213.1.diff, 54.2 KB (added by WraithKenny, 2 years ago)

Proof of Concept, not stable.

  • src/wp-admin/js/code-editor.js

     
    277277                                        shouldAutocomplete = 'keyword' === token.type || 'variable' === token.type;
    278278                                }
    279279                                if ( shouldAutocomplete ) {
    280                                         codemirror.showHint( { completeSingle: false } );
     280                                        codemirror.showHint( { completeSingle: false, hint: CSSHinter } );
    281281                                }
    282282                        });
    283283                }
     
    289289        };
    290290
    291291})( window.jQuery, window.wp );
     292
     293
     294function CSSHinter(cm) {
     295
     296        // https://github.com/gujiman/CodeMirror/commit/d6f88d1589dc269ad2620548524e117ba4ed0c39?diff=unified#diff-0cc630c7e297b4748ff7535bb522c863R41
     297        function getPropertyName() {
     298                var getFullLine = cm.doc.getLine(cm.doc.getCursor().line);
     299                var getPartLine = getFullLine.substring(0, cur.ch);
     300                var getSeparator = getPartLine.lastIndexOf(':');
     301                // return cm.getTokenAt();
     302                getPartLine = getPartLine.substring(0, getSeparator);
     303                getPartLine = getPartLine.replace(/{/g, '{ ').replace(/;/g, '; ').replace(/\s\s+/g, ' ');
     304                getPartLine = ' ' + getPartLine.replace(/^\s+|\s+$/gm, '');
     305                return getPartLine.split(' ').splice(-1)[0];
     306        }
     307
     308        // https://github.com/codemirror/CodeMirror/blob/master/addon/hint/css-hint.js
     309        // CodeMirror, copyright (c) by Marijn Haverbeke and others
     310        // Distributed under an MIT license: http://codemirror.net/LICENSE
     311        var pseudoClasses = {
     312                link: 1,
     313                visited: 1,
     314                active: 1,
     315                hover: 1,
     316                focus: 1,
     317                'first-letter': 1,
     318                'first-line': 1,
     319                'first-child': 1,
     320                before: 1,
     321                after: 1,
     322                lang: 1
     323        };
     324
     325        var cur = cm.getCursor(),
     326                token = cm.getTokenAt(cur),
     327                inner = wp.CodeMirror.innerMode(cm.getMode(), token.state);
     328
     329        if (inner.mode.name !== 'css') {
     330                return;
     331        }
     332
     333        if (token.type === 'keyword' && '!important'.indexOf(token.string) === 0) {
     334                return {
     335                        list: ['!important'],
     336                        from: wp.CodeMirror.Pos(cur.line, token.start),
     337                        to: wp.CodeMirror.Pos(cur.line, token.end)
     338                };
     339        }
     340
     341        var start = token.start,
     342                end = cur.ch,
     343                word = token.string.slice(0, end - start);
     344
     345        if (/[^\w$_-]/.test(word)) {
     346                word = '';
     347                start = end = cur.ch;
     348        }
     349
     350        var spec = wp.CodeMirror.resolveMode('text/css');
     351
     352        var result = [];
     353
     354        function add(keywords) {
     355                for (var name in keywords) {
     356                        if (!word || name.lastIndexOf(word, 0) === 0) {
     357                                result.push(name);
     358                        }
     359                }
     360        }
     361
     362        var st = inner.state.state;
     363        if (st === 'pseudo' || token.type === 'variable-3') {
     364                add(pseudoClasses);
     365        } else if (st === 'block' || st === 'maybeprop') {
     366                add(spec.propertyKeywords);
     367        } else if (st === 'prop') {
     368                var propertyNames_ = SDK.cssMetadata().propertyValues(getPropertyName());
     369                var propertyNames = keySet(propertyNames_);
     370                add(propertyNames);
     371        } else if (st === 'parens' || st === 'at' || st === 'params') {
     372                add(spec.valueKeywords);
     373                add(spec.colorKeywords);
     374        } else if (st === 'media' || st === 'media_parens') {
     375                add(spec.mediaTypes);
     376                add(spec.mediaFeatures);
     377        }
     378
     379        if (result.length) {
     380                return {
     381                        list: result,
     382                        from: wp.CodeMirror.Pos(cur.line, start),
     383                        to: wp.CodeMirror.Pos(cur.line, end)
     384                };
     385        }
     386}
     387
     388// https://github.com/codemirror/CodeMirror/blob/master/mode/css/css.js
     389function keySet(array) {
     390        var keys = {};
     391        for (var i = 0; i < array.length; ++i) {
     392                keys[array[i].toLowerCase()] = true;
     393        }
     394        return keys;
     395}
     396
     397
     398
     399
     400var SDK = {};
     401
     402// From - https://github.com/ChromeDevTools/devtools-frontend/blob/master/front_end/platform/utilities.js
     403/*
     404 * Copyright (C) 2007 Apple Inc.  All rights reserved.
     405 * Copyright (C) 2012 Google Inc. All rights reserved.
     406 *
     407 * Redistribution and use in source and binary forms, with or without
     408 * modification, are permitted provided that the following conditions
     409 * are met:
     410 *
     411 * 1.  Redistributions of source code must retain the above copyright
     412 *     notice, this list of conditions and the following disclaimer.
     413 * 2.  Redistributions in binary form must reproduce the above copyright
     414 *     notice, this list of conditions and the following disclaimer in the
     415 *     documentation and/or other materials provided with the distribution.
     416 * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
     417 *     its contributors may be used to endorse or promote products derived
     418 *     from this software without specific prior written permission.
     419 *
     420 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     421 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     422 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     423 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     424 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     425 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     426 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     427 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     428 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     429 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     430 */
     431Object.defineProperty(Array.prototype, 'pushAll', {
     432        /**
     433         * @param {!Array<!T>} array
     434         * @this {Array<!T>}
     435         * @template T
     436         */
     437        value: function (array) {
     438                for (var i = 0; i < array.length; ++i) {
     439                        this.push(array[i]);
     440                }
     441        }
     442});
     443
     444// From - https://github.com/ChromeDevTools/devtools-frontend/blob/master/front_end/sdk/CSSMetadata.js
     445/*
     446 * Copyright (C) 2010 Nikita Vasilyev. All rights reserved.
     447 * Copyright (C) 2010 Joseph Pecoraro. All rights reserved.
     448 * Copyright (C) 2010 Google Inc. All rights reserved.
     449 *
     450 * Redistribution and use in source and binary forms, with or without
     451 * modification, are permitted provided that the following conditions are
     452 * met:
     453 *
     454 *     * Redistributions of source code must retain the above copyright
     455 * notice, this list of conditions and the following disclaimer.
     456 *     * Redistributions in binary form must reproduce the above
     457 * copyright notice, this list of conditions and the following disclaimer
     458 * in the documentation and/or other materials provided with the
     459 * distribution.
     460 *     * Neither the name of Google Inc. nor the names of its
     461 * contributors may be used to endorse or promote products derived from
     462 * this software without specific prior written permission.
     463 *
     464 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     465 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     466 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     467 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     468 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     469 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     470 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     471 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     472 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     473 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     474 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     475 */
     476
     477/**
     478 * @unrestricted
     479 */
     480SDK.CSSMetadata = class {
     481        /**
     482         * @param {!Array.<!{name: string, longhands: !Array.<string>, inherited: boolean, svg: boolean}>} properties
     483         */
     484        constructor(properties) {
     485                this._values = /** !Array.<string> */ ([]);
     486                /** @type {!Map<string, !Array<string>>} */
     487                this._longhands = new Map();
     488                /** @type {!Map<string, !Array<string>>} */
     489                this._shorthands = new Map();
     490                /** @type {!Set<string>} */
     491                this._inherited = new Set();
     492                /** @type {!Set<string>} */
     493                this._svgProperties = new Set();
     494                for (var i = 0; i < properties.length; ++i) {
     495                        var property = properties[i];
     496                        var propertyName = property.name;
     497                        if (!CSS.supports(propertyName, 'initial'))
     498                                continue;
     499                        this._values.push(propertyName);
     500
     501                        if (property.inherited)
     502                                this._inherited.add(propertyName);
     503                        if (property.svg)
     504                                this._svgProperties.add(propertyName);
     505
     506                        var longhands = properties[i].longhands;
     507                        if (longhands) {
     508                                this._longhands.set(propertyName, longhands);
     509                                for (var j = 0; j < longhands.length; ++j) {
     510                                        var longhandName = longhands[j];
     511                                        var shorthands = this._shorthands.get(longhandName);
     512                                        if (!shorthands) {
     513                                                shorthands = [];
     514                                                this._shorthands.set(longhandName, shorthands);
     515                                        }
     516                                        shorthands.push(propertyName);
     517                                }
     518                        }
     519                }
     520                this._values.sort();
     521                this._valuesSet = new Set(this._values);
     522        }
     523
     524        /**
     525         * @return {!Array<string>}
     526         */
     527        allProperties() {
     528                return this._values;
     529        }
     530
     531        /**
     532         * @param {string} name
     533         * @return {boolean}
     534         */
     535        isSVGProperty(name) {
     536                name = name.toLowerCase();
     537                return this._svgProperties.has(name);
     538        }
     539
     540        /**
     541         * @param {string} shorthand
     542         * @return {?Array.<string>}
     543         */
     544        longhands(shorthand) {
     545                return this._longhands.get(shorthand) || null;
     546        }
     547
     548        /**
     549         * @param {string} longhand
     550         * @return {?Array.<string>}
     551         */
     552        shorthands(longhand) {
     553                return this._shorthands.get(longhand) || null;
     554        }
     555
     556        /**
     557         * @param {string} propertyName
     558         * @return {boolean}
     559         */
     560        isColorAwareProperty(propertyName) {
     561                return !!SDK.CSSMetadata._colorAwareProperties.has(propertyName.toLowerCase()) ||
     562                        this.isCustomProperty(propertyName.toLowerCase());
     563        }
     564
     565        /**
     566         * @param {string} propertyName
     567         * @return {boolean}
     568         */
     569        isLengthProperty(propertyName) {
     570                propertyName = propertyName.toLowerCase();
     571                if (propertyName === 'line-height')
     572                        return false;
     573                return SDK.CSSMetadata._distanceProperties.has(propertyName) || propertyName.startsWith('margin') ||
     574                        propertyName.startsWith('padding') || propertyName.indexOf('width') !== -1 ||
     575                        propertyName.indexOf('height') !== -1;
     576        }
     577
     578        /**
     579         * @param {string} propertyName
     580         * @return {boolean}
     581         */
     582        isBezierAwareProperty(propertyName) {
     583                propertyName = propertyName.toLowerCase();
     584                return !!SDK.CSSMetadata._bezierAwareProperties.has(propertyName) || this.isCustomProperty(propertyName);
     585        }
     586
     587        /**
     588         * @param {string} propertyName
     589         * @return {boolean}
     590         */
     591        isCustomProperty(propertyName) {
     592                return propertyName.startsWith('--');
     593        }
     594
     595        /**
     596         * @param {string} name
     597         * @return {string}
     598         */
     599        canonicalPropertyName(name) {
     600                name = name.toLowerCase();
     601                if (!name || name.length < 9 || name.charAt(0) !== '-')
     602                        return name;
     603                var match = name.match(/(?:-webkit-)(.+)/);
     604                if (!match || !this._valuesSet.has(match[1]))
     605                        return name;
     606                return match[1];
     607        }
     608
     609        /**
     610         * @param {string} propertyName
     611         * @return {boolean}
     612         */
     613        isCSSPropertyName(propertyName) {
     614                propertyName = propertyName.toLowerCase();
     615                if (propertyName.startsWith('-moz-') || propertyName.startsWith('-o-') || propertyName.startsWith('-webkit-') ||
     616                        propertyName.startsWith('-ms-'))
     617                        return true;
     618                return this._valuesSet.has(propertyName);
     619        }
     620
     621        /**
     622         * @param {string} propertyName
     623         * @return {boolean}
     624         */
     625        isPropertyInherited(propertyName) {
     626                propertyName = propertyName.toLowerCase();
     627                return propertyName.startsWith('--') || this._inherited.has(this.canonicalPropertyName(propertyName)) ||
     628                        this._inherited.has(propertyName);
     629        }
     630
     631        /**
     632         * @param {string} propertyName
     633         * @return {!Array<string>}
     634         */
     635        propertyValues(propertyName) {
     636                var acceptedKeywords = ['inherit', 'initial', 'unset'];
     637                propertyName = propertyName.toLowerCase();
     638                var unprefixedName = propertyName.replace(/^-webkit-/, '');
     639                var entry = SDK.CSSMetadata._propertyDataMap[propertyName] || SDK.CSSMetadata._propertyDataMap[unprefixedName];
     640                if (entry && entry.values)
     641                        acceptedKeywords.pushAll(entry.values);
     642                if (this.isColorAwareProperty(propertyName)) {
     643                        acceptedKeywords.push('currentColor');
     644                        for (var color in Common.Color.Nicknames)
     645                                acceptedKeywords.push(color);
     646                }
     647                return acceptedKeywords.sort();
     648        }
     649
     650        /**
     651         * @param {string} property
     652         * @return {number}
     653         */
     654        propertyUsageWeight(property) {
     655                return SDK.CSSMetadata.Weight[property] || SDK.CSSMetadata.Weight[this.canonicalPropertyName(property)] || 0;
     656        }
     657};
     658
     659SDK.CSSMetadata.VariableRegex = /(var\(--.*?\))/g;
     660SDK.CSSMetadata.URLRegex = /url\(\s*('.+?'|".+?"|[^)]+)\s*\)/g;
     661
     662/**
     663 * @return {!SDK.CSSMetadata}
     664 */
     665SDK.cssMetadata = function () {
     666        if (!SDK.CSSMetadata._instance)
     667                SDK.CSSMetadata._instance = new SDK.CSSMetadata(SDK.CSSMetadata._generatedProperties || []);
     668        return SDK.CSSMetadata._instance;
     669};
     670
     671SDK.CSSMetadata._distanceProperties = new Set([
     672        'background-position', 'border-spacing', 'bottom', 'font-size', 'height', 'left', 'letter-spacing', 'max-height',
     673        'max-width', 'min-height', 'min-width', 'right', 'text-indent', 'top', 'width', 'word-spacing', 'grid-row-gap',
     674        'grid-column-gap'
     675]);
     676
     677SDK.CSSMetadata._bezierAwareProperties = new Set([
     678        'animation', 'animation-timing-function', 'transition', 'transition-timing-function', '-webkit-animation',
     679        '-webkit-animation-timing-function', '-webkit-transition', '-webkit-transition-timing-function'
     680]);
     681
     682SDK.CSSMetadata._colorAwareProperties = new Set([
     683        'backdrop-filter',
     684        'background',
     685        'background-color',
     686        'background-image',
     687        'border',
     688        'border-color',
     689        'border-image',
     690        'border-image-source',
     691        'border-bottom',
     692        'border-bottom-color',
     693        'border-left',
     694        'border-left-color',
     695        'border-right',
     696        'border-right-color',
     697        'border-top',
     698        'border-top-color',
     699        'box-shadow',
     700        'caret-color',
     701        'color',
     702        'column-rule',
     703        'column-rule-color',
     704        'fill',
     705        'list-style',
     706        'list-style-image',
     707        'outline',
     708        'outline-color',
     709        'stroke',
     710        'text-decoration-color',
     711        'text-shadow',
     712        '-webkit-border-after',
     713        '-webkit-border-after-color',
     714        '-webkit-border-before',
     715        '-webkit-border-before-color',
     716        '-webkit-border-end',
     717        '-webkit-border-end-color',
     718        '-webkit-border-start',
     719        '-webkit-border-start-color',
     720        '-webkit-box-reflect',
     721        '-webkit-box-shadow',
     722        '-webkit-column-rule-color',
     723        '-webkit-filter',
     724        '-webkit-mask',
     725        '-webkit-mask-box-image',
     726        '-webkit-mask-box-image-source',
     727        '-webkit-mask-image',
     728        '-webkit-tap-highlight-color',
     729        '-webkit-text-decoration-color',
     730        '-webkit-text-emphasis',
     731        '-webkit-text-emphasis-color',
     732        '-webkit-text-fill-color',
     733        '-webkit-text-stroke',
     734        '-webkit-text-stroke-color'
     735]);
     736
     737SDK.CSSMetadata._propertyDataMap = {
     738        'table-layout': {
     739                values: ['auto', 'fixed']
     740        },
     741        'visibility': {
     742                values: ['hidden', 'visible', 'collapse']
     743        },
     744        'background-repeat': {
     745                values: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat', 'space', 'round']
     746        },
     747        'content': {
     748                values: ['none', 'normal', 'close-quote', 'no-close-quote', 'no-open-quote', 'open-quote']
     749        },
     750        'list-style-image': {
     751                values: ['none']
     752        },
     753        'clear': {
     754                values: ['none', 'left', 'right', 'both']
     755        },
     756        'overflow-x': {
     757                values: ['hidden', 'auto', 'visible', 'overlay', 'scroll']
     758        },
     759        'stroke-linejoin': {
     760                values: ['round', 'miter', 'bevel']
     761        },
     762        'baseline-shift': {
     763                values: ['baseline', 'sub', 'super']
     764        },
     765        'border-bottom-width': {
     766                values: ['medium', 'thick', 'thin']
     767        },
     768        'margin-top-collapse': {
     769                values: ['collapse', 'separate', 'discard']
     770        },
     771        'max-height': {
     772                values: ['none', 'min-content', 'max-content', '-webkit-fill-available', 'fit-content']
     773        },
     774        'box-orient': {
     775                values: ['horizontal', 'vertical', 'inline-axis', 'block-axis'],
     776        },
     777        'font-stretch': {
     778                values: [
     779                        'normal', 'ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'semi-expanded', 'expanded',
     780                        'extra-expanded', 'ultra-expanded'
     781                ]
     782        },
     783        'border-left-width': {
     784                values: ['medium', 'thick', 'thin']
     785        },
     786        'box-shadow': {
     787                values: ['inset', 'none']
     788        },
     789        '-webkit-writing-mode': {
     790                values: ['horizontal-tb', 'vertical-rl', 'vertical-lr']
     791        },
     792        'writing-mode': {
     793                values: ['lr', 'rl', 'tb', 'lr-tb', 'rl-tb', 'tb-rl', 'horizontal-tb', 'vertical-rl', 'vertical-lr']
     794        },
     795        'border-collapse': {
     796                values: ['collapse', 'separate']
     797        },
     798        'page-break-inside': {
     799                values: ['auto', 'avoid']
     800        },
     801        'border-top-width': {
     802                values: ['medium', 'thick', 'thin']
     803        },
     804        'outline-style': {
     805                values: ['auto', 'none', 'inset', 'groove', 'ridge', 'outset', 'dotted', 'dashed', 'solid', 'double']
     806        },
     807        'cursor': {
     808                values: [
     809                        'none',
     810                        'copy',
     811                        'auto',
     812                        'crosshair',
     813                        'default',
     814                        'pointer',
     815                        'move',
     816                        'vertical-text',
     817                        'cell',
     818                        'context-menu',
     819                        'alias',
     820                        'progress',
     821                        'no-drop',
     822                        'not-allowed',
     823                        '-webkit-zoom-in',
     824                        '-webkit-zoom-out',
     825                        'e-resize',
     826                        'ne-resize',
     827                        'nw-resize',
     828                        'n-resize',
     829                        'se-resize',
     830                        'sw-resize',
     831                        's-resize',
     832                        'w-resize',
     833                        'ew-resize',
     834                        'ns-resize',
     835                        'nesw-resize',
     836                        'nwse-resize',
     837                        'col-resize',
     838                        'row-resize',
     839                        'text',
     840                        'wait',
     841                        'help',
     842                        'all-scroll',
     843                        'zoom-in',
     844                        'zoom-out',
     845                        '-webkit-grab',
     846                        '-webkit-grabbing'
     847                ]
     848        },
     849        'border-width': {
     850                values: ['medium', 'thick', 'thin']
     851        },
     852        'border-style': {
     853                values: ['none', 'hidden', 'inset', 'groove', 'ridge', 'outset', 'dotted', 'dashed', 'solid', 'double']
     854        },
     855        'size': {
     856                values: ['auto', 'a3', 'a4', 'a5', 'b4', 'b5', 'landscape', 'ledger', 'legal', 'letter', 'portrait']
     857        },
     858        'background-size': {
     859                values: ['auto', 'contain', 'cover']
     860        },
     861        'direction': {
     862                values: ['ltr', 'rtl']
     863        },
     864        'enable-background': {
     865                values: ['accumulate', 'new']
     866        },
     867        'float': {
     868                values: ['none', 'left', 'right']
     869        },
     870        'overflow-y': {
     871                values: ['hidden', 'auto', 'visible', 'overlay', 'scroll', '-webkit-paged-x', '-webkit-paged-y']
     872        },
     873        'margin-bottom-collapse': {
     874                values: ['collapse', 'separate', 'discard']
     875        },
     876        'box-reflect': {
     877                values: ['left', 'right', 'above', 'below']
     878        },
     879        'overflow': {
     880                values: ['hidden', 'auto', 'visible', 'overlay', 'scroll', '-webkit-paged-x', '-webkit-paged-y']
     881        },
     882        'contain': {
     883                values: ['none', 'strict', 'content', 'size', 'layout', 'style', 'paint']
     884        },
     885        'text-rendering': {
     886                values: ['auto', 'optimizeSpeed', 'optimizeLegibility', 'geometricPrecision']
     887        },
     888        'text-align': {
     889                values: [
     890                        '-webkit-auto', 'start', 'end', 'left', 'right', 'center', 'justify', '-webkit-left', '-webkit-right',
     891                        '-webkit-center', '-webkit-match-parent'
     892                ]
     893        },
     894        'list-style-position': {
     895                values: ['outside', 'inside']
     896        },
     897        'margin-bottom': {
     898                values: ['auto']
     899        },
     900        'color-interpolation': {
     901                values: ['auto', 'sRGB', 'linearRGB']
     902        },
     903        'background-origin': {
     904                values: ['border-box', 'content-box', 'padding-box']
     905        },
     906        'word-wrap': {
     907                values: ['normal', 'break-word']
     908        },
     909        'font-weight': {
     910                values: ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '700', '800', '900']
     911        },
     912        'margin-before-collapse': {
     913                values: ['collapse', 'separate', 'discard']
     914        },
     915        'text-transform': {
     916                values: ['none', 'capitalize', 'uppercase', 'lowercase']
     917        },
     918        'border-right-style': {
     919                values: ['none', 'hidden', 'inset', 'groove', 'ridge', 'outset', 'dotted', 'dashed', 'solid', 'double']
     920        },
     921        'border-left-style': {
     922                values: ['none', 'hidden', 'inset', 'groove', 'ridge', 'outset', 'dotted', 'dashed', 'solid', 'double']
     923        },
     924        '-webkit-text-emphasis': {
     925                values: ['circle', 'filled', 'open', 'dot', 'double-circle', 'triangle', 'sesame', 'none']
     926        },
     927        'font-style': {
     928                values: ['italic', 'oblique', 'normal']
     929        },
     930        'speak': {
     931                values: ['none', 'normal', 'spell-out', 'digits', 'literal-punctuation', 'no-punctuation']
     932        },
     933        'color-rendering': {
     934                values: ['auto', 'optimizeSpeed', 'optimizeQuality']
     935        },
     936        'list-style-type': {
     937                values: [
     938                        'none',
     939                        'disc',
     940                        'circle',
     941                        'square',
     942                        'decimal',
     943                        'decimal-leading-zero',
     944                        'arabic-indic',
     945                        'bengali',
     946                        'cambodian',
     947                        'khmer',
     948                        'devanagari',
     949                        'gujarati',
     950                        'gurmukhi',
     951                        'kannada',
     952                        'lao',
     953                        'malayalam',
     954                        'mongolian',
     955                        'myanmar',
     956                        'oriya',
     957                        'persian',
     958                        'urdu',
     959                        'telugu',
     960                        'tibetan',
     961                        'thai',
     962                        'lower-roman',
     963                        'upper-roman',
     964                        'lower-greek',
     965                        'lower-alpha',
     966                        'lower-latin',
     967                        'upper-alpha',
     968                        'upper-latin',
     969                        'ethiopic-halehame',
     970                        'ethiopic-halehame-am',
     971                        'ethiopic-halehame-ti-er',
     972                        'ethiopic-halehame-ti-et',
     973                        'cjk-earthly-branch',
     974                        'cjk-heavenly-stem',
     975                        'hangul-consonant',
     976                        'hangul',
     977                        'korean-hangul-formal',
     978                        'korean-hanja-formal',
     979                        'korean-hanja-informal',
     980                        'simp-chinese-formal',
     981                        'simp-chinese-informal',
     982                        'trad-chinese-formal',
     983                        'trad-chinese-informal',
     984                        'hebrew',
     985                        'armenian',
     986                        'lower-armenian',
     987                        'upper-armenian',
     988                        'georgian',
     989                        'cjk-ideographic',
     990                        'hiragana',
     991                        'katakana',
     992                        'hiragana-iroha',
     993                        'katakana-iroha'
     994                ]
     995        },
     996        'text-combine-upright': {
     997                values: ['none', 'all']
     998        },
     999        '-webkit-text-combine': {
     1000                values: ['none', 'horizontal']
     1001        },
     1002        'text-orientation': {
     1003                values: ['mixed', 'upright', 'sideways', 'sideways-right']
     1004        },
     1005        'outline': {
     1006                values: [
     1007                        'none', 'inset', 'groove', 'ridge', 'outset', 'dotted', 'dashed', 'solid', 'double', 'medium', 'auto', 'thick',
     1008                        'thin'
     1009                ]
     1010        },
     1011        'font': {
     1012                values: [
     1013                        'caption',
     1014                        'icon',
     1015                        'menu',
     1016                        'message-box',
     1017                        'small-caption',
     1018                        '-webkit-mini-control',
     1019                        '-webkit-small-control',
     1020                        '-webkit-control',
     1021                        'status-bar',
     1022                        'italic',
     1023                        'oblique',
     1024                        'small-caps',
     1025                        'normal',
     1026                        'bold',
     1027                        'bolder',
     1028                        'lighter',
     1029                        '100',
     1030                        '200',
     1031                        '300',
     1032                        '400',
     1033                        '500',
     1034                        '600',
     1035                        '700',
     1036                        '800',
     1037                        '900',
     1038                        'xx-small',
     1039                        'x-small',
     1040                        'small',
     1041                        'medium',
     1042                        'large',
     1043                        'x-large',
     1044                        'xx-large',
     1045                        '-webkit-xxx-large',
     1046                        'smaller',
     1047                        'larger',
     1048                        'serif',
     1049                        'sans-serif',
     1050                        'cursive',
     1051                        'fantasy',
     1052                        'monospace',
     1053                        '-webkit-body',
     1054                        '-webkit-pictograph'
     1055                ]
     1056        },
     1057        'dominant-baseline': {
     1058                values: [
     1059                        'middle', 'auto', 'central', 'text-before-edge', 'text-after-edge', 'ideographic', 'alphabetic', 'hanging',
     1060                        'mathematical', 'use-script', 'no-change', 'reset-size'
     1061                ]
     1062        },
     1063        'display': {
     1064                values: [
     1065                        'none',
     1066                        'inline',
     1067                        'block',
     1068                        'flow-root',
     1069                        'list-item',
     1070                        'inline-block',
     1071                        'table',
     1072                        'inline-table',
     1073                        'table-row-group',
     1074                        'table-header-group',
     1075                        'table-footer-group',
     1076                        'table-row',
     1077                        'table-column-group',
     1078                        'table-column',
     1079                        'table-cell',
     1080                        'table-caption',
     1081                        '-webkit-box',
     1082                        '-webkit-inline-box',
     1083                        'flex',
     1084                        'inline-flex',
     1085                        'grid',
     1086                        'inline-grid',
     1087                        'contents'
     1088                ]
     1089        },
     1090        '-webkit-text-emphasis-position': {
     1091                values: ['over', 'under']
     1092        },
     1093        'image-rendering': {
     1094                values: ['auto', 'pixelated', '-webkit-optimize-contrast']
     1095        },
     1096        'alignment-baseline': {
     1097                values: [
     1098                        'baseline', 'middle', 'auto', 'before-edge', 'after-edge', 'central', 'text-before-edge', 'text-after-edge',
     1099                        'ideographic', 'alphabetic', 'hanging', 'mathematical'
     1100                ]
     1101        },
     1102        'outline-width': {
     1103                values: ['medium', 'thick', 'thin']
     1104        },
     1105        'box-align': {
     1106                values: ['baseline', 'center', 'stretch', 'start', 'end']
     1107        },
     1108        'border-right-width': {
     1109                values: ['medium', 'thick', 'thin']
     1110        },
     1111        'border-top-style': {
     1112                values: ['none', 'hidden', 'inset', 'groove', 'ridge', 'outset', 'dotted', 'dashed', 'solid', 'double']
     1113        },
     1114        'line-height': {
     1115                values: ['normal']
     1116        },
     1117        'text-overflow': {
     1118                values: ['clip', 'ellipsis']
     1119        },
     1120        'overflow-wrap': {
     1121                values: ['normal', 'break-word']
     1122        },
     1123        'box-direction': {
     1124                values: ['normal', 'reverse']
     1125        },
     1126        'margin-after-collapse': {
     1127                values: ['collapse', 'separate', 'discard']
     1128        },
     1129        'page-break-before': {
     1130                values: ['left', 'right', 'auto', 'always', 'avoid']
     1131        },
     1132        'border-image': {
     1133                values: ['repeat', 'stretch', 'none', 'space', 'round']
     1134        },
     1135        'text-decoration': {
     1136                values: ['none', 'blink', 'line-through', 'overline', 'underline', 'wavy', 'double', 'solid', 'dashed', 'dotted']
     1137        },
     1138        'position': {
     1139                values: ['absolute', 'fixed', 'relative', 'static', 'sticky']
     1140        },
     1141        'font-family': {
     1142                values: ['serif', 'sans-serif', 'cursive', 'fantasy', 'monospace', '-webkit-body', '-webkit-pictograph']
     1143        },
     1144        'text-overflow-mode': {
     1145                values: ['clip', 'ellipsis']
     1146        },
     1147        'border-bottom-style': {
     1148                values: ['none', 'hidden', 'inset', 'groove', 'ridge', 'outset', 'dotted', 'dashed', 'solid', 'double']
     1149        },
     1150        'unicode-bidi': {
     1151                values: ['normal', 'bidi-override', 'embed', 'isolate', 'isolate-override', 'plaintext']
     1152        },
     1153        'clip-rule': {
     1154                values: ['nonzero', 'evenodd']
     1155        },
     1156        'margin-left': {
     1157                values: ['auto']
     1158        },
     1159        'margin-top': {
     1160                values: ['auto']
     1161        },
     1162        'zoom': {
     1163                values: ['normal']
     1164        },
     1165        'max-width': {
     1166                values: ['none', 'min-content', 'max-content', '-webkit-fill-available', 'fit-content']
     1167        },
     1168        'caption-side': {
     1169                values: ['top', 'bottom']
     1170        },
     1171        'empty-cells': {
     1172                values: ['hide', 'show']
     1173        },
     1174        'pointer-events': {
     1175                values: [
     1176                        'none', 'all', 'auto', 'visible', 'visiblepainted', 'visiblefill', 'visiblestroke', 'painted', 'fill', 'stroke',
     1177                        'bounding-box'
     1178                ]
     1179        },
     1180        'letter-spacing': {
     1181                values: ['normal']
     1182        },
     1183        'background-clip': {
     1184                values: ['border-box', 'content-box', 'padding-box']
     1185        },
     1186        '-webkit-font-smoothing': {
     1187                values: ['none', 'auto', 'antialiased', 'subpixel-antialiased']
     1188        },
     1189        'border': {
     1190                values: [
     1191                        'none', 'hidden', 'inset', 'groove', 'ridge', 'outset', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick',
     1192                        'thin'
     1193                ]
     1194        },
     1195        'font-size': {
     1196                values: [
     1197                        'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', '-webkit-xxx-large', 'smaller', 'larger'
     1198                ]
     1199        },
     1200        'font-variant': {
     1201                values: [
     1202                        'small-caps',
     1203                        'normal',
     1204                        'none',
     1205                        'common-ligatures',
     1206                        'no-common-ligatures',
     1207                        'discretionary-ligatures',
     1208                        'no-discretionary-ligatures',
     1209                        'historical-ligatures',
     1210                        'no-historical-ligatures',
     1211                        'contextual',
     1212                        'no-contextual',
     1213                        'all-small-caps',
     1214                        'petite-caps',
     1215                        'all-petite-caps',
     1216                        'unicase',
     1217                        'titling-caps',
     1218                        'lining-nums',
     1219                        'oldstyle-nums',
     1220                        'proportional-nums',
     1221                        'tabular-nums',
     1222                        'diagonal-fractions',
     1223                        'stacked-fractions',
     1224                        'ordinal',
     1225                        'slashed-zero',
     1226                        'jis78',
     1227                        'jis83',
     1228                        'jis90',
     1229                        'jis04',
     1230                        'simplified',
     1231                        'traditional',
     1232                        'full-width',
     1233                        'proportional-width',
     1234                        'ruby'
     1235                ]
     1236        },
     1237        'vertical-align': {
     1238                values: ['baseline', 'middle', 'sub', 'super', 'text-top', 'text-bottom', 'top', 'bottom', '-webkit-baseline-middle']
     1239        },
     1240        'white-space': {
     1241                values: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap']
     1242        },
     1243        'box-lines': {
     1244                values: ['single', 'multiple']
     1245        },
     1246        'page-break-after': {
     1247                values: ['left', 'right', 'auto', 'always', 'avoid']
     1248        },
     1249        'clip-path': {
     1250                values: ['none']
     1251        },
     1252        'margin': {
     1253                values: ['auto']
     1254        },
     1255        'margin-right': {
     1256                values: ['auto']
     1257        },
     1258        'word-break': {
     1259                values: ['normal', 'break-all', 'break-word', 'keep-all']
     1260        },
     1261        'word-spacing': {
     1262                values: ['normal']
     1263        },
     1264        '-webkit-text-emphasis-style': {
     1265                values: ['circle', 'filled', 'open', 'dot', 'double-circle', 'triangle', 'sesame', 'none']
     1266        },
     1267        'transform': {
     1268                values: [
     1269                        'scale', 'scaleX', 'scaleY', 'scale3d', 'rotate', 'rotateX', 'rotateY',
     1270                        'rotateZ', 'rotate3d', 'skew', 'skewX', 'skewY', 'translate', 'translateX',
     1271                        'translateY', 'translateZ', 'translate3d', 'matrix', 'matrix3d', 'perspective', 'none'
     1272                ]
     1273        },
     1274        'image-resolution': {
     1275                values: ['from-image', 'snap']
     1276        },
     1277        'box-sizing': {
     1278                values: ['content-box', 'border-box']
     1279        },
     1280        'clip': {
     1281                values: ['auto']
     1282        },
     1283        'resize': {
     1284                values: ['none', 'both', 'horizontal', 'vertical', 'auto']
     1285        },
     1286        'align-content': {
     1287                values: [
     1288                        'normal', 'baseline', 'space-between', 'space-around', 'space-evenly', 'stretch', 'unsafe', 'safe', 'center',
     1289                        'start', 'end', 'flex-start', 'flex-end', 'left', 'right'
     1290                ]
     1291        },
     1292        'justify-content': {
     1293                values: [
     1294                        'normal', 'space-between', 'space-around', 'space-evenly', 'stretch', 'unsafe', 'safe', 'center', 'start', 'end',
     1295                        'flex-start', 'flex-end', 'left', 'right', 'baseline'
     1296                ]
     1297        },
     1298        'place-content': {
     1299                values: [
     1300                        'normal', 'space-between', 'space-around', 'space-evenly', 'stretch', 'unsafe', 'safe', 'center', 'start', 'end',
     1301                        'flex-start', 'flex-end', 'left', 'right', 'baseline'
     1302                ]
     1303        },
     1304        'align-items': {
     1305                values: [
     1306                        'normal', 'stretch', 'baseline', 'unsafe', 'safe', 'center', 'start', 'end', 'self-start', 'self-end',
     1307                        'flex-start', 'flex-end', 'left', 'right'
     1308                ]
     1309        },
     1310        'justify-items': {
     1311                values: [
     1312                        'normal', 'stretch', 'baseline', 'unsafe', 'safe', 'center', 'start', 'end', 'self-start', 'self-end',
     1313                        'flex-start', 'flex-end', 'left', 'right', 'legacy', 'auto'
     1314                ]
     1315        },
     1316        'place-items': {
     1317                values: [
     1318                        'auto', 'normal', 'stretch', 'baseline', 'unsafe', 'safe', 'center', 'start', 'end', 'self-start', 'self-end',
     1319                        'flex-start', 'flex-end', 'left', 'right'
     1320                ]
     1321        },
     1322        'align-self': {
     1323                values: [
     1324                        'auto', 'normal', 'stretch', 'baseline', 'unsafe', 'safe', 'center', 'start', 'end', 'self-start', 'self-end',
     1325                        'flex-start', 'flex-end', 'left', 'right'
     1326                ]
     1327        },
     1328        'justify-self': {
     1329                values: [
     1330                        'auto', 'normal', 'stretch', 'baseline', 'unsafe', 'safe', 'center', 'start', 'end', 'self-start', 'self-end',
     1331                        'flex-start', 'flex-end', 'left', 'right'
     1332                ]
     1333        },
     1334        'place-self': {
     1335                values: [
     1336                        'auto', 'normal', 'stretch', 'baseline', 'unsafe', 'safe', 'center', 'start', 'end', 'self-start', 'self-end',
     1337                        'flex-start', 'flex-end', 'left', 'right'
     1338                ]
     1339        },
     1340        'flex-direction': {
     1341                values: ['row', 'row-reverse', 'column', 'column-reverse']
     1342        },
     1343        'flex-wrap': {
     1344                values: ['nowrap', 'wrap', 'wrap-reverse']
     1345        },
     1346        'perspective': {
     1347                values: ['none']
     1348        },
     1349        'perspective-origin': {
     1350                values: ['left', 'center', 'right', 'top', 'bottom']
     1351        },
     1352        'transform-origin': {
     1353                values: ['left', 'center', 'right', 'top', 'bottom']
     1354        },
     1355        'transform-style': {
     1356                values: ['flat', 'preserve-3d']
     1357        },
     1358        'transition-timing-function': {
     1359                values: [
     1360                        'ease', 'linear', 'ease-in', 'ease-out', 'ease-in-out', 'step-start', 'step-end', 'steps', 'frames',
     1361                        'cubic-bezier', 'step-middle'
     1362                ]
     1363        },
     1364        'animation-timing-function': {
     1365                values: [
     1366                        'ease', 'linear', 'ease-in', 'ease-out', 'ease-in-out', 'step-start', 'step-end', 'steps', 'frames',
     1367                        'cubic-bezier', 'step-middle'
     1368                ]
     1369        },
     1370        'animation-direction': {
     1371                values: ['normal', 'reverse', 'alternate', 'alternate-reverse']
     1372        },
     1373        'animation-play-state': {
     1374                values: ['running', 'paused']
     1375        },
     1376        'animation-fill-mode': {
     1377                values: ['none', 'forwards', 'backwards', 'both']
     1378        },
     1379        '-webkit-backface-visibility': {
     1380                values: ['visible', 'hidden']
     1381        },
     1382        '-webkit-box-decoration-break': {
     1383                values: ['slice', 'clone']
     1384        },
     1385        '-webkit-column-break-after': {
     1386                values: ['auto', 'always', 'avoid', 'left', 'right', 'page', 'column', 'avoid-page', 'avoid-column']
     1387        },
     1388        '-webkit-column-break-before': {
     1389                values: ['auto', 'always', 'avoid', 'left', 'right', 'page', 'column', 'avoid-page', 'avoid-column']
     1390        },
     1391        '-webkit-column-break-inside': {
     1392                values: ['auto', 'avoid', 'avoid-page', 'avoid-column']
     1393        },
     1394        '-webkit-column-span': {
     1395                values: ['none', 'all']
     1396        },
     1397        '-webkit-column-count': {
     1398                values: ['auto']
     1399        },
     1400        '-webkit-column-gap': {
     1401                values: ['normal']
     1402        },
     1403        'filter': {
     1404                values: [
     1405                        'url', 'blur', 'brightness', 'contrast', 'drop-shadow', 'grayscale', 'hue-rotate', 'invert', 'opacity',
     1406                        'saturate', 'sepia', 'none'
     1407                ]
     1408        },
     1409        'line-break': {
     1410                values: ['auto', 'loose', 'normal', 'strict', 'after-white-space']
     1411        },
     1412        'user-select': {
     1413                values: ['none', 'text', 'all', 'auto']
     1414        },
     1415        '-webkit-user-modify': {
     1416                values: ['read-only', 'read-write', 'read-write-plaintext-only']
     1417        },
     1418        'text-align-last': {
     1419                values: ['auto', 'start', 'end', 'left', 'right', 'center', 'justify']
     1420        },
     1421        '-webkit-text-decoration-line': {
     1422                values: ['none', 'underline', 'overline', 'line-through', 'blink']
     1423        },
     1424        '-webkit-text-decoration-style': {
     1425                values: ['solid', 'double', 'dotted', 'dashed', 'wavy']
     1426        },
     1427        '-webkit-text-decoration-skip': {
     1428                values: ['none', 'objects', 'spaces', 'ink', 'edges', 'box-decoration']
     1429        },
     1430        'mix-blend-mode': {
     1431                values: [
     1432                        'normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light',
     1433                        'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity', 'unset'
     1434                ]
     1435        },
     1436        'background-blend-mode': {
     1437                values: [
     1438                        'normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light',
     1439                        'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity', 'unset'
     1440                ]
     1441        },
     1442        'caret-color': {
     1443                values: ['auto']
     1444        },
     1445        'grid-template-columns': {
     1446                values: ['none', 'auto', 'min-content', 'max-content']
     1447        },
     1448        'grid-template-rows': {
     1449                values: ['none', 'auto', 'min-content', 'max-content']
     1450        },
     1451        'grid-template-areas': {
     1452                values: ['none']
     1453        },
     1454        'grid-template': {
     1455                values: ['none']
     1456        },
     1457        'grid-auto-columns': {
     1458                values: ['auto', 'min-content', 'max-content']
     1459        },
     1460        'grid-auto-rows': {
     1461                values: ['auto', 'min-content', 'max-content']
     1462        },
     1463        'grid-auto-flow': {
     1464                values: ['row', 'column', 'dense']
     1465        },
     1466        'grid': {
     1467                values: ['none']
     1468        },
     1469        'grid-row-start': {
     1470                values: ['auto']
     1471        },
     1472        'grid-column-start': {
     1473                values: ['auto']
     1474        },
     1475        'grid-row-end': {
     1476                values: ['auto']
     1477        },
     1478        'grid-column-end': {
     1479                values: ['auto']
     1480        },
     1481        'grid-row': {
     1482                values: ['auto']
     1483        },
     1484        'grid-column': {
     1485                values: ['auto']
     1486        },
     1487        'grid-area': {
     1488                values: ['auto']
     1489        },
     1490        'animation-iteration-count': {
     1491                values: ['infinite']
     1492        },
     1493        'font-feature-settings': {
     1494                values: ['normal']
     1495        },
     1496        'font-kerning': {
     1497                values: ['none', 'normal', 'auto']
     1498        },
     1499        'font-size-adjust': {
     1500                values: ['none']
     1501        },
     1502        'font-variant-caps': {
     1503                values: ['small-caps', 'all-small-caps', 'petite-caps', 'all-petite-caps', 'unicase', 'titling-caps', 'normal']
     1504        },
     1505        'font-variant-east-asian': {
     1506                values: ['jis78', 'jis83', 'jis90', 'jis04', 'simplified', 'traditional', 'full-width', 'proportional-width', 'ruby']
     1507        },
     1508        'font-variant-ligatures': {
     1509                values: [
     1510                        'none', 'common-ligatures', 'no-common-ligatures', 'discretionary-ligatures', 'no-discretionary-ligatures',
     1511                        'historical-ligatures', 'no-historical-ligatures', 'contextual', 'no-contextual', 'normal'
     1512                ]
     1513        },
     1514        'font-variant-numeric': {
     1515                values: [
     1516                        'lining-nums', 'oldstyle-nums', 'proportional-nums', 'tabular-nums', 'diagonal-fractions', 'stacked-fractions',
     1517                        'ordinal', 'slashed-zero', 'normal'
     1518                ]
     1519        },
     1520        'font-variation-settings': {
     1521                values: ['normal']
     1522        },
     1523        '-webkit-locale': {
     1524                values: ['auto']
     1525        },
     1526        'backdrop-filter': {
     1527                values: ['none']
     1528        },
     1529        'backface-visibility': {
     1530                values: ['hidden', 'visible']
     1531        },
     1532        'background': {
     1533                values: [
     1534                        'none', 'repeat', 'repeat-x', 'repeat-y', 'no-repeat', 'top', 'bottom', 'left', 'right', 'center', 'fixed',
     1535                        'local', 'scroll', 'space', 'round', 'border-box', 'content-box', 'padding-box'
     1536                ]
     1537        },
     1538        'background-attachment': {
     1539                values: ['fixed', 'local', 'scroll']
     1540        },
     1541        'background-image': {
     1542                values: ['none']
     1543        },
     1544        'background-position': {
     1545                values: ['top', 'bottom', 'left', 'right', 'center']
     1546        },
     1547        'background-position-x': {
     1548                values: ['left', 'right', 'center']
     1549        },
     1550        'background-position-y': {
     1551                values: ['top', 'bottom', 'center']
     1552        },
     1553        'background-repeat-x': {
     1554                values: ['repeat', 'no-repeat']
     1555        },
     1556        'background-repeat-y': {
     1557                values: ['repeat', 'no-repeat']
     1558        },
     1559        'border-bottom': {
     1560                values: [
     1561                        'none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick',
     1562                        'thin'
     1563                ]
     1564        },
     1565        'border-image-repeat': {
     1566                values: ['repeat', 'stretch', 'space', 'round']
     1567        },
     1568        'border-image-source': {
     1569                values: ['none']
     1570        },
     1571        'border-image-width': {
     1572                values: ['auto']
     1573        },
     1574        'border-left': {
     1575                values: [
     1576                        'none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick',
     1577                        'thin'
     1578                ]
     1579        },
     1580        'border-right': {
     1581                values: [
     1582                        'none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick',
     1583                        'thin'
     1584                ]
     1585        },
     1586        'border-top': {
     1587                values: [
     1588                        'none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick',
     1589                        'thin'
     1590                ]
     1591        },
     1592        'bottom': {
     1593                values: ['auto']
     1594        },
     1595        'break-after': {
     1596                values: ['left', 'right', 'auto', 'avoid', 'column', 'avoid-page', 'page', 'recto', 'verso', 'avoid-column']
     1597        },
     1598        'break-before': {
     1599                values: ['left', 'right', 'auto', 'avoid', 'column', 'avoid-page', 'page', 'recto', 'verso', 'avoid-column']
     1600        },
     1601        'break-inside': {
     1602                values: ['auto', 'avoid', 'avoid-page', 'avoid-column']
     1603        },
     1604        'buffered-rendering': {
     1605                values: ['auto', 'static', 'dynamic']
     1606        },
     1607        'color-interpolation-filters': {
     1608                values: ['auto', 'srgb', 'linearrgb']
     1609        },
     1610        'column-count': {
     1611                values: ['auto']
     1612        },
     1613        'column-fill': {
     1614                values: ['auto', 'balance']
     1615        },
     1616        'column-gap': {
     1617                values: ['normal']
     1618        },
     1619        'column-rule': {
     1620                values: [
     1621                        'none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick',
     1622                        'thin'
     1623                ]
     1624        },
     1625        'column-rule-style': {
     1626                values: ['none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double']
     1627        },
     1628        'column-rule-width': {
     1629                values: ['medium', 'thick', 'thin']
     1630        },
     1631        'column-span': {
     1632                values: ['none', 'all']
     1633        },
     1634        'column-width': {
     1635                values: ['auto']
     1636        },
     1637        'columns': {
     1638                values: ['auto']
     1639        },
     1640        'd': {
     1641                values: ['none']
     1642        },
     1643        'fill': {
     1644                values: ['none']
     1645        },
     1646        'fill-rule': {
     1647                values: ['nonzero', 'evenodd']
     1648        },
     1649        'flex': {
     1650                values: ['none', 'auto']
     1651        },
     1652        'flex-basis': {
     1653                values: ['auto']
     1654        },
     1655        'flex-flow': {
     1656                values: ['nowrap', 'row', 'row-reverse', 'column', 'column-reverse', 'wrap', 'wrap-reverse']
     1657        },
     1658        'height': {
     1659                values: ['auto', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     1660        },
     1661        'hyphens': {
     1662                values: ['none', 'manual']
     1663        },
     1664        'inline-size': {
     1665                values: ['auto', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     1666        },
     1667        'isolation': {
     1668                values: ['auto', 'isolate']
     1669        },
     1670        'left': {
     1671                values: ['auto']
     1672        },
     1673        'list-style': {
     1674                values: [
     1675                        'none',
     1676                        'outside',
     1677                        'inside',
     1678                        'disc',
     1679                        'circle',
     1680                        'square',
     1681                        'decimal',
     1682                        'decimal-leading-zero',
     1683                        'arabic-indic',
     1684                        'bengali',
     1685                        'cambodian',
     1686                        'khmer',
     1687                        'devanagari',
     1688                        'gujarati',
     1689                        'gurmukhi',
     1690                        'kannada',
     1691                        'lao',
     1692                        'malayalam',
     1693                        'mongolian',
     1694                        'myanmar',
     1695                        'oriya',
     1696                        'persian',
     1697                        'urdu',
     1698                        'telugu',
     1699                        'tibetan',
     1700                        'thai',
     1701                        'lower-roman',
     1702                        'upper-roman',
     1703                        'lower-greek',
     1704                        'lower-alpha',
     1705                        'lower-latin',
     1706                        'upper-alpha',
     1707                        'upper-latin',
     1708                        'cjk-earthly-branch',
     1709                        'cjk-heavenly-stem',
     1710                        'ethiopic-halehame',
     1711                        'ethiopic-halehame-am',
     1712                        'ethiopic-halehame-ti-er',
     1713                        'ethiopic-halehame-ti-et',
     1714                        'hangul',
     1715                        'hangul-consonant',
     1716                        'korean-hangul-formal',
     1717                        'korean-hanja-formal',
     1718                        'korean-hanja-informal',
     1719                        'hebrew',
     1720                        'armenian',
     1721                        'lower-armenian',
     1722                        'upper-armenian',
     1723                        'georgian',
     1724                        'cjk-ideographic',
     1725                        'simp-chinese-formal',
     1726                        'simp-chinese-informal',
     1727                        'trad-chinese-formal',
     1728                        'trad-chinese-informal',
     1729                        'hiragana',
     1730                        'katakana',
     1731                        'hiragana-iroha',
     1732                        'katakana-iroha'
     1733                ]
     1734        },
     1735        'marker': {
     1736                values: ['none']
     1737        },
     1738        'marker-end': {
     1739                values: ['none']
     1740        },
     1741        'marker-mid': {
     1742                values: ['none']
     1743        },
     1744        'marker-start': {
     1745                values: ['none']
     1746        },
     1747        'mask': {
     1748                values: ['none']
     1749        },
     1750        'mask-source-type': {
     1751                values: ['auto', 'alpha', 'luminance']
     1752        },
     1753        'mask-type': {
     1754                values: ['alpha', 'luminance']
     1755        },
     1756        'max-block-size': {
     1757                values: ['none', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     1758        },
     1759        'max-inline-size': {
     1760                values: ['none', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     1761        },
     1762        'min-block-size': {
     1763                values: ['auto', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     1764        },
     1765        'min-height': {
     1766                values: ['auto', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     1767        },
     1768        'min-inline-size': {
     1769                values: ['auto', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     1770        },
     1771        'min-width': {
     1772                values: ['auto', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     1773        },
     1774        'object-fit': {
     1775                values: ['none', 'contain', 'cover', 'fill', 'scale-down']
     1776        },
     1777        'object-position': {
     1778                values: ['top', 'bottom', 'left', 'right', 'center']
     1779        },
     1780        'offset-anchor': {
     1781                values: ['top', 'bottom', 'left', 'right', 'center', 'auto']
     1782        },
     1783        'offset-path': {
     1784                values: ['none']
     1785        },
     1786        'offset-position': {
     1787                values: ['top', 'bottom', 'left', 'right', 'center', 'auto']
     1788        },
     1789        'offset-rotate': {
     1790                values: ['auto', 'reverse']
     1791        },
     1792        'overflow-anchor': {
     1793                values: ['none', 'auto', 'visible']
     1794        },
     1795        'paint-order': {
     1796                values: ['normal', 'fill', 'stroke', 'markers']
     1797        },
     1798        'quotes': {
     1799                values: ['none']
     1800        },
     1801        'right': {
     1802                values: ['auto']
     1803        },
     1804        'rotate': {
     1805                values: ['none']
     1806        },
     1807        'rx': {
     1808                values: ['auto']
     1809        },
     1810        'ry': {
     1811                values: ['auto']
     1812        },
     1813        'scale': {
     1814                values: ['none']
     1815        },
     1816        'scroll-behavior': {
     1817                values: ['auto', 'smooth']
     1818        },
     1819        'shape-outside': {
     1820                values: ['none', 'border-box', 'content-box', 'padding-box', 'margin-box']
     1821        },
     1822        'shape-rendering': {
     1823                values: ['auto', 'optimizespeed', 'geometricprecision', 'crispedges']
     1824        },
     1825        'stroke': {
     1826                values: ['none']
     1827        },
     1828        'stroke-dasharray': {
     1829                values: ['none']
     1830        },
     1831        'stroke-linecap': {
     1832                values: ['square', 'round', 'butt']
     1833        },
     1834        'text-anchor': {
     1835                values: ['middle', 'start', 'end']
     1836        },
     1837        'text-decoration-line': {
     1838                values: ['none', 'blink', 'line-through', 'overline', 'underline']
     1839        },
     1840        'text-decoration-skip': {
     1841                values: ['objects', 'ink']
     1842        },
     1843        'text-decoration-style': {
     1844                values: ['dotted', 'dashed', 'solid', 'double', 'wavy']
     1845        },
     1846        'text-justify': {
     1847                values: ['none', 'inter-word', 'distribute', 'auto']
     1848        },
     1849        'text-shadow': {
     1850                values: ['none']
     1851        },
     1852        'text-size-adjust': {
     1853                values: ['none', 'auto']
     1854        },
     1855        'text-underline-position': {
     1856                values: ['auto', 'under']
     1857        },
     1858        'top': {
     1859                values: ['auto']
     1860        },
     1861        'touch-action': {
     1862                values: [
     1863                        'none', 'auto', 'pan-x', 'pan-y', 'pan-left', 'pan-right', 'pan-up', 'pan-down', 'manipulation', 'pinch-zoom'
     1864                ]
     1865        },
     1866        'transform-box': {
     1867                values: ['border-box', 'fill-box', 'view-box']
     1868        },
     1869        'translate': {
     1870                values: ['none']
     1871        },
     1872        'vector-effect': {
     1873                values: ['none', 'non-scaling-stroke']
     1874        },
     1875        '-webkit-app-region': {
     1876                values: ['drag', 'no-drag']
     1877        },
     1878        '-webkit-appearance': {
     1879                values: [
     1880                        'none',
     1881                        'checkbox',
     1882                        'radio',
     1883                        'push-button',
     1884                        'square-button',
     1885                        'button',
     1886                        'button-bevel',
     1887                        'inner-spin-button',
     1888                        'listbox',
     1889                        'listitem',
     1890                        'media-enter-fullscreen-button',
     1891                        'media-exit-fullscreen-button',
     1892                        'media-mute-button',
     1893                        'media-play-button',
     1894                        'media-overlay-play-button',
     1895                        'media-toggle-closed-captions-button',
     1896                        'media-slider',
     1897                        'media-sliderthumb',
     1898                        'media-volume-slider-container',
     1899                        'media-volume-slider',
     1900                        'media-volume-sliderthumb',
     1901                        'media-controls-background',
     1902                        'media-controls-fullscreen-background',
     1903                        'media-current-time-display',
     1904                        'media-time-remaining-display',
     1905                        'menulist',
     1906                        'menulist-button',
     1907                        'menulist-text',
     1908                        'menulist-textfield',
     1909                        'meter',
     1910                        'progress-bar',
     1911                        'progress-bar-value',
     1912                        'slider-horizontal',
     1913                        'slider-vertical',
     1914                        'sliderthumb-horizontal',
     1915                        'sliderthumb-vertical',
     1916                        'caret',
     1917                        'searchfield',
     1918                        'searchfield-cancel-button',
     1919                        'textfield',
     1920                        'textarea'
     1921                ]
     1922        },
     1923        '-webkit-border-after': {
     1924                values: [
     1925                        'none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick',
     1926                        'thin'
     1927                ]
     1928        },
     1929        '-webkit-border-after-style': {
     1930                values: ['none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double']
     1931        },
     1932        '-webkit-border-after-width': {
     1933                values: ['medium', 'thick', 'thin']
     1934        },
     1935        '-webkit-border-before': {
     1936                values: [
     1937                        'none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick',
     1938                        'thin'
     1939                ]
     1940        },
     1941        '-webkit-border-before-style': {
     1942                values: ['none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double']
     1943        },
     1944        '-webkit-border-before-width': {
     1945                values: ['medium', 'thick', 'thin']
     1946        },
     1947        '-webkit-border-end': {
     1948                values: [
     1949                        'none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick',
     1950                        'thin'
     1951                ]
     1952        },
     1953        '-webkit-border-end-style': {
     1954                values: ['none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double']
     1955        },
     1956        '-webkit-border-end-width': {
     1957                values: ['medium', 'thick', 'thin']
     1958        },
     1959        '-webkit-border-start': {
     1960                values: [
     1961                        'none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick',
     1962                        'thin'
     1963                ]
     1964        },
     1965        '-webkit-border-start-style': {
     1966                values: ['none', 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double']
     1967        },
     1968        '-webkit-border-start-width': {
     1969                values: ['medium', 'thick', 'thin']
     1970        },
     1971        '-webkit-box-pack': {
     1972                values: ['center', 'justify', 'start', 'end']
     1973        },
     1974        '-webkit-highlight': {
     1975                values: ['none']
     1976        },
     1977        '-webkit-hyphenate-character': {
     1978                values: ['auto']
     1979        },
     1980        '-webkit-logical-height': {
     1981                values: ['auto', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     1982        },
     1983        '-webkit-logical-width': {
     1984                values: ['auto', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     1985        },
     1986        '-webkit-margin-after': {
     1987                values: ['auto']
     1988        },
     1989        '-webkit-margin-before': {
     1990                values: ['auto']
     1991        },
     1992        '-webkit-margin-collapse': {
     1993                values: ['collapse', 'separate', 'discard']
     1994        },
     1995        '-webkit-margin-end': {
     1996                values: ['auto']
     1997        },
     1998        '-webkit-margin-start': {
     1999                values: ['auto']
     2000        },
     2001        '-webkit-mask-box-image': {
     2002                values: ['none', 'repeat', 'stretch', 'space', 'round']
     2003        },
     2004        '-webkit-mask-box-image-repeat': {
     2005                values: ['repeat', 'stretch', 'space', 'round']
     2006        },
     2007        '-webkit-mask-box-image-source': {
     2008                values: ['none']
     2009        },
     2010        '-webkit-mask-box-image-width': {
     2011                values: ['auto']
     2012        },
     2013        '-webkit-mask-clip': {
     2014                values: ['text', 'border', 'border-box', 'content', 'content-box', 'padding', 'padding-box']
     2015        },
     2016        '-webkit-mask-composite': {
     2017                values: [
     2018                        'clear', 'copy', 'source-over', 'source-in', 'source-out', 'source-atop', 'destination-over', 'destination-in',
     2019                        'destination-out', 'destination-atop', 'xor', 'plus-lighter'
     2020                ]
     2021        },
     2022        '-webkit-mask-image': {
     2023                values: ['none']
     2024        },
     2025        '-webkit-mask-origin': {
     2026                values: ['border', 'border-box', 'content', 'content-box', 'padding', 'padding-box']
     2027        },
     2028        '-webkit-mask-position': {
     2029                values: ['top', 'bottom', 'left', 'right', 'center']
     2030        },
     2031        '-webkit-mask-position-x': {
     2032                values: ['left', 'right', 'center']
     2033        },
     2034        '-webkit-mask-position-y': {
     2035                values: ['top', 'bottom', 'center']
     2036        },
     2037        '-webkit-mask-repeat': {
     2038                values: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat', 'space', 'round']
     2039        },
     2040        '-webkit-mask-size': {
     2041                values: ['auto', 'contain', 'cover']
     2042        },
     2043        '-webkit-max-logical-height': {
     2044                values: ['none', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     2045        },
     2046        '-webkit-max-logical-width': {
     2047                values: ['none', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     2048        },
     2049        '-webkit-min-logical-height': {
     2050                values: ['auto', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     2051        },
     2052        '-webkit-min-logical-width': {
     2053                values: ['auto', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     2054        },
     2055        '-webkit-perspective-origin-x': {
     2056                values: ['left', 'right', 'center']
     2057        },
     2058        '-webkit-perspective-origin-y': {
     2059                values: ['top', 'bottom', 'center']
     2060        },
     2061        '-webkit-print-color-adjust': {
     2062                values: ['economy', 'exact']
     2063        },
     2064        '-webkit-rtl-ordering': {
     2065                values: ['logical', 'visual']
     2066        },
     2067        '-webkit-ruby-position': {
     2068                values: ['after', 'before']
     2069        },
     2070        '-webkit-text-decorations-in-effect': {
     2071                values: ['none', 'blink', 'line-through', 'overline', 'underline']
     2072        },
     2073        '-webkit-text-security': {
     2074                values: ['none', 'disc', 'circle', 'square']
     2075        },
     2076        '-webkit-text-stroke': {
     2077                values: ['medium', 'thick', 'thin']
     2078        },
     2079        '-webkit-text-stroke-width': {
     2080                values: ['medium', 'thick', 'thin']
     2081        },
     2082        '-webkit-transform-origin-x': {
     2083                values: ['left', 'right', 'center']
     2084        },
     2085        '-webkit-transform-origin-y': {
     2086                values: ['top', 'bottom', 'center']
     2087        },
     2088        '-webkit-user-drag': {
     2089                values: ['none', 'auto', 'element']
     2090        },
     2091        'width': {
     2092                values: ['auto', '-webkit-fill-available', 'min-content', 'max-content', 'fit-content']
     2093        },
     2094        'z-index': {
     2095                values: ['auto']
     2096        }
     2097};
     2098
     2099// Weight of CSS properties based on their usage from https://www.chromestatus.com/metrics/css/popularity
     2100SDK.CSSMetadata.Weight = {
     2101        'align-content': 57,
     2102        'align-items': 129,
     2103        'align-self': 55,
     2104        'animation': 175,
     2105        'animation-delay': 114,
     2106        'animation-direction': 113,
     2107        'animation-duration': 137,
     2108        'animation-fill-mode': 132,
     2109        'animation-iteration-count': 124,
     2110        'animation-name': 139,
     2111        'animation-play-state': 104,
     2112        'animation-timing-function': 141,
     2113        'backface-visibility': 123,
     2114        'background': 260,
     2115        'background-attachment': 119,
     2116        'background-clip': 165,
     2117        'background-color': 259,
     2118        'background-image': 246,
     2119        'background-origin': 107,
     2120        'background-position': 237,
     2121        'background-position-x': 108,
     2122        'background-position-y': 93,
     2123        'background-repeat': 234,
     2124        'background-size': 203,
     2125        'border': 263,
     2126        'border-bottom': 233,
     2127        'border-bottom-color': 190,
     2128        'border-bottom-left-radius': 186,
     2129        'border-bottom-right-radius': 185,
     2130        'border-bottom-style': 150,
     2131        'border-bottom-width': 179,
     2132        'border-collapse': 209,
     2133        'border-color': 226,
     2134        'border-image': 89,
     2135        'border-image-outset': 50,
     2136        'border-image-repeat': 49,
     2137        'border-image-slice': 58,
     2138        'border-image-source': 32,
     2139        'border-image-width': 52,
     2140        'border-left': 221,
     2141        'border-left-color': 174,
     2142        'border-left-style': 142,
     2143        'border-left-width': 172,
     2144        'border-radius': 224,
     2145        'border-right': 223,
     2146        'border-right-color': 182,
     2147        'border-right-style': 130,
     2148        'border-right-width': 178,
     2149        'border-spacing': 198,
     2150        'border-style': 206,
     2151        'border-top': 231,
     2152        'border-top-color': 192,
     2153        'border-top-left-radius': 187,
     2154        'border-top-right-radius': 189,
     2155        'border-top-style': 152,
     2156        'border-top-width': 180,
     2157        'border-width': 214,
     2158        'bottom': 227,
     2159        'box-shadow': 213,
     2160        'box-sizing': 216,
     2161        'caption-side': 96,
     2162        'clear': 229,
     2163        'clip': 173,
     2164        'clip-rule': 5,
     2165        'color': 256,
     2166        'content': 219,
     2167        'counter-increment': 111,
     2168        'counter-reset': 110,
     2169        'cursor': 250,
     2170        'direction': 176,
     2171        'display': 262,
     2172        'empty-cells': 99,
     2173        'fill': 140,
     2174        'fill-opacity': 82,
     2175        'fill-rule': 22,
     2176        'filter': 160,
     2177        'flex': 133,
     2178        'flex-basis': 66,
     2179        'flex-direction': 85,
     2180        'flex-flow': 94,
     2181        'flex-grow': 112,
     2182        'flex-shrink': 61,
     2183        'flex-wrap': 68,
     2184        'float': 252,
     2185        'font': 211,
     2186        'font-family': 254,
     2187        'font-kerning': 18,
     2188        'font-size': 264,
     2189        'font-stretch': 77,
     2190        'font-style': 220,
     2191        'font-variant': 161,
     2192        'font-weight': 257,
     2193        'height': 266,
     2194        'image-rendering': 90,
     2195        'justify-content': 127,
     2196        'left': 248,
     2197        'letter-spacing': 188,
     2198        'line-height': 244,
     2199        'list-style': 215,
     2200        'list-style-image': 145,
     2201        'list-style-position': 149,
     2202        'list-style-type': 199,
     2203        'margin': 267,
     2204        'margin-bottom': 241,
     2205        'margin-left': 243,
     2206        'margin-right': 238,
     2207        'margin-top': 253,
     2208        'mask': 20,
     2209        'max-height': 205,
     2210        'max-width': 225,
     2211        'min-height': 217,
     2212        'min-width': 218,
     2213        'object-fit': 33,
     2214        'opacity': 251,
     2215        'order': 117,
     2216        'orphans': 146,
     2217        'outline': 222,
     2218        'outline-color': 153,
     2219        'outline-offset': 147,
     2220        'outline-style': 151,
     2221        'outline-width': 148,
     2222        'overflow': 255,
     2223        'overflow-wrap': 105,
     2224        'overflow-x': 184,
     2225        'overflow-y': 196,
     2226        'padding': 265,
     2227        'padding-bottom': 230,
     2228        'padding-left': 235,
     2229        'padding-right': 232,
     2230        'padding-top': 240,
     2231        'page': 8,
     2232        'page-break-after': 120,
     2233        'page-break-before': 69,
     2234        'page-break-inside': 121,
     2235        'perspective': 92,
     2236        'perspective-origin': 103,
     2237        'pointer-events': 183,
     2238        'position': 261,
     2239        'quotes': 158,
     2240        'resize': 168,
     2241        'right': 245,
     2242        'shape-rendering': 38,
     2243        'size': 64,
     2244        'speak': 118,
     2245        'src': 170,
     2246        'stop-color': 42,
     2247        'stop-opacity': 31,
     2248        'stroke': 98,
     2249        'stroke-dasharray': 36,
     2250        'stroke-dashoffset': 3,
     2251        'stroke-linecap': 30,
     2252        'stroke-linejoin': 21,
     2253        'stroke-miterlimit': 12,
     2254        'stroke-opacity': 34,
     2255        'stroke-width': 87,
     2256        'table-layout': 171,
     2257        'tab-size': 46,
     2258        'text-align': 260,
     2259        'text-anchor': 35,
     2260        'text-decoration': 247,
     2261        'text-indent': 207,
     2262        'text-overflow': 204,
     2263        'text-rendering': 155,
     2264        'text-shadow': 208,
     2265        'text-transform': 202,
     2266        'top': 258,
     2267        'touch-action': 80,
     2268        'transform': 181,
     2269        'transform-origin': 162,
     2270        'transform-style': 86,
     2271        'transition': 193,
     2272        'transition-delay': 134,
     2273        'transition-duration': 135,
     2274        'transition-property': 131,
     2275        'transition-timing-function': 122,
     2276        'unicode-bidi': 156,
     2277        'unicode-range': 136,
     2278        'vertical-align': 236,
     2279        'visibility': 242,
     2280        '-webkit-appearance': 191,
     2281        '-webkit-backface-visibility': 154,
     2282        '-webkit-background-clip': 164,
     2283        '-webkit-background-origin': 40,
     2284        '-webkit-background-size': 163,
     2285        '-webkit-border-end': 9,
     2286        '-webkit-border-horizontal-spacing': 81,
     2287        '-webkit-border-image': 75,
     2288        '-webkit-border-radius': 212,
     2289        '-webkit-border-start': 10,
     2290        '-webkit-border-start-color': 16,
     2291        '-webkit-border-start-width': 13,
     2292        '-webkit-border-vertical-spacing': 43,
     2293        '-webkit-box-align': 101,
     2294        '-webkit-box-direction': 51,
     2295        '-webkit-box-flex': 128,
     2296        '-webkit-box-lines': 2,
     2297        '-webkit-box-ordinal-group': 91,
     2298        '-webkit-box-orient': 144,
     2299        '-webkit-box-pack': 106,
     2300        '-webkit-box-reflect': 39,
     2301        '-webkit-box-shadow': 210,
     2302        '-webkit-column-break-inside': 60,
     2303        '-webkit-column-count': 84,
     2304        '-webkit-column-gap': 76,
     2305        '-webkit-column-rule': 25,
     2306        '-webkit-column-rule-color': 23,
     2307        '-webkit-columns': 44,
     2308        '-webkit-column-span': 29,
     2309        '-webkit-column-width': 47,
     2310        '-webkit-filter': 159,
     2311        '-webkit-font-feature-settings': 59,
     2312        '-webkit-font-smoothing': 177,
     2313        '-webkit-highlight': 1,
     2314        '-webkit-line-break': 45,
     2315        '-webkit-line-clamp': 126,
     2316        '-webkit-margin-after': 67,
     2317        '-webkit-margin-before': 70,
     2318        '-webkit-margin-collapse': 14,
     2319        '-webkit-margin-end': 65,
     2320        '-webkit-margin-start': 100,
     2321        '-webkit-margin-top-collapse': 78,
     2322        '-webkit-mask': 19,
     2323        '-webkit-mask-box-image': 72,
     2324        '-webkit-mask-image': 88,
     2325        '-webkit-mask-position': 54,
     2326        '-webkit-mask-repeat': 63,
     2327        '-webkit-mask-size': 79,
     2328        '-webkit-padding-after': 15,
     2329        '-webkit-padding-before': 28,
     2330        '-webkit-padding-end': 48,
     2331        '-webkit-padding-start': 73,
     2332        '-webkit-print-color-adjust': 83,
     2333        '-webkit-rtl-ordering': 7,
     2334        '-webkit-tap-highlight-color': 169,
     2335        '-webkit-text-emphasis-color': 11,
     2336        '-webkit-text-fill-color': 71,
     2337        '-webkit-text-security': 17,
     2338        '-webkit-text-stroke': 56,
     2339        '-webkit-text-stroke-color': 37,
     2340        '-webkit-text-stroke-width': 53,
     2341        '-webkit-user-drag': 95,
     2342        '-webkit-user-modify': 62,
     2343        '-webkit-user-select': 194,
     2344        '-webkit-writing-mode': 4,
     2345        'white-space': 228,
     2346        'widows': 115,
     2347        'width': 268,
     2348        'will-change': 74,
     2349        'word-break': 166,
     2350        'word-spacing': 157,
     2351        'word-wrap': 197,
     2352        'writing-mode': 41,
     2353        'z-index': 239,
     2354        'zoom': 200
     2355};