/**
@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
*/

/**
 * @fileoverview This file is a backwards-compatibility shim. Before Polymer
 *     converted to ES Modules, it wrote its API out onto the global Polymer
 *     object. The *_bridge.js files (like this one) maintain compatibility
 *     with that API.
 */

import './boot_bridge.js';
import './resolve-url_bridge.js';

import {cssFromModule as _cssFromModule, cssFromModuleImports as _cssFromModuleImports, cssFromModules as _cssFromModules, cssFromTemplate as _cssFromTemplate, stylesFromModule as _stylesFromModule, stylesFromModuleImports as _stylesFromModuleImports, stylesFromModules as _stylesFromModules, stylesFromTemplate as _stylesFromTemplate} from '@polymer/polymer/lib/utils/style-gather.js';

goog.declareModuleId('HtmlImportsNamespace.Polymer.Lib.Utils.StyleGather');

// This import then const trick is to be clear to the compiler that the
// imported symbols can't be mutated.
const cssFromModule = _cssFromModule;
const cssFromModuleImports = _cssFromModuleImports;
const cssFromModules = _cssFromModules;
const cssFromTemplate = _cssFromTemplate;
const stylesFromModule = _stylesFromModule;
const stylesFromModuleImports = _stylesFromModuleImports;
const stylesFromModules = _stylesFromModules;
const stylesFromTemplate = _stylesFromTemplate;

/** @const */
Polymer.StyleGather = {
  stylesFromModules,
  stylesFromModule,
  stylesFromTemplate,
  stylesFromModuleImports,
  cssFromModules,
  cssFromModule,
  cssFromTemplate,
  cssFromModuleImports,
};
