{"version":3,"file":"icon.es5.js","sources":["../../packages/material/esm5/icon/icon-registry.js","../../packages/material/esm5/icon/icon.js","../../packages/material/esm5/icon/icon-module.js","../../packages/material/esm5/icon/index.js"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { catchOperator, doOperator, finallyOperator, map, RxChain, share } from '@angular/cdk/rxjs';\nimport { Injectable, Optional, SecurityContext, SkipSelf } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { Observable } from 'rxjs/Observable';\nimport { forkJoin } from 'rxjs/observable/forkJoin';\nimport { of as observableOf } from 'rxjs/observable/of';\nimport { _throw as observableThrow } from 'rxjs/observable/throw';\n/**\n * Returns an exception to be thrown in the case when attempting to\n * load an icon with a name that cannot be found.\n * \\@docs-private\n * @param {?} iconName\n * @return {?}\n */\nexport function getMatIconNameNotFoundError(iconName) {\n return Error(\"Unable to find icon with the name \\\"\" + iconName + \"\\\"\");\n}\n/**\n * Returns an exception to be thrown when the consumer attempts to use\n * `` without including \\@angular/http.\n * \\@docs-private\n * @return {?}\n */\nexport function getMatIconNoHttpProviderError() {\n return Error('Could not find Http provider for use with Angular Material icons. ' +\n 'Please include the HttpModule from @angular/http in your app imports.');\n}\n/**\n * Returns an exception to be thrown when a URL couldn't be sanitized.\n * \\@docs-private\n * @param {?} url URL that was attempted to be sanitized.\n * @return {?}\n */\nexport function getMatIconFailedToSanitizeError(url) {\n return Error(\"The URL provided to MatIconRegistry was not trusted as a resource URL \" +\n (\"via Angular's DomSanitizer. Attempted URL was \\\"\" + url + \"\\\".\"));\n}\n/**\n * Configuration for an icon, including the URL and possibly the cached SVG element.\n * \\@docs-private\n */\nvar SvgIconConfig = (function () {\n /**\n * @param {?} url\n */\n function SvgIconConfig(url) {\n this.url = url;\n this.svgElement = null;\n }\n return SvgIconConfig;\n}());\nfunction SvgIconConfig_tsickle_Closure_declarations() {\n /** @type {?} */\n SvgIconConfig.prototype.svgElement;\n /** @type {?} */\n SvgIconConfig.prototype.url;\n}\n/**\n * Service to register and display icons used by the component.\n * - Registers icon URLs by namespace and name.\n * - Registers icon set URLs by namespace.\n * - Registers aliases for CSS classes, for use with icon fonts.\n * - Loads icons from URLs and extracts individual icons from icon sets.\n */\nvar MatIconRegistry = (function () {\n /**\n * @param {?} _http\n * @param {?} _sanitizer\n */\n function MatIconRegistry(_http, _sanitizer) {\n this._http = _http;\n this._sanitizer = _sanitizer;\n /**\n * URLs and cached SVG elements for individual icons. Keys are of the format \"[namespace]:[icon]\".\n */\n this._svgIconConfigs = new Map();\n /**\n * SvgIconConfig objects and cached SVG elements for icon sets, keyed by namespace.\n * Multiple icon sets can be registered under the same namespace.\n */\n this._iconSetConfigs = new Map();\n /**\n * Cache for icons loaded by direct URLs.\n */\n this._cachedIconsByUrl = new Map();\n /**\n * In-progress icon fetches. Used to coalesce multiple requests to the same URL.\n */\n this._inProgressUrlFetches = new Map();\n /**\n * Map from font identifiers to their CSS class names. Used for icon fonts.\n */\n this._fontCssClassesByAlias = new Map();\n /**\n * The CSS class to apply when an component has no icon name, url, or font specified.\n * The default 'material-icons' value assumes that the material icon font has been loaded as\n * described at http://google.github.io/material-design-icons/#icon-font-for-the-web\n */\n this._defaultFontSetClass = 'material-icons';\n }\n /**\n * Registers an icon by URL in the default namespace.\n * @param {?} iconName Name under which the icon should be registered.\n * @param {?} url\n * @return {?}\n */\n MatIconRegistry.prototype.addSvgIcon = function (iconName, url) {\n return this.addSvgIconInNamespace('', iconName, url);\n };\n /**\n * Registers an icon by URL in the specified namespace.\n * @param {?} namespace Namespace in which the icon should be registered.\n * @param {?} iconName Name under which the icon should be registered.\n * @param {?} url\n * @return {?}\n */\n MatIconRegistry.prototype.addSvgIconInNamespace = function (namespace, iconName, url) {\n var /** @type {?} */ key = iconKey(namespace, iconName);\n this._svgIconConfigs.set(key, new SvgIconConfig(url));\n return this;\n };\n /**\n * Registers an icon set by URL in the default namespace.\n * @param {?} url\n * @return {?}\n */\n MatIconRegistry.prototype.addSvgIconSet = function (url) {\n return this.addSvgIconSetInNamespace('', url);\n };\n /**\n * Registers an icon set by URL in the specified namespace.\n * @param {?} namespace Namespace in which to register the icon set.\n * @param {?} url\n * @return {?}\n */\n MatIconRegistry.prototype.addSvgIconSetInNamespace = function (namespace, url) {\n var /** @type {?} */ config = new SvgIconConfig(url);\n var /** @type {?} */ configNamespace = this._iconSetConfigs.get(namespace);\n if (configNamespace) {\n configNamespace.push(config);\n }\n else {\n this._iconSetConfigs.set(namespace, [config]);\n }\n return this;\n };\n /**\n * Defines an alias for a CSS class name to be used for icon fonts. Creating an matIcon\n * component with the alias as the fontSet input will cause the class name to be applied\n * to the element.\n *\n * @param {?} alias Alias for the font.\n * @param {?=} className Class name override to be used instead of the alias.\n * @return {?}\n */\n MatIconRegistry.prototype.registerFontClassAlias = function (alias, className) {\n if (className === void 0) { className = alias; }\n this._fontCssClassesByAlias.set(alias, className);\n return this;\n };\n /**\n * Returns the CSS class name associated with the alias by a previous call to\n * registerFontClassAlias. If no CSS class has been associated, returns the alias unmodified.\n * @param {?} alias\n * @return {?}\n */\n MatIconRegistry.prototype.classNameForFontAlias = function (alias) {\n return this._fontCssClassesByAlias.get(alias) || alias;\n };\n /**\n * Sets the CSS class name to be used for icon fonts when an component does not\n * have a fontSet input value, and is not loading an icon by name or URL.\n *\n * @param {?} className\n * @return {?}\n */\n MatIconRegistry.prototype.setDefaultFontSetClass = function (className) {\n this._defaultFontSetClass = className;\n return this;\n };\n /**\n * Returns the CSS class name to be used for icon fonts when an component does not\n * have a fontSet input value, and is not loading an icon by name or URL.\n * @return {?}\n */\n MatIconRegistry.prototype.getDefaultFontSetClass = function () {\n return this._defaultFontSetClass;\n };\n /**\n * Returns an Observable that produces the icon (as an DOM element) from the given URL.\n * The response from the URL may be cached so this will not always cause an HTTP request, but\n * the produced element will always be a new copy of the originally fetched icon. (That is,\n * it will not contain any modifications made to elements previously returned).\n *\n * @param {?} safeUrl URL from which to fetch the SVG icon.\n * @return {?}\n */\n MatIconRegistry.prototype.getSvgIconFromUrl = function (safeUrl) {\n var _this = this;\n var /** @type {?} */ url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n if (!url) {\n throw getMatIconFailedToSanitizeError(safeUrl);\n }\n var /** @type {?} */ cachedIcon = this._cachedIconsByUrl.get(url);\n if (cachedIcon) {\n return observableOf(cloneSvg(cachedIcon));\n }\n return RxChain.from(this._loadSvgIconFromConfig(new SvgIconConfig(url)))\n .call(doOperator, function (svg) { return _this._cachedIconsByUrl.set(/** @type {?} */ ((url)), svg); })\n .call(map, function (svg) { return cloneSvg(svg); })\n .result();\n };\n /**\n * Returns an Observable that produces the icon (as an DOM element) with the given name\n * and namespace. The icon must have been previously registered with addIcon or addIconSet;\n * if not, the Observable will throw an error.\n *\n * @param {?} name Name of the icon to be retrieved.\n * @param {?=} namespace Namespace in which to look for the icon.\n * @return {?}\n */\n MatIconRegistry.prototype.getNamedSvgIcon = function (name, namespace) {\n if (namespace === void 0) { namespace = ''; }\n // Return (copy of) cached icon if possible.\n var /** @type {?} */ key = iconKey(namespace, name);\n var /** @type {?} */ config = this._svgIconConfigs.get(key);\n if (config) {\n return this._getSvgFromConfig(config);\n }\n // See if we have any icon sets registered for the namespace.\n var /** @type {?} */ iconSetConfigs = this._iconSetConfigs.get(namespace);\n if (iconSetConfigs) {\n return this._getSvgFromIconSetConfigs(name, iconSetConfigs);\n }\n return observableThrow(getMatIconNameNotFoundError(key));\n };\n /**\n * Returns the cached icon for a SvgIconConfig if available, or fetches it from its URL if not.\n * @param {?} config\n * @return {?}\n */\n MatIconRegistry.prototype._getSvgFromConfig = function (config) {\n if (config.svgElement) {\n // We already have the SVG element for this icon, return a copy.\n return observableOf(cloneSvg(config.svgElement));\n }\n else {\n // Fetch the icon from the config's URL, cache it, and return a copy.\n return RxChain.from(this._loadSvgIconFromConfig(config))\n .call(doOperator, function (svg) { return config.svgElement = svg; })\n .call(map, function (svg) { return cloneSvg(svg); })\n .result();\n }\n };\n /**\n * Attempts to find an icon with the specified name in any of the SVG icon sets.\n * First searches the available cached icons for a nested element with a matching name, and\n * if found copies the element to a new element. If not found, fetches all icon sets\n * that have not been cached, and searches again after all fetches are completed.\n * The returned Observable produces the SVG element if possible, and throws\n * an error if no icon with the specified name can be found.\n * @param {?} name\n * @param {?} iconSetConfigs\n * @return {?}\n */\n MatIconRegistry.prototype._getSvgFromIconSetConfigs = function (name, iconSetConfigs) {\n var _this = this;\n // For all the icon set SVG elements we've fetched, see if any contain an icon with the\n // requested name.\n var /** @type {?} */ namedIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);\n if (namedIcon) {\n // We could cache namedIcon in _svgIconConfigs, but since we have to make a copy every\n // time anyway, there's probably not much advantage compared to just always extracting\n // it from the icon set.\n return observableOf(namedIcon);\n }\n // Not found in any cached icon sets. If there are icon sets with URLs that we haven't\n // fetched, fetch them now and look for iconName in the results.\n var /** @type {?} */ iconSetFetchRequests = iconSetConfigs\n .filter(function (iconSetConfig) { return !iconSetConfig.svgElement; })\n .map(function (iconSetConfig) {\n return RxChain.from(_this._loadSvgIconSetFromConfig(iconSetConfig))\n .call(catchOperator, function (err) {\n var /** @type {?} */ url = _this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, iconSetConfig.url);\n // Swallow errors fetching individual URLs so the combined Observable won't\n // necessarily fail.\n console.log(\"Loading icon set URL: \" + url + \" failed: \" + err);\n return observableOf(null);\n })\n .call(doOperator, function (svg) {\n // Cache the SVG element.\n if (svg) {\n iconSetConfig.svgElement = svg;\n }\n })\n .result();\n });\n // Fetch all the icon set URLs. When the requests complete, every IconSet should have a\n // cached SVG element (unless the request failed), and we can check again for the icon.\n return map.call(forkJoin.call(Observable, iconSetFetchRequests), function () {\n var /** @type {?} */ foundIcon = _this._extractIconWithNameFromAnySet(name, iconSetConfigs);\n if (!foundIcon) {\n throw getMatIconNameNotFoundError(name);\n }\n return foundIcon;\n });\n };\n /**\n * Searches the cached SVG elements for the given icon sets for a nested icon element whose \"id\"\n * tag matches the specified name. If found, copies the nested element to a new SVG element and\n * returns it. Returns null if no matching element is found.\n * @param {?} iconName\n * @param {?} iconSetConfigs\n * @return {?}\n */\n MatIconRegistry.prototype._extractIconWithNameFromAnySet = function (iconName, iconSetConfigs) {\n // Iterate backwards, so icon sets added later have precedence.\n for (var /** @type {?} */ i = iconSetConfigs.length - 1; i >= 0; i--) {\n var /** @type {?} */ config = iconSetConfigs[i];\n if (config.svgElement) {\n var /** @type {?} */ foundIcon = this._extractSvgIconFromSet(config.svgElement, iconName);\n if (foundIcon) {\n return foundIcon;\n }\n }\n }\n return null;\n };\n /**\n * Loads the content of the icon URL specified in the SvgIconConfig and creates an SVG element\n * from it.\n * @param {?} config\n * @return {?}\n */\n MatIconRegistry.prototype._loadSvgIconFromConfig = function (config) {\n var _this = this;\n return map.call(this._fetchUrl(config.url), function (svgText) { return _this._createSvgElementForSingleIcon(svgText); });\n };\n /**\n * Loads the content of the icon set URL specified in the SvgIconConfig and creates an SVG element\n * from it.\n * @param {?} config\n * @return {?}\n */\n MatIconRegistry.prototype._loadSvgIconSetFromConfig = function (config) {\n var _this = this;\n // TODO: Document that icons should only be loaded from trusted sources.\n return map.call(this._fetchUrl(config.url), function (svgText) { return _this._svgElementFromString(svgText); });\n };\n /**\n * Creates a DOM element from the given SVG string, and adds default attributes.\n * @param {?} responseText\n * @return {?}\n */\n MatIconRegistry.prototype._createSvgElementForSingleIcon = function (responseText) {\n var /** @type {?} */ svg = this._svgElementFromString(responseText);\n this._setSvgAttributes(svg);\n return svg;\n };\n /**\n * Searches the cached element of the given SvgIconConfig for a nested icon element whose \"id\"\n * tag matches the specified name. If found, copies the nested element to a new SVG element and\n * returns it. Returns null if no matching element is found.\n * @param {?} iconSet\n * @param {?} iconName\n * @return {?}\n */\n MatIconRegistry.prototype._extractSvgIconFromSet = function (iconSet, iconName) {\n var /** @type {?} */ iconNode = iconSet.querySelector('#' + iconName);\n if (!iconNode) {\n return null;\n }\n // If the icon node is itself an node, clone and return it directly. If not, set it as\n // the content of a new node.\n if (iconNode.tagName.toLowerCase() === 'svg') {\n return this._setSvgAttributes(/** @type {?} */ (iconNode.cloneNode(true)));\n }\n // If the node is a , it won't be rendered so we have to convert it into . Note\n // that the same could be achieved by referring to it via , however the \n // tag is problematic on Firefox, because it needs to include the current page path.\n if (iconNode.nodeName.toLowerCase() === 'symbol') {\n return this._setSvgAttributes(this._toSvgElement(iconNode));\n }\n // createElement('SVG') doesn't work as expected; the DOM ends up with\n // the correct nodes, but the SVG content doesn't render. Instead we\n // have to create an empty SVG node using innerHTML and append its content.\n // Elements created using DOMParser.parseFromString have the same problem.\n // http://stackoverflow.com/questions/23003278/svg-innerhtml-in-firefox-can-not-display\n var /** @type {?} */ svg = this._svgElementFromString('');\n // Clone the node so we don't remove it from the parent icon set element.\n svg.appendChild(iconNode.cloneNode(true));\n return this._setSvgAttributes(svg);\n };\n /**\n * Creates a DOM element from the given SVG string.\n * @param {?} str\n * @return {?}\n */\n MatIconRegistry.prototype._svgElementFromString = function (str) {\n // TODO: Is there a better way than innerHTML? Renderer doesn't appear to have a method for\n // creating an element from an HTML string.\n var /** @type {?} */ div = document.createElement('DIV');\n div.innerHTML = str;\n var /** @type {?} */ svg = (div.querySelector('svg'));\n if (!svg) {\n throw Error(' tag not found');\n }\n return svg;\n };\n /**\n * Converts an element into an SVG node by cloning all of its children.\n * @param {?} element\n * @return {?}\n */\n MatIconRegistry.prototype._toSvgElement = function (element) {\n var /** @type {?} */ svg = this._svgElementFromString('');\n for (var /** @type {?} */ i = 0; i < element.childNodes.length; i++) {\n if (element.childNodes[i].nodeType === Node.ELEMENT_NODE) {\n svg.appendChild(element.childNodes[i].cloneNode(true));\n }\n }\n return svg;\n };\n /**\n * Sets the default attributes for an SVG element to be used as an icon.\n * @param {?} svg\n * @return {?}\n */\n MatIconRegistry.prototype._setSvgAttributes = function (svg) {\n if (!svg.getAttribute('xmlns')) {\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n }\n svg.setAttribute('fit', '');\n svg.setAttribute('height', '100%');\n svg.setAttribute('width', '100%');\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');\n svg.setAttribute('focusable', 'false'); // Disable IE11 default behavior to make SVGs focusable.\n return svg;\n };\n /**\n * Returns an Observable which produces the string contents of the given URL. Results may be\n * cached, so future calls with the same URL may not cause another HTTP request.\n * @param {?} safeUrl\n * @return {?}\n */\n MatIconRegistry.prototype._fetchUrl = function (safeUrl) {\n var _this = this;\n if (!this._http) {\n throw getMatIconNoHttpProviderError();\n }\n var /** @type {?} */ url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n if (!url) {\n throw getMatIconFailedToSanitizeError(safeUrl);\n }\n // Store in-progress fetches to avoid sending a duplicate request for a URL when there is\n // already a request in progress for that URL. It's necessary to call share() on the\n // Observable returned by http.get() so that multiple subscribers don't cause multiple XHRs.\n var /** @type {?} */ inProgressFetch = this._inProgressUrlFetches.get(url);\n if (inProgressFetch) {\n return inProgressFetch;\n }\n // TODO(jelbourn): for some reason, the `finally` operator \"loses\" the generic type on the\n // Observable. Figure out why and fix it.\n var /** @type {?} */ req = RxChain.from(this._http.get(url))\n .call(map, function (response) { return response.text(); })\n .call(finallyOperator, function () { return _this._inProgressUrlFetches.delete(url); })\n .call(share)\n .result();\n this._inProgressUrlFetches.set(url, req);\n return req;\n };\n MatIconRegistry.decorators = [\n { type: Injectable },\n ];\n /**\n * @nocollapse\n */\n MatIconRegistry.ctorParameters = function () { return [\n { type: Http, decorators: [{ type: Optional },] },\n { type: DomSanitizer, },\n ]; };\n return MatIconRegistry;\n}());\nexport { MatIconRegistry };\nfunction MatIconRegistry_tsickle_Closure_declarations() {\n /** @type {?} */\n MatIconRegistry.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatIconRegistry.ctorParameters;\n /**\n * URLs and cached SVG elements for individual icons. Keys are of the format \"[namespace]:[icon]\".\n * @type {?}\n */\n MatIconRegistry.prototype._svgIconConfigs;\n /**\n * SvgIconConfig objects and cached SVG elements for icon sets, keyed by namespace.\n * Multiple icon sets can be registered under the same namespace.\n * @type {?}\n */\n MatIconRegistry.prototype._iconSetConfigs;\n /**\n * Cache for icons loaded by direct URLs.\n * @type {?}\n */\n MatIconRegistry.prototype._cachedIconsByUrl;\n /**\n * In-progress icon fetches. Used to coalesce multiple requests to the same URL.\n * @type {?}\n */\n MatIconRegistry.prototype._inProgressUrlFetches;\n /**\n * Map from font identifiers to their CSS class names. Used for icon fonts.\n * @type {?}\n */\n MatIconRegistry.prototype._fontCssClassesByAlias;\n /**\n * The CSS class to apply when an component has no icon name, url, or font specified.\n * The default 'material-icons' value assumes that the material icon font has been loaded as\n * described at http://google.github.io/material-design-icons/#icon-font-for-the-web\n * @type {?}\n */\n MatIconRegistry.prototype._defaultFontSetClass;\n /** @type {?} */\n MatIconRegistry.prototype._http;\n /** @type {?} */\n MatIconRegistry.prototype._sanitizer;\n}\n/**\n * \\@docs-private\n * @param {?} parentRegistry\n * @param {?} http\n * @param {?} sanitizer\n * @return {?}\n */\nexport function ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, http, sanitizer) {\n return parentRegistry || new MatIconRegistry(http, sanitizer);\n}\n/**\n * \\@docs-private\n */\nexport var ICON_REGISTRY_PROVIDER = {\n // If there is already an MatIconRegistry available, use that. Otherwise, provide a new one.\n provide: MatIconRegistry,\n deps: [[new Optional(), new SkipSelf(), MatIconRegistry], [new Optional(), Http], DomSanitizer],\n useFactory: ICON_REGISTRY_PROVIDER_FACTORY\n};\n/**\n * Clones an SVGElement while preserving type information.\n * @param {?} svg\n * @return {?}\n */\nfunction cloneSvg(svg) {\n return (svg.cloneNode(true));\n}\n/**\n * Returns the cache key to use for an icon namespace and name.\n * @param {?} namespace\n * @param {?} name\n * @return {?}\n */\nfunction iconKey(namespace, name) {\n return namespace + ':' + name;\n}\n//# sourceMappingURL=icon-registry.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as tslib_1 from \"tslib\";\nimport { first } from '@angular/cdk/rxjs';\nimport { Attribute, ChangeDetectionStrategy, Component, ElementRef, Input, Renderer2, ViewEncapsulation, } from '@angular/core';\nimport { mixinColor } from '@angular/material/core';\nimport { MatIconRegistry } from './icon-registry';\n/**\n * \\@docs-private\n */\nvar MatIconBase = (function () {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n function MatIconBase(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n }\n return MatIconBase;\n}());\nexport { MatIconBase };\nfunction MatIconBase_tsickle_Closure_declarations() {\n /** @type {?} */\n MatIconBase.prototype._renderer;\n /** @type {?} */\n MatIconBase.prototype._elementRef;\n}\nexport var /** @type {?} */ _MatIconMixinBase = mixinColor(MatIconBase);\n/**\n * Component to display an icon. It can be used in the following ways:\n *\n * - Specify the svgIcon input to load an SVG icon from a URL previously registered with the\n * addSvgIcon, addSvgIconInNamespace, addSvgIconSet, or addSvgIconSetInNamespace methods of\n * MatIconRegistry. If the svgIcon value contains a colon it is assumed to be in the format\n * \"[namespace]:[name]\", if not the value will be the name of an icon in the default namespace.\n * Examples:\n * \n * \n *\n * - Use a font ligature as an icon by putting the ligature text in the content of the \n * component. By default the Material icons font is used as described at\n * http://google.github.io/material-design-icons/#icon-font-for-the-web. You can specify an\n * alternate font by setting the fontSet input to either the CSS class to apply to use the\n * desired font, or to an alias previously registered with MatIconRegistry.registerFontClassAlias.\n * Examples:\n * home\n * sun\n *\n * - Specify a font glyph to be included via CSS rules by setting the fontSet input to specify the\n * font, and the fontIcon input to specify the icon. Typically the fontIcon will specify a\n * CSS class which causes the glyph to be displayed via a :before selector, as in\n * https://fortawesome.github.io/Font-Awesome/examples/\n * Example:\n * \n */\nvar MatIcon = (function (_super) {\n tslib_1.__extends(MatIcon, _super);\n /**\n * @param {?} renderer\n * @param {?} elementRef\n * @param {?} _iconRegistry\n * @param {?} ariaHidden\n */\n function MatIcon(renderer, elementRef, _iconRegistry, ariaHidden) {\n var _this = _super.call(this, renderer, elementRef) || this;\n _this._iconRegistry = _iconRegistry;\n // If the user has not explicitly set aria-hidden, mark the icon as hidden, as this is\n // the right thing to do for the majority of icon use-cases.\n if (!ariaHidden) {\n renderer.setAttribute(elementRef.nativeElement, 'aria-hidden', 'true');\n }\n return _this;\n }\n /**\n * Splits an svgIcon binding value into its icon set and icon name components.\n * Returns a 2-element array of [(icon set), (icon name)].\n * The separator for the two fields is ':'. If there is no separator, an empty\n * string is returned for the icon set and the entire value is returned for\n * the icon name. If the argument is falsy, returns an array of two empty strings.\n * Throws an error if the name contains two or more ':' separators.\n * Examples:\n * 'social:cake' -> ['social', 'cake']\n * 'penguin' -> ['', 'penguin']\n * null -> ['', '']\n * 'a:b:c' -> (throws Error)\n * @param {?} iconName\n * @return {?}\n */\n MatIcon.prototype._splitIconName = function (iconName) {\n if (!iconName) {\n return ['', ''];\n }\n var /** @type {?} */ parts = iconName.split(':');\n switch (parts.length) {\n case 1: return ['', parts[0]]; // Use default namespace.\n case 2: return (parts);\n default: throw Error(\"Invalid icon name: \\\"\" + iconName + \"\\\"\");\n }\n };\n /**\n * @param {?} changes\n * @return {?}\n */\n MatIcon.prototype.ngOnChanges = function (changes) {\n var _this = this;\n // Only update the inline SVG icon if the inputs changed, to avoid unnecessary DOM operations.\n if (changes.svgIcon) {\n if (this.svgIcon) {\n var _a = this._splitIconName(this.svgIcon), namespace = _a[0], iconName = _a[1];\n first.call(this._iconRegistry.getNamedSvgIcon(iconName, namespace)).subscribe(function (svg) { return _this._setSvgElement(svg); }, function (err) { return console.log(\"Error retrieving icon: \" + err.message); });\n }\n else {\n this._clearSvgElement();\n }\n }\n if (this._usingFontIcon()) {\n this._updateFontIconClasses();\n }\n };\n /**\n * @return {?}\n */\n MatIcon.prototype.ngOnInit = function () {\n // Update font classes because ngOnChanges won't be called if none of the inputs are present,\n // e.g. arrow In this case we need to add a CSS class for the default font.\n if (this._usingFontIcon()) {\n this._updateFontIconClasses();\n }\n };\n /**\n * @return {?}\n */\n MatIcon.prototype._usingFontIcon = function () {\n return !this.svgIcon;\n };\n /**\n * @param {?} svg\n * @return {?}\n */\n MatIcon.prototype._setSvgElement = function (svg) {\n this._clearSvgElement();\n this._renderer.appendChild(this._elementRef.nativeElement, svg);\n };\n /**\n * @return {?}\n */\n MatIcon.prototype._clearSvgElement = function () {\n var /** @type {?} */ layoutElement = this._elementRef.nativeElement;\n var /** @type {?} */ childCount = layoutElement.childNodes.length;\n // Remove existing child nodes and add the new SVG element. Note that we can't\n // use innerHTML, because IE will throw if the element has a data binding.\n for (var /** @type {?} */ i = 0; i < childCount; i++) {\n this._renderer.removeChild(layoutElement, layoutElement.childNodes[i]);\n }\n };\n /**\n * @return {?}\n */\n MatIcon.prototype._updateFontIconClasses = function () {\n if (!this._usingFontIcon()) {\n return;\n }\n var /** @type {?} */ elem = this._elementRef.nativeElement;\n var /** @type {?} */ fontSetClass = this.fontSet ?\n this._iconRegistry.classNameForFontAlias(this.fontSet) :\n this._iconRegistry.getDefaultFontSetClass();\n if (fontSetClass != this._previousFontSetClass) {\n if (this._previousFontSetClass) {\n this._renderer.removeClass(elem, this._previousFontSetClass);\n }\n if (fontSetClass) {\n this._renderer.addClass(elem, fontSetClass);\n }\n this._previousFontSetClass = fontSetClass;\n }\n if (this.fontIcon != this._previousFontIconClass) {\n if (this._previousFontIconClass) {\n this._renderer.removeClass(elem, this._previousFontIconClass);\n }\n if (this.fontIcon) {\n this._renderer.addClass(elem, this.fontIcon);\n }\n this._previousFontIconClass = this.fontIcon;\n }\n };\n MatIcon.decorators = [\n { type: Component, args: [{template: '',\n selector: 'mat-icon',\n exportAs: 'matIcon',\n styles: [\".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}\"],\n inputs: ['color'],\n host: {\n 'role': 'img',\n 'class': 'mat-icon',\n },\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n },] },\n ];\n /**\n * @nocollapse\n */\n MatIcon.ctorParameters = function () { return [\n { type: Renderer2, },\n { type: ElementRef, },\n { type: MatIconRegistry, },\n { type: undefined, decorators: [{ type: Attribute, args: ['aria-hidden',] },] },\n ]; };\n MatIcon.propDecorators = {\n 'svgIcon': [{ type: Input },],\n 'fontSet': [{ type: Input },],\n 'fontIcon': [{ type: Input },],\n };\n return MatIcon;\n}(_MatIconMixinBase));\nexport { MatIcon };\nfunction MatIcon_tsickle_Closure_declarations() {\n /** @type {?} */\n MatIcon.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatIcon.ctorParameters;\n /** @type {?} */\n MatIcon.propDecorators;\n /**\n * Name of the icon in the SVG icon set.\n * @type {?}\n */\n MatIcon.prototype.svgIcon;\n /**\n * Font set that the icon is a part of.\n * @type {?}\n */\n MatIcon.prototype.fontSet;\n /**\n * Name of an icon within a font set.\n * @type {?}\n */\n MatIcon.prototype.fontIcon;\n /** @type {?} */\n MatIcon.prototype._previousFontSetClass;\n /** @type {?} */\n MatIcon.prototype._previousFontIconClass;\n /** @type {?} */\n MatIcon.prototype._iconRegistry;\n}\n//# sourceMappingURL=icon.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport { MatIcon } from './icon';\nimport { ICON_REGISTRY_PROVIDER } from './icon-registry';\nvar MatIconModule = (function () {\n function MatIconModule() {\n }\n MatIconModule.decorators = [\n { type: NgModule, args: [{\n imports: [MatCommonModule],\n exports: [MatIcon, MatCommonModule],\n declarations: [MatIcon],\n providers: [ICON_REGISTRY_PROVIDER],\n },] },\n ];\n /**\n * @nocollapse\n */\n MatIconModule.ctorParameters = function () { return []; };\n return MatIconModule;\n}());\nexport { MatIconModule };\nfunction MatIconModule_tsickle_Closure_declarations() {\n /** @type {?} */\n MatIconModule.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatIconModule.ctorParameters;\n}\n//# sourceMappingURL=icon-module.js.map","/**\n * Generated bundle index. Do not edit.\n */\nexport { MatIconModule, MatIconBase, _MatIconMixinBase, MatIcon, getMatIconNameNotFoundError, getMatIconNoHttpProviderError, getMatIconFailedToSanitizeError, MatIconRegistry, ICON_REGISTRY_PROVIDER_FACTORY, ICON_REGISTRY_PROVIDER } from './public-api';\n//# sourceMappingURL=index.js.map"],"names":["observableOf","observableThrow","tslib_1.__extends"],"mappings":"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"}