| /* |
| * Copyright (C) 2010 Nikita Vasilyev. All rights reserved. |
| * Copyright (C) 2010 Joseph Pecoraro. All rights reserved. |
| * Copyright (C) 2010 Google Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are |
| * met: |
| * |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above |
| * copyright notice, this list of conditions and the following disclaimer |
| * in the documentation and/or other materials provided with the |
| * distribution. |
| * * Neither the name of Google Inc. nor the names of its |
| * contributors may be used to endorse or promote products derived from |
| * this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| /** |
| * @unrestricted |
| */ |
| export default class CSSMetadata { |
| /** |
| * @param {!Array.<!SDK.CSSMetadata.CSSPropertyDefinition>} properties |
| */ |
| constructor(properties) { |
| this._values = /** !Array.<string> */ ([]); |
| /** @type {!Map<string, !Array<string>>} */ |
| this._longhands = new Map(); |
| /** @type {!Map<string, !Array<string>>} */ |
| this._shorthands = new Map(); |
| /** @type {!Set<string>} */ |
| this._inherited = new Set(); |
| /** @type {!Set<string>} */ |
| this._svgProperties = new Set(); |
| for (let i = 0; i < properties.length; ++i) { |
| const property = properties[i]; |
| const propertyName = property.name; |
| if (!CSS.supports(propertyName, 'initial')) { |
| continue; |
| } |
| this._values.push(propertyName); |
| |
| if (property.inherited) { |
| this._inherited.add(propertyName); |
| } |
| if (property.svg) { |
| this._svgProperties.add(propertyName); |
| } |
| |
| const longhands = properties[i].longhands; |
| if (longhands) { |
| this._longhands.set(propertyName, longhands); |
| for (let j = 0; j < longhands.length; ++j) { |
| const longhandName = longhands[j]; |
| let shorthands = this._shorthands.get(longhandName); |
| if (!shorthands) { |
| shorthands = []; |
| this._shorthands.set(longhandName, shorthands); |
| } |
| shorthands.push(propertyName); |
| } |
| } |
| } |
| this._values.sort(CSSMetadata._sortPrefixesToEnd); |
| this._valuesSet = new Set(this._values); |
| |
| // Reads in auto-generated property names and values from blink/public/renderer/core/css/css_properties.json5 |
| // treats _generatedPropertyValues as basis |
| for (const [prop, basisValueObj] of Object.entries(CSSMetadata._generatedPropertyValues)) { |
| _finalPropertyValues[prop] = basisValueObj; |
| } |
| // and add manually maintained map of extra prop-value pairs |
| for (const [prop, extraValueObj] of Object.entries(_extraPropertyValues)) { |
| if (_finalPropertyValues[prop]) { |
| const baseValues = _finalPropertyValues[prop].values; |
| const baseValueSet = new Set(baseValues); |
| extraValueObj.values.forEach(extraVal => { |
| if (!baseValueSet.has(extraVal)) { |
| baseValues.push(extraVal); |
| } |
| }); |
| } else { |
| _finalPropertyValues[prop] = extraValueObj; |
| } |
| } |
| |
| /** @type {!Array<string>} */ |
| this._nameValuePresets = []; |
| /** @type {!Array<string>} */ |
| this._nameValuePresetsIncludingSVG = []; |
| for (const name of this._valuesSet) { |
| const values = this._specificPropertyValues(name) |
| .filter(value => CSS.supports(name, value)) |
| .sort(CSSMetadata._sortPrefixesToEnd); |
| const presets = values.map(value => `${name}: ${value}`); |
| if (!this.isSVGProperty(name)) { |
| this._nameValuePresets.pushAll(presets); |
| } |
| this._nameValuePresetsIncludingSVG.pushAll(presets); |
| } |
| } |
| |
| /** |
| * @param {string} a |
| * @param {string} b |
| */ |
| static _sortPrefixesToEnd(a, b) { |
| const aIsPrefixed = a.startsWith('-webkit-'); |
| const bIsPrefixed = b.startsWith('-webkit-'); |
| if (aIsPrefixed && !bIsPrefixed) { |
| return 1; |
| } |
| if (!aIsPrefixed && bIsPrefixed) { |
| return -1; |
| } |
| return a < b ? -1 : (a > b ? 1 : 0); |
| } |
| |
| /** |
| * @return {!Array<string>} |
| */ |
| allProperties() { |
| return this._values; |
| } |
| |
| /** |
| * @param {boolean=} includeSVG |
| * @return {!Array<string>} |
| */ |
| nameValuePresets(includeSVG) { |
| return includeSVG ? this._nameValuePresetsIncludingSVG : this._nameValuePresets; |
| } |
| |
| /** |
| * @param {string} name |
| * @return {boolean} |
| */ |
| isSVGProperty(name) { |
| name = name.toLowerCase(); |
| return this._svgProperties.has(name); |
| } |
| |
| /** |
| * @param {string} shorthand |
| * @return {?Array.<string>} |
| */ |
| longhands(shorthand) { |
| return this._longhands.get(shorthand) || null; |
| } |
| |
| /** |
| * @param {string} longhand |
| * @return {?Array.<string>} |
| */ |
| shorthands(longhand) { |
| return this._shorthands.get(longhand) || null; |
| } |
| |
| /** |
| * @param {string} propertyName |
| * @return {boolean} |
| */ |
| isColorAwareProperty(propertyName) { |
| return !!_colorAwareProperties.has(propertyName.toLowerCase()) || this.isCustomProperty(propertyName.toLowerCase()); |
| } |
| |
| /** |
| * @param {string} propertyName |
| * @return {boolean} |
| */ |
| isGridAreaDefiningProperty(propertyName) { |
| propertyName = propertyName.toLowerCase(); |
| return propertyName === 'grid' || propertyName === 'grid-template' || propertyName === 'grid-template-areas'; |
| } |
| |
| /** |
| * @param {string} propertyName |
| * @return {boolean} |
| */ |
| isLengthProperty(propertyName) { |
| propertyName = propertyName.toLowerCase(); |
| if (propertyName === 'line-height') { |
| return false; |
| } |
| return _distanceProperties.has(propertyName) || propertyName.startsWith('margin') || |
| propertyName.startsWith('padding') || propertyName.indexOf('width') !== -1 || |
| propertyName.indexOf('height') !== -1; |
| } |
| |
| /** |
| * @param {string} propertyName |
| * @return {boolean} |
| */ |
| isBezierAwareProperty(propertyName) { |
| propertyName = propertyName.toLowerCase(); |
| return !!_bezierAwareProperties.has(propertyName) || this.isCustomProperty(propertyName); |
| } |
| |
| /** |
| * @param {string} propertyName |
| * @return {boolean} |
| */ |
| isCustomProperty(propertyName) { |
| return propertyName.startsWith('--'); |
| } |
| |
| /** |
| * @param {string} name |
| * @return {string} |
| */ |
| canonicalPropertyName(name) { |
| if (this.isCustomProperty(name)) { |
| return name; |
| } |
| name = name.toLowerCase(); |
| if (!name || name.length < 9 || name.charAt(0) !== '-') { |
| return name; |
| } |
| const match = name.match(/(?:-webkit-)(.+)/); |
| if (!match || !this._valuesSet.has(match[1])) { |
| return name; |
| } |
| return match[1]; |
| } |
| |
| /** |
| * @param {string} propertyName |
| * @return {boolean} |
| */ |
| isCSSPropertyName(propertyName) { |
| propertyName = propertyName.toLowerCase(); |
| if (propertyName.startsWith('-moz-') || propertyName.startsWith('-o-') || propertyName.startsWith('-webkit-') || |
| propertyName.startsWith('-ms-')) { |
| return true; |
| } |
| return this._valuesSet.has(propertyName); |
| } |
| |
| /** |
| * @param {string} propertyName |
| * @return {boolean} |
| */ |
| isPropertyInherited(propertyName) { |
| propertyName = propertyName.toLowerCase(); |
| return propertyName.startsWith('--') || this._inherited.has(this.canonicalPropertyName(propertyName)) || |
| this._inherited.has(propertyName); |
| } |
| |
| /** |
| * @param {string} propertyName |
| * @return {!Array<string>} |
| */ |
| _specificPropertyValues(propertyName) { |
| const unprefixedName = propertyName.replace(/^-webkit-/, ''); |
| const entry = _finalPropertyValues[propertyName] || _finalPropertyValues[unprefixedName]; |
| const keywords = entry && entry.values ? entry.values.slice() : []; |
| for (const commonKeyword of ['auto', 'none']) { |
| if (!keywords.includes(commonKeyword) && CSS.supports(propertyName, commonKeyword)) { |
| keywords.push(commonKeyword); |
| } |
| } |
| return keywords; |
| } |
| |
| /** |
| * @param {string} propertyName |
| * @return {!Array<string>} |
| */ |
| propertyValues(propertyName) { |
| const acceptedKeywords = ['inherit', 'initial', 'unset']; |
| propertyName = propertyName.toLowerCase(); |
| acceptedKeywords.pushAll(this._specificPropertyValues(propertyName)); |
| if (this.isColorAwareProperty(propertyName)) { |
| acceptedKeywords.push('currentColor'); |
| for (const color in Common.Color.Nicknames) { |
| acceptedKeywords.push(color); |
| } |
| } |
| return acceptedKeywords.sort(CSSMetadata._sortPrefixesToEnd); |
| } |
| |
| /** |
| * @param {string} property |
| * @return {number} |
| */ |
| propertyUsageWeight(property) { |
| return Weight[property] || Weight[this.canonicalPropertyName(property)] || 0; |
| } |
| |
| /** |
| * @param {string} key |
| * @param {string} value |
| * @return {?{text: string, startColumn: number, endColumn: number}} |
| */ |
| getValuePreset(key, value) { |
| const values = _valuePresets.get(key); |
| let text = values ? values.get(value) : null; |
| if (!text) { |
| return null; |
| } |
| let startColumn = text.length; |
| let endColumn = text.length; |
| if (text) { |
| startColumn = text.indexOf('|'); |
| endColumn = text.lastIndexOf('|'); |
| endColumn = startColumn === endColumn ? endColumn : endColumn - 1; |
| text = text.replace(/\|/g, ''); |
| } |
| return {text, startColumn, endColumn}; |
| } |
| } |
| |
| export const VariableRegex = /(var\(--.*?\))/g; |
| export const URLRegex = /url\(\s*('.+?'|".+?"|[^)]+)\s*\)/g; |
| |
| /** |
| * Matches an instance of a grid area 'row' definition. |
| * 'grid-template-areas', e.g. |
| * "a a ." |
| * |
| * 'grid', 'grid-template', e.g. |
| * [track-name] "a a ." minmax(50px, auto) [track-name] |
| */ |
| export const GridAreaRowRegex = /((?:\[[\w\- ]+\]\s*)*(?:"[^"]+"|'[^']+'))[^'"\[]*\[?[^'"\[]*/; |
| |
| /** |
| * @return {!CSSMetadata} |
| */ |
| export function cssMetadata() { |
| if (!CSSMetadata._instance) { |
| CSSMetadata._instance = new CSSMetadata(CSSMetadata._generatedProperties); |
| } |
| return CSSMetadata._instance; |
| } |
| |
| /** |
| * The pipe character '|' indicates where text selection should be set. |
| */ |
| const _imageValuePresetMap = new Map([ |
| ['linear-gradient', 'linear-gradient(|45deg, black, transparent|)'], |
| ['radial-gradient', 'radial-gradient(|black, transparent|)'], |
| ['repeating-linear-gradient', 'repeating-linear-gradient(|45deg, black, transparent 100px|)'], |
| ['repeating-radial-gradient', 'repeating-radial-gradient(|black, transparent 100px|)'], |
| ['url', 'url(||)'], |
| ]); |
| |
| const _valuePresets = new Map([ |
| [ |
| 'filter', new Map([ |
| ['blur', 'blur(|1px|)'], |
| ['brightness', 'brightness(|0.5|)'], |
| ['contrast', 'contrast(|0.5|)'], |
| ['drop-shadow', 'drop-shadow(|2px 4px 6px black|)'], |
| ['grayscale', 'grayscale(|1|)'], |
| ['hue-rotate', 'hue-rotate(|45deg|)'], |
| ['invert', 'invert(|1|)'], |
| ['opacity', 'opacity(|0.5|)'], |
| ['saturate', 'saturate(|0.5|)'], |
| ['sepia', 'sepia(|1|)'], |
| ['url', 'url(||)'], |
| ]) |
| ], |
| ['background', _imageValuePresetMap], ['background-image', _imageValuePresetMap], |
| ['-webkit-mask-image', _imageValuePresetMap], |
| [ |
| 'transform', new Map([ |
| ['scale', 'scale(|1.5|)'], |
| ['scaleX', 'scaleX(|1.5|)'], |
| ['scaleY', 'scaleY(|1.5|)'], |
| ['scale3d', 'scale3d(|1.5, 1.5, 1.5|)'], |
| ['rotate', 'rotate(|45deg|)'], |
| ['rotateX', 'rotateX(|45deg|)'], |
| ['rotateY', 'rotateY(|45deg|)'], |
| ['rotateZ', 'rotateZ(|45deg|)'], |
| ['rotate3d', 'rotate3d(|1, 1, 1, 45deg|)'], |
| ['skew', 'skew(|10deg, 10deg|)'], |
| ['skewX', 'skewX(|10deg|)'], |
| ['skewY', 'skewY(|10deg|)'], |
| ['translate', 'translate(|10px, 10px|)'], |
| ['translateX', 'translateX(|10px|)'], |
| ['translateY', 'translateY(|10px|)'], |
| ['translateZ', 'translateZ(|10px|)'], |
| ['translate3d', 'translate3d(|10px, 10px, 10px|)'], |
| ['matrix', 'matrix(|1, 0, 0, 1, 0, 0|)'], |
| ['matrix3d', 'matrix3d(|1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1|)'], |
| ['perspective', 'perspective(|10px|)'] |
| ]) |
| ] |
| ]); |
| |
| const _distanceProperties = new Set([ |
| 'background-position', 'border-spacing', 'bottom', 'font-size', 'height', 'left', 'letter-spacing', 'max-height', |
| 'max-width', 'min-height', 'min-width', 'right', 'text-indent', 'top', 'width', 'word-spacing', 'grid-row-gap', |
| 'grid-column-gap', 'row-gap' |
| ]); |
| |
| const _bezierAwareProperties = new Set([ |
| 'animation', 'animation-timing-function', 'transition', 'transition-timing-function', '-webkit-animation', |
| '-webkit-animation-timing-function', '-webkit-transition', '-webkit-transition-timing-function' |
| ]); |
| |
| const _colorAwareProperties = new Set([ |
| 'backdrop-filter', |
| 'background', |
| 'background-color', |
| 'background-image', |
| 'border', |
| 'border-color', |
| 'border-image', |
| 'border-image-source', |
| 'border-bottom', |
| 'border-bottom-color', |
| 'border-left', |
| 'border-left-color', |
| 'border-right', |
| 'border-right-color', |
| 'border-top', |
| 'border-top-color', |
| 'box-shadow', |
| 'caret-color', |
| 'color', |
| 'column-rule', |
| 'column-rule-color', |
| 'fill', |
| 'list-style-image', |
| 'outline', |
| 'outline-color', |
| 'stroke', |
| 'text-decoration-color', |
| 'text-shadow', |
| '-webkit-border-after', |
| '-webkit-border-after-color', |
| '-webkit-border-before', |
| '-webkit-border-before-color', |
| '-webkit-border-end', |
| '-webkit-border-end-color', |
| '-webkit-border-start', |
| '-webkit-border-start-color', |
| '-webkit-box-reflect', |
| '-webkit-box-shadow', |
| '-webkit-column-rule-color', |
| '-webkit-filter', |
| '-webkit-mask', |
| '-webkit-mask-box-image', |
| '-webkit-mask-box-image-source', |
| '-webkit-mask-image', |
| '-webkit-tap-highlight-color', |
| '-webkit-text-decoration-color', |
| '-webkit-text-emphasis', |
| '-webkit-text-emphasis-color', |
| '-webkit-text-fill-color', |
| '-webkit-text-stroke', |
| '-webkit-text-stroke-color' |
| ]); |
| |
| // manually maintained list of property values to add into autocomplete list |
| const _extraPropertyValues = { |
| 'background-repeat': {values: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat', 'space', 'round']}, |
| 'content': {values: ['normal', 'close-quote', 'no-close-quote', 'no-open-quote', 'open-quote']}, |
| 'baseline-shift': {values: ['baseline']}, |
| 'max-height': {values: ['min-content', 'max-content', '-webkit-fill-available', 'fit-content']}, |
| 'box-shadow': {values: ['inset']}, |
| '-webkit-writing-mode': {values: ['horizontal-tb', 'vertical-rl', 'vertical-lr']}, |
| 'writing-mode': {values: ['lr', 'rl', 'tb', 'lr-tb', 'rl-tb', 'tb-rl']}, |
| 'page-break-inside': {values: ['avoid']}, |
| 'cursor': {values: ['-webkit-zoom-in', '-webkit-zoom-out', '-webkit-grab', '-webkit-grabbing']}, |
| 'border-width': {values: ['medium', 'thick', 'thin']}, |
| 'border-style': {values: ['hidden', 'inset', 'groove', 'ridge', 'outset', 'dotted', 'dashed', 'solid', 'double']}, |
| 'size': {values: ['a3', 'a4', 'a5', 'b4', 'b5', 'landscape', 'ledger', 'legal', 'letter', 'portrait']}, |
| 'overflow': {values: ['hidden', 'visible', 'overlay', 'scroll']}, |
| 'overscroll-behavior': {values: ['contain']}, |
| 'text-rendering': {values: ['optimizeSpeed', 'optimizeLegibility', 'geometricPrecision']}, |
| 'text-align': {values: ['-webkit-auto', '-webkit-match-parent']}, |
| 'color-interpolation': {values: ['sRGB', 'linearRGB']}, |
| 'word-wrap': {values: ['normal', 'break-word']}, |
| 'font-weight': {values: ['100', '200', '300', '400', '500', '600', '700', '800', '900']}, |
| '-webkit-text-emphasis': {values: ['circle', 'filled', 'open', 'dot', 'double-circle', 'triangle', 'sesame']}, |
| 'color-rendering': {values: ['optimizeSpeed', 'optimizeQuality']}, |
| '-webkit-text-combine': {values: ['horizontal']}, |
| 'text-orientation': {values: ['sideways-right']}, |
| 'outline': { |
| values: ['inset', 'groove', 'ridge', 'outset', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick', 'thin'] |
| }, |
| 'font': { |
| values: [ |
| 'caption', 'icon', 'menu', 'message-box', 'small-caption', '-webkit-mini-control', '-webkit-small-control', |
| '-webkit-control', 'status-bar' |
| ] |
| }, |
| 'dominant-baseline': {values: ['text-before-edge', 'text-after-edge', 'use-script', 'no-change', 'reset-size']}, |
| '-webkit-text-emphasis-position': {values: ['over', 'under']}, |
| 'alignment-baseline': {values: ['before-edge', 'after-edge', 'text-before-edge', 'text-after-edge', 'hanging']}, |
| 'page-break-before': {values: ['left', 'right', 'always', 'avoid']}, |
| 'border-image': {values: ['repeat', 'stretch', 'space', 'round']}, |
| 'text-decoration': |
| {values: ['blink', 'line-through', 'overline', 'underline', 'wavy', 'double', 'solid', 'dashed', 'dotted']}, |
| 'font-family': |
| {values: ['serif', 'sans-serif', 'cursive', 'fantasy', 'monospace', '-webkit-body', '-webkit-pictograph']}, |
| 'zoom': {values: ['normal']}, |
| 'max-width': {values: ['min-content', 'max-content', '-webkit-fill-available', 'fit-content']}, |
| '-webkit-font-smoothing': {values: ['antialiased', 'subpixel-antialiased']}, |
| 'border': { |
| values: [ |
| 'hidden', 'inset', 'groove', 'ridge', 'outset', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick', 'thin' |
| ] |
| }, |
| 'font-variant': { |
| values: [ |
| 'small-caps', |
| 'normal', |
| 'common-ligatures', |
| 'no-common-ligatures', |
| 'discretionary-ligatures', |
| 'no-discretionary-ligatures', |
| 'historical-ligatures', |
| 'no-historical-ligatures', |
| 'contextual', |
| 'no-contextual', |
| 'all-small-caps', |
| 'petite-caps', |
| 'all-petite-caps', |
| 'unicase', |
| 'titling-caps', |
| 'lining-nums', |
| 'oldstyle-nums', |
| 'proportional-nums', |
| 'tabular-nums', |
| 'diagonal-fractions', |
| 'stacked-fractions', |
| 'ordinal', |
| 'slashed-zero', |
| 'jis78', |
| 'jis83', |
| 'jis90', |
| 'jis04', |
| 'simplified', |
| 'traditional', |
| 'full-width', |
| 'proportional-width', |
| 'ruby' |
| ] |
| }, |
| 'vertical-align': {values: ['top', 'bottom', '-webkit-baseline-middle']}, |
| 'page-break-after': {values: ['left', 'right', 'always', 'avoid']}, |
| '-webkit-text-emphasis-style': {values: ['circle', 'filled', 'open', 'dot', 'double-circle', 'triangle', 'sesame']}, |
| 'transform': { |
| values: [ |
| 'scale', 'scaleX', 'scaleY', 'scale3d', 'rotate', 'rotateX', 'rotateY', |
| 'rotateZ', 'rotate3d', 'skew', 'skewX', 'skewY', 'translate', 'translateX', |
| 'translateY', 'translateZ', 'translate3d', 'matrix', 'matrix3d', 'perspective' |
| ] |
| }, |
| 'align-content': { |
| values: [ |
| 'normal', 'baseline', 'space-between', 'space-around', 'space-evenly', 'stretch', 'center', 'start', 'end', |
| 'flex-start', 'flex-end' |
| ] |
| }, |
| 'justify-content': { |
| values: [ |
| 'normal', 'space-between', 'space-around', 'space-evenly', 'stretch', 'center', 'start', 'end', 'flex-start', |
| 'flex-end', 'left', 'right' |
| ] |
| }, |
| 'place-content': { |
| values: [ |
| 'normal', 'space-between', 'space-around', 'space-evenly', 'stretch', 'center', 'start', 'end', 'flex-start', |
| 'flex-end', 'baseline' |
| ] |
| }, |
| 'align-items': { |
| values: |
| ['normal', 'stretch', 'baseline', 'center', 'start', 'end', 'self-start', 'self-end', 'flex-start', 'flex-end'] |
| }, |
| 'justify-items': { |
| values: [ |
| 'normal', 'stretch', 'baseline', 'center', 'start', 'end', 'self-start', 'self-end', 'flex-start', 'flex-end', |
| 'left', 'right', 'legacy' |
| ] |
| }, |
| 'place-items': { |
| values: |
| ['normal', 'stretch', 'baseline', 'center', 'start', 'end', 'self-start', 'self-end', 'flex-start', 'flex-end'] |
| }, |
| 'align-self': { |
| values: |
| ['normal', 'stretch', 'baseline', 'center', 'start', 'end', 'self-start', 'self-end', 'flex-start', 'flex-end'] |
| }, |
| 'justify-self': { |
| values: [ |
| 'normal', 'stretch', 'baseline', 'center', 'start', 'end', 'self-start', 'self-end', 'flex-start', 'flex-end', |
| 'left', 'right' |
| ] |
| }, |
| 'place-self': { |
| values: |
| ['normal', 'stretch', 'baseline', 'center', 'start', 'end', 'self-start', 'self-end', 'flex-start', 'flex-end'] |
| }, |
| 'perspective-origin': {values: ['left', 'center', 'right', 'top', 'bottom']}, |
| 'transform-origin': {values: ['left', 'center', 'right', 'top', 'bottom']}, |
| 'transition-timing-function': {values: ['cubic-bezier', 'steps']}, |
| 'animation-timing-function': {values: ['cubic-bezier', 'steps']}, |
| '-webkit-backface-visibility': {values: ['visible', 'hidden']}, |
| '-webkit-column-break-after': {values: ['always', 'avoid']}, |
| '-webkit-column-break-before': {values: ['always', 'avoid']}, |
| '-webkit-column-break-inside': {values: ['avoid']}, |
| '-webkit-column-span': {values: ['all']}, |
| '-webkit-column-gap': {values: ['normal']}, |
| 'filter': { |
| values: [ |
| 'url', 'blur', 'brightness', 'contrast', 'drop-shadow', 'grayscale', 'hue-rotate', 'invert', 'opacity', |
| 'saturate', 'sepia' |
| ] |
| }, |
| 'mix-blend-mode': {values: ['unset']}, |
| 'background-blend-mode': {values: ['unset']}, |
| 'grid-template-columns': {values: ['min-content', 'max-content']}, |
| 'grid-template-rows': {values: ['min-content', 'max-content']}, |
| 'grid-auto-flow': {values: ['dense']}, |
| 'background': { |
| values: [ |
| 'repeat', |
| 'repeat-x', |
| 'repeat-y', |
| 'no-repeat', |
| 'top', |
| 'bottom', |
| 'left', |
| 'right', |
| 'center', |
| 'fixed', |
| 'local', |
| 'scroll', |
| 'space', |
| 'round', |
| 'border-box', |
| 'content-box', |
| 'padding-box', |
| 'linear-gradient', |
| 'radial-gradient', |
| 'repeating-linear-gradient', |
| 'repeating-radial-gradient', |
| 'url' |
| ] |
| }, |
| 'background-image': |
| {values: ['linear-gradient', 'radial-gradient', 'repeating-linear-gradient', 'repeating-radial-gradient', 'url']}, |
| 'background-position': {values: ['top', 'bottom', 'left', 'right', 'center']}, |
| 'background-position-x': {values: ['left', 'right', 'center']}, |
| 'background-position-y': {values: ['top', 'bottom', 'center']}, |
| 'background-repeat-x': {values: ['repeat', 'no-repeat']}, |
| 'background-repeat-y': {values: ['repeat', 'no-repeat']}, |
| 'border-bottom': { |
| values: [ |
| 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick', 'thin' |
| ] |
| }, |
| 'border-left': { |
| values: [ |
| 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick', 'thin' |
| ] |
| }, |
| 'border-right': { |
| values: [ |
| 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick', 'thin' |
| ] |
| }, |
| 'border-top': { |
| values: [ |
| 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick', 'thin' |
| ] |
| }, |
| 'buffered-rendering': {values: ['static', 'dynamic']}, |
| 'color-interpolation-filters': {values: ['srgb', 'linearrgb']}, |
| 'column-rule': { |
| values: [ |
| 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick', 'thin' |
| ] |
| }, |
| 'flex-flow': {values: ['nowrap', 'row', 'row-reverse', 'column', 'column-reverse', 'wrap', 'wrap-reverse']}, |
| 'height': {values: ['-webkit-fill-available']}, |
| 'inline-size': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| 'list-style': { |
| values: [ |
| 'outside', |
| 'inside', |
| 'disc', |
| 'circle', |
| 'square', |
| 'decimal', |
| 'decimal-leading-zero', |
| 'arabic-indic', |
| 'bengali', |
| 'cambodian', |
| 'khmer', |
| 'devanagari', |
| 'gujarati', |
| 'gurmukhi', |
| 'kannada', |
| 'lao', |
| 'malayalam', |
| 'mongolian', |
| 'myanmar', |
| 'oriya', |
| 'persian', |
| 'urdu', |
| 'telugu', |
| 'tibetan', |
| 'thai', |
| 'lower-roman', |
| 'upper-roman', |
| 'lower-greek', |
| 'lower-alpha', |
| 'lower-latin', |
| 'upper-alpha', |
| 'upper-latin', |
| 'cjk-earthly-branch', |
| 'cjk-heavenly-stem', |
| 'ethiopic-halehame', |
| 'ethiopic-halehame-am', |
| 'ethiopic-halehame-ti-er', |
| 'ethiopic-halehame-ti-et', |
| 'hangul', |
| 'hangul-consonant', |
| 'korean-hangul-formal', |
| 'korean-hanja-formal', |
| 'korean-hanja-informal', |
| 'hebrew', |
| 'armenian', |
| 'lower-armenian', |
| 'upper-armenian', |
| 'georgian', |
| 'cjk-ideographic', |
| 'simp-chinese-formal', |
| 'simp-chinese-informal', |
| 'trad-chinese-formal', |
| 'trad-chinese-informal', |
| 'hiragana', |
| 'katakana', |
| 'hiragana-iroha', |
| 'katakana-iroha' |
| ] |
| }, |
| 'max-block-size': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| 'max-inline-size': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| 'min-block-size': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| 'min-height': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| 'min-inline-size': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| 'min-width': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| 'object-position': {values: ['top', 'bottom', 'left', 'right', 'center']}, |
| 'shape-outside': {values: ['border-box', 'content-box', 'padding-box', 'margin-box']}, |
| '-webkit-appearance': { |
| values: [ |
| 'checkbox', |
| 'radio', |
| 'push-button', |
| 'square-button', |
| 'button', |
| 'inner-spin-button', |
| 'listbox', |
| 'media-slider', |
| 'media-sliderthumb', |
| 'media-volume-slider', |
| 'media-volume-sliderthumb', |
| 'menulist', |
| 'menulist-button', |
| 'meter', |
| 'progress-bar', |
| 'slider-horizontal', |
| 'slider-vertical', |
| 'sliderthumb-horizontal', |
| 'sliderthumb-vertical', |
| 'searchfield', |
| 'searchfield-cancel-button', |
| 'textfield', |
| 'textarea' |
| ] |
| }, |
| '-webkit-border-after': { |
| values: [ |
| 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick', 'thin' |
| ] |
| }, |
| '-webkit-border-after-style': |
| {values: ['hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double']}, |
| '-webkit-border-after-width': {values: ['medium', 'thick', 'thin']}, |
| '-webkit-border-before': { |
| values: [ |
| 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick', 'thin' |
| ] |
| }, |
| '-webkit-border-before-style': |
| {values: ['hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double']}, |
| '-webkit-border-before-width': {values: ['medium', 'thick', 'thin']}, |
| '-webkit-border-end': { |
| values: [ |
| 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick', 'thin' |
| ] |
| }, |
| '-webkit-border-end-style': |
| {values: ['hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double']}, |
| '-webkit-border-end-width': {values: ['medium', 'thick', 'thin']}, |
| '-webkit-border-start': { |
| values: [ |
| 'hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double', 'medium', 'thick', 'thin' |
| ] |
| }, |
| '-webkit-border-start-style': |
| {values: ['hidden', 'inset', 'groove', 'outset', 'ridge', 'dotted', 'dashed', 'solid', 'double']}, |
| '-webkit-border-start-width': {values: ['medium', 'thick', 'thin']}, |
| '-webkit-logical-height': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| '-webkit-logical-width': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| '-webkit-margin-collapse': {values: ['collapse', 'separate', 'discard']}, |
| '-webkit-mask-box-image': {values: ['repeat', 'stretch', 'space', 'round']}, |
| '-webkit-mask-box-image-repeat': {values: ['repeat', 'stretch', 'space', 'round']}, |
| '-webkit-mask-clip': {values: ['text', 'border', 'border-box', 'content', 'content-box', 'padding', 'padding-box']}, |
| '-webkit-mask-composite': { |
| values: [ |
| 'clear', 'copy', 'source-over', 'source-in', 'source-out', 'source-atop', 'destination-over', 'destination-in', |
| 'destination-out', 'destination-atop', 'xor', 'plus-lighter' |
| ] |
| }, |
| '-webkit-mask-image': |
| {values: ['linear-gradient', 'radial-gradient', 'repeating-linear-gradient', 'repeating-radial-gradient', 'url']}, |
| '-webkit-mask-origin': {values: ['border', 'border-box', 'content', 'content-box', 'padding', 'padding-box']}, |
| '-webkit-mask-position': {values: ['top', 'bottom', 'left', 'right', 'center']}, |
| '-webkit-mask-position-x': {values: ['left', 'right', 'center']}, |
| '-webkit-mask-position-y': {values: ['top', 'bottom', 'center']}, |
| '-webkit-mask-repeat': {values: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat', 'space', 'round']}, |
| '-webkit-mask-size': {values: ['contain', 'cover']}, |
| '-webkit-max-logical-height': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| '-webkit-max-logical-width': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| '-webkit-min-logical-height': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| '-webkit-min-logical-width': {values: ['-webkit-fill-available', 'min-content', 'max-content', 'fit-content']}, |
| '-webkit-perspective-origin-x': {values: ['left', 'right', 'center']}, |
| '-webkit-perspective-origin-y': {values: ['top', 'bottom', 'center']}, |
| '-webkit-text-decorations-in-effect': {values: ['blink', 'line-through', 'overline', 'underline']}, |
| '-webkit-text-stroke': {values: ['medium', 'thick', 'thin']}, |
| '-webkit-text-stroke-width': {values: ['medium', 'thick', 'thin']}, |
| '-webkit-transform-origin-x': {values: ['left', 'right', 'center']}, |
| '-webkit-transform-origin-y': {values: ['top', 'bottom', 'center']}, |
| 'width': {values: ['-webkit-fill-available']} |
| }; |
| |
| // final CSS property values for CSSMetadata to use as autocomplete list |
| // this object gets populated during initialization of cssMetadata instance |
| const _finalPropertyValues = {}; |
| |
| // Weight of CSS properties based on their usage from https://www.chromestatus.com/metrics/css/popularity |
| const Weight = { |
| 'align-content': 57, |
| 'align-items': 129, |
| 'align-self': 55, |
| 'animation': 175, |
| 'animation-delay': 114, |
| 'animation-direction': 113, |
| 'animation-duration': 137, |
| 'animation-fill-mode': 132, |
| 'animation-iteration-count': 124, |
| 'animation-name': 139, |
| 'animation-play-state': 104, |
| 'animation-timing-function': 141, |
| 'backface-visibility': 123, |
| 'background': 260, |
| 'background-attachment': 119, |
| 'background-clip': 165, |
| 'background-color': 259, |
| 'background-image': 246, |
| 'background-origin': 107, |
| 'background-position': 237, |
| 'background-position-x': 108, |
| 'background-position-y': 93, |
| 'background-repeat': 234, |
| 'background-size': 203, |
| 'border': 263, |
| 'border-bottom': 233, |
| 'border-bottom-color': 190, |
| 'border-bottom-left-radius': 186, |
| 'border-bottom-right-radius': 185, |
| 'border-bottom-style': 150, |
| 'border-bottom-width': 179, |
| 'border-collapse': 209, |
| 'border-color': 226, |
| 'border-image': 89, |
| 'border-image-outset': 50, |
| 'border-image-repeat': 49, |
| 'border-image-slice': 58, |
| 'border-image-source': 32, |
| 'border-image-width': 52, |
| 'border-left': 221, |
| 'border-left-color': 174, |
| 'border-left-style': 142, |
| 'border-left-width': 172, |
| 'border-radius': 224, |
| 'border-right': 223, |
| 'border-right-color': 182, |
| 'border-right-style': 130, |
| 'border-right-width': 178, |
| 'border-spacing': 198, |
| 'border-style': 206, |
| 'border-top': 231, |
| 'border-top-color': 192, |
| 'border-top-left-radius': 187, |
| 'border-top-right-radius': 189, |
| 'border-top-style': 152, |
| 'border-top-width': 180, |
| 'border-width': 214, |
| 'bottom': 227, |
| 'box-shadow': 213, |
| 'box-sizing': 216, |
| 'caption-side': 96, |
| 'clear': 229, |
| 'clip': 173, |
| 'clip-rule': 5, |
| 'color': 256, |
| 'content': 219, |
| 'counter-increment': 111, |
| 'counter-reset': 110, |
| 'cursor': 250, |
| 'direction': 176, |
| 'display': 262, |
| 'empty-cells': 99, |
| 'fill': 140, |
| 'fill-opacity': 82, |
| 'fill-rule': 22, |
| 'filter': 160, |
| 'flex': 133, |
| 'flex-basis': 66, |
| 'flex-direction': 85, |
| 'flex-flow': 94, |
| 'flex-grow': 112, |
| 'flex-shrink': 61, |
| 'flex-wrap': 68, |
| 'float': 252, |
| 'font': 211, |
| 'font-family': 254, |
| 'font-kerning': 18, |
| 'font-size': 264, |
| 'font-stretch': 77, |
| 'font-style': 220, |
| 'font-variant': 161, |
| 'font-weight': 257, |
| 'height': 266, |
| 'image-rendering': 90, |
| 'justify-content': 127, |
| 'left': 248, |
| 'letter-spacing': 188, |
| 'line-height': 244, |
| 'list-style': 215, |
| 'list-style-image': 145, |
| 'list-style-position': 149, |
| 'list-style-type': 199, |
| 'margin': 267, |
| 'margin-bottom': 241, |
| 'margin-left': 243, |
| 'margin-right': 238, |
| 'margin-top': 253, |
| 'mask': 20, |
| 'max-height': 205, |
| 'max-width': 225, |
| 'min-height': 217, |
| 'min-width': 218, |
| 'object-fit': 33, |
| 'opacity': 251, |
| 'order': 117, |
| 'orphans': 146, |
| 'outline': 222, |
| 'outline-color': 153, |
| 'outline-offset': 147, |
| 'outline-style': 151, |
| 'outline-width': 148, |
| 'overflow': 255, |
| 'overflow-wrap': 105, |
| 'overflow-x': 184, |
| 'overflow-y': 196, |
| 'padding': 265, |
| 'padding-bottom': 230, |
| 'padding-left': 235, |
| 'padding-right': 232, |
| 'padding-top': 240, |
| 'page': 8, |
| 'page-break-after': 120, |
| 'page-break-before': 69, |
| 'page-break-inside': 121, |
| 'perspective': 92, |
| 'perspective-origin': 103, |
| 'pointer-events': 183, |
| 'position': 261, |
| 'quotes': 158, |
| 'resize': 168, |
| 'right': 245, |
| 'shape-rendering': 38, |
| 'size': 64, |
| 'speak': 118, |
| 'src': 170, |
| 'stop-color': 42, |
| 'stop-opacity': 31, |
| 'stroke': 98, |
| 'stroke-dasharray': 36, |
| 'stroke-dashoffset': 3, |
| 'stroke-linecap': 30, |
| 'stroke-linejoin': 21, |
| 'stroke-miterlimit': 12, |
| 'stroke-opacity': 34, |
| 'stroke-width': 87, |
| 'table-layout': 171, |
| 'tab-size': 46, |
| 'text-align': 260, |
| 'text-anchor': 35, |
| 'text-decoration': 247, |
| 'text-indent': 207, |
| 'text-overflow': 204, |
| 'text-rendering': 155, |
| 'text-shadow': 208, |
| 'text-transform': 202, |
| 'top': 258, |
| 'touch-action': 80, |
| 'transform': 181, |
| 'transform-origin': 162, |
| 'transform-style': 86, |
| 'transition': 193, |
| 'transition-delay': 134, |
| 'transition-duration': 135, |
| 'transition-property': 131, |
| 'transition-timing-function': 122, |
| 'unicode-bidi': 156, |
| 'unicode-range': 136, |
| 'vertical-align': 236, |
| 'visibility': 242, |
| '-webkit-appearance': 191, |
| '-webkit-backface-visibility': 154, |
| '-webkit-background-clip': 164, |
| '-webkit-background-origin': 40, |
| '-webkit-background-size': 163, |
| '-webkit-border-end': 9, |
| '-webkit-border-horizontal-spacing': 81, |
| '-webkit-border-image': 75, |
| '-webkit-border-radius': 212, |
| '-webkit-border-start': 10, |
| '-webkit-border-start-color': 16, |
| '-webkit-border-start-width': 13, |
| '-webkit-border-vertical-spacing': 43, |
| '-webkit-box-align': 101, |
| '-webkit-box-direction': 51, |
| '-webkit-box-flex': 128, |
| '-webkit-box-ordinal-group': 91, |
| '-webkit-box-orient': 144, |
| '-webkit-box-pack': 106, |
| '-webkit-box-reflect': 39, |
| '-webkit-box-shadow': 210, |
| '-webkit-column-break-inside': 60, |
| '-webkit-column-count': 84, |
| '-webkit-column-gap': 76, |
| '-webkit-column-rule': 25, |
| '-webkit-column-rule-color': 23, |
| '-webkit-columns': 44, |
| '-webkit-column-span': 29, |
| '-webkit-column-width': 47, |
| '-webkit-filter': 159, |
| '-webkit-font-feature-settings': 59, |
| '-webkit-font-smoothing': 177, |
| '-webkit-highlight': 1, |
| '-webkit-line-break': 45, |
| '-webkit-line-clamp': 126, |
| '-webkit-margin-after': 67, |
| '-webkit-margin-before': 70, |
| '-webkit-margin-collapse': 14, |
| '-webkit-margin-end': 65, |
| '-webkit-margin-start': 100, |
| '-webkit-margin-top-collapse': 78, |
| '-webkit-mask': 19, |
| '-webkit-mask-box-image': 72, |
| '-webkit-mask-image': 88, |
| '-webkit-mask-position': 54, |
| '-webkit-mask-repeat': 63, |
| '-webkit-mask-size': 79, |
| '-webkit-padding-after': 15, |
| '-webkit-padding-before': 28, |
| '-webkit-padding-end': 48, |
| '-webkit-padding-start': 73, |
| '-webkit-print-color-adjust': 83, |
| '-webkit-rtl-ordering': 7, |
| '-webkit-tap-highlight-color': 169, |
| '-webkit-text-emphasis-color': 11, |
| '-webkit-text-fill-color': 71, |
| '-webkit-text-security': 17, |
| '-webkit-text-stroke': 56, |
| '-webkit-text-stroke-color': 37, |
| '-webkit-text-stroke-width': 53, |
| '-webkit-user-drag': 95, |
| '-webkit-user-modify': 62, |
| '-webkit-user-select': 194, |
| '-webkit-writing-mode': 4, |
| 'white-space': 228, |
| 'widows': 115, |
| 'width': 268, |
| 'will-change': 74, |
| 'word-break': 166, |
| 'word-spacing': 157, |
| 'word-wrap': 197, |
| 'writing-mode': 41, |
| 'z-index': 239, |
| 'zoom': 200 |
| }; |
| |
| /* Legacy exported object */ |
| self.SDK = self.SDK || {}; |
| |
| /* Legacy exported object */ |
| SDK = SDK || {}; |
| |
| /** @constructor */ |
| SDK.CSSMetadata = CSSMetadata; |
| |
| SDK.CSSMetadata.VariableRegex = VariableRegex; |
| SDK.CSSMetadata.URLRegex = URLRegex; |
| SDK.CSSMetadata.GridAreaRowRegex = GridAreaRowRegex; |
| |
| SDK.cssMetadata = cssMetadata; |
| |
| /** |
| * @typedef {{name: string, longhands: !Array.<string>, inherited: boolean, svg: boolean}} |
| */ |
| SDK.CSSMetadata.CSSPropertyDefinition; |
| |
| /** |
| * @type {!Array<!SDK.CSSMetadata.CSSPropertyDefinition>} |
| */ |
| CSSMetadata._generatedProperties; |
| |
| /** |
| * @type {!Object.<string, {values: !Array.<string>}>} |
| */ |
| CSSMetadata._generatedPropertyValues; |