| /** |
| @license |
| Copyright (c) 2017 The Polymer Project Authors. All rights reserved. |
| This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt |
| The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt |
| The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt |
| Code distributed by Google as part of the polymer project is also |
| subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt |
| */ |
| |
| 'use strict'; |
| |
| export const nativeShadow = !(window['ShadyDOM'] && window['ShadyDOM']['inUse']); |
| let nativeCssVariables_; |
| |
| /** |
| * @param {(ShadyCSSOptions | ShadyCSSInterface)=} settings |
| */ |
| function calcCssVariables(settings) { |
| if (settings && settings['shimcssproperties']) { |
| nativeCssVariables_ = false; |
| } else { |
| // chrome 49 has semi-working css vars, check if box-shadow works |
| // safari 9.1 has a recalc bug: https://bugs.webkit.org/show_bug.cgi?id=155782 |
| // However, shim css custom properties are only supported with ShadyDOM enabled, |
| // so fall back on native if we do not detect ShadyDOM |
| // Edge 15: custom properties used in ::before and ::after will also be used in the parent element |
| // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12414257/ |
| nativeCssVariables_ = nativeShadow || Boolean(!navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/) && |
| window.CSS && CSS.supports && CSS.supports('box-shadow', '0 0 0 var(--foo)')); |
| } |
| } |
| |
| /** @type {string | undefined} */ |
| export let cssBuild; |
| if (window.ShadyCSS && window.ShadyCSS.cssBuild !== undefined) { |
| cssBuild = window.ShadyCSS.cssBuild; |
| } |
| |
| if (window.ShadyCSS && window.ShadyCSS.nativeCss !== undefined) { |
| nativeCssVariables_ = window.ShadyCSS.nativeCss; |
| } else if (window.ShadyCSS) { |
| calcCssVariables(window.ShadyCSS); |
| // reset window variable to let ShadyCSS API take its place |
| window.ShadyCSS = undefined; |
| } else { |
| calcCssVariables(window['WebComponents'] && window['WebComponents']['flags']); |
| } |
| |
| // Hack for type error under new type inference which doesn't like that |
| // nativeCssVariables is updated in a function and assigns the type |
| // `function(): ?` instead of `boolean`. |
| export const nativeCssVariables = /** @type {boolean} */(nativeCssVariables_); |