blob: 41915912102e1997f06931042e94193a10abfda4 [file] [log] [blame]
{"version":3,"file":"material-icon.umd.min.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/material/icon/icon-registry.ts","../../src/material/icon/icon.ts","../../src/material/icon/icon-module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/**\n * @license\n * Copyright Google LLC 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 */\n\nimport {DOCUMENT} from '@angular/common';\nimport {HttpClient, HttpErrorResponse} from '@angular/common/http';\nimport {\n Inject,\n Injectable,\n InjectionToken,\n Optional,\n SecurityContext,\n SkipSelf,\n OnDestroy,\n} from '@angular/core';\nimport {DomSanitizer, SafeResourceUrl, SafeHtml} from '@angular/platform-browser';\nimport {forkJoin, Observable, of as observableOf, throwError as observableThrow} from 'rxjs';\nimport {catchError, finalize, map, share, tap} from 'rxjs/operators';\n\n\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 */\nexport function getMatIconNameNotFoundError(iconName: string): Error {\n return Error(`Unable to find icon with the name \"${iconName}\"`);\n}\n\n\n/**\n * Returns an exception to be thrown when the consumer attempts to use\n * `<mat-icon>` without including @angular/common/http.\n * @docs-private\n */\nexport function getMatIconNoHttpProviderError(): Error {\n return Error('Could not find HttpClient provider for use with Angular Material icons. ' +\n 'Please include the HttpClientModule from @angular/common/http in your ' +\n 'app imports.');\n}\n\n\n/**\n * Returns an exception to be thrown when a URL couldn't be sanitized.\n * @param url URL that was attempted to be sanitized.\n * @docs-private\n */\nexport function getMatIconFailedToSanitizeUrlError(url: SafeResourceUrl): Error {\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/**\n * Returns an exception to be thrown when a HTML string couldn't be sanitized.\n * @param literal HTML that was attempted to be sanitized.\n * @docs-private\n */\nexport function getMatIconFailedToSanitizeLiteralError(literal: SafeHtml): Error {\n return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by ` +\n `Angular's DomSanitizer. Attempted literal was \"${literal}\".`);\n}\n\n\n/**\n * Configuration for an icon, including the URL and possibly the cached SVG element.\n * @docs-private\n */\nclass SvgIconConfig {\n url: SafeResourceUrl | null;\n svgElement: SVGElement | null;\n\n constructor(url: SafeResourceUrl);\n constructor(svgElement: SVGElement);\n constructor(data: SafeResourceUrl | SVGElement) {\n // Note that we can't use `instanceof SVGElement` here,\n // because it'll break during server-side rendering.\n if (!!(data as any).nodeName) {\n this.svgElement = data as SVGElement;\n } else {\n this.url = data as SafeResourceUrl;\n }\n }\n}\n\n/**\n * Service to register and display icons used by the `<mat-icon>` 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 */\n@Injectable({providedIn: 'root'})\nexport class MatIconRegistry implements OnDestroy {\n private _document: Document;\n\n /**\n * URLs and cached SVG elements for individual icons. Keys are of the format \"[namespace]:[icon]\".\n */\n private _svgIconConfigs = new Map<string, SvgIconConfig>();\n\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 private _iconSetConfigs = new Map<string, SvgIconConfig[]>();\n\n /** Cache for icons loaded by direct URLs. */\n private _cachedIconsByUrl = new Map<string, SVGElement>();\n\n /** In-progress icon fetches. Used to coalesce multiple requests to the same URL. */\n private _inProgressUrlFetches = new Map<string, Observable<string>>();\n\n /** Map from font identifiers to their CSS class names. Used for icon fonts. */\n private _fontCssClassesByAlias = new Map<string, string>();\n\n /**\n * The CSS class to apply when an `<mat-icon>` 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 private _defaultFontSetClass = 'material-icons';\n\n constructor(\n @Optional() private _httpClient: HttpClient,\n private _sanitizer: DomSanitizer,\n @Optional() @Inject(DOCUMENT) document: any) {\n this._document = document;\n }\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 */\n addSvgIcon(iconName: string, url: SafeResourceUrl): this {\n return this.addSvgIconInNamespace('', iconName, url);\n }\n\n /**\n * Registers an icon using an HTML string in the default namespace.\n * @param iconName Name under which the icon should be registered.\n * @param literal SVG source of the icon.\n */\n addSvgIconLiteral(iconName: string, literal: SafeHtml): this {\n return this.addSvgIconLiteralInNamespace('', iconName, literal);\n }\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 */\n addSvgIconInNamespace(namespace: string, iconName: string, url: SafeResourceUrl): this {\n return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig(url));\n }\n\n /**\n * Registers an icon using an HTML string 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 literal SVG source of the icon.\n */\n addSvgIconLiteralInNamespace(namespace: string, iconName: string, literal: SafeHtml): this {\n const sanitizedLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);\n\n if (!sanitizedLiteral) {\n throw getMatIconFailedToSanitizeLiteralError(literal);\n }\n\n const svgElement = this._createSvgElementForSingleIcon(sanitizedLiteral);\n return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig(svgElement));\n }\n\n /**\n * Registers an icon set by URL in the default namespace.\n * @param url\n */\n addSvgIconSet(url: SafeResourceUrl): this {\n return this.addSvgIconSetInNamespace('', url);\n }\n\n /**\n * Registers an icon set using an HTML string in the default namespace.\n * @param literal SVG source of the icon set.\n */\n addSvgIconSetLiteral(literal: SafeHtml): this {\n return this.addSvgIconSetLiteralInNamespace('', literal);\n }\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 */\n addSvgIconSetInNamespace(namespace: string, url: SafeResourceUrl): this {\n return this._addSvgIconSetConfig(namespace, new SvgIconConfig(url));\n }\n\n /**\n * Registers an icon set using an HTML string in the specified namespace.\n * @param namespace Namespace in which to register the icon set.\n * @param literal SVG source of the icon set.\n */\n addSvgIconSetLiteralInNamespace(namespace: string, literal: SafeHtml): this {\n const sanitizedLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);\n\n if (!sanitizedLiteral) {\n throw getMatIconFailedToSanitizeLiteralError(literal);\n }\n\n const svgElement = this._svgElementFromString(sanitizedLiteral);\n return this._addSvgIconSetConfig(namespace, new SvgIconConfig(svgElement));\n }\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 `<mat-icon>` element.\n *\n * @param alias Alias for the font.\n * @param className Class name override to be used instead of the alias.\n */\n registerFontClassAlias(alias: string, className: string = alias): this {\n this._fontCssClassesByAlias.set(alias, className);\n return this;\n }\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 */\n classNameForFontAlias(alias: string): string {\n return this._fontCssClassesByAlias.get(alias) || alias;\n }\n\n /**\n * Sets the CSS class name to be used for icon fonts when an `<mat-icon>` component does not\n * have a fontSet input value, and is not loading an icon by name or URL.\n *\n * @param className\n */\n setDefaultFontSetClass(className: string): this {\n this._defaultFontSetClass = className;\n return this;\n }\n\n /**\n * Returns the CSS class name to be used for icon fonts when an `<mat-icon>` component does not\n * have a fontSet input value, and is not loading an icon by name or URL.\n */\n getDefaultFontSetClass(): string {\n return this._defaultFontSetClass;\n }\n\n /**\n * Returns an Observable that produces the icon (as an `<svg>` 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 */\n getSvgIconFromUrl(safeUrl: SafeResourceUrl): Observable<SVGElement> {\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n\n if (!url) {\n throw getMatIconFailedToSanitizeUrlError(safeUrl);\n }\n\n const cachedIcon = this._cachedIconsByUrl.get(url);\n\n if (cachedIcon) {\n return observableOf(cloneSvg(cachedIcon));\n }\n\n return this._loadSvgIconFromConfig(new SvgIconConfig(safeUrl)).pipe(\n tap(svg => this._cachedIconsByUrl.set(url!, svg)),\n map(svg => cloneSvg(svg)),\n );\n }\n\n /**\n * Returns an Observable that produces the icon (as an `<svg>` 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 */\n getNamedSvgIcon(name: string, namespace: string = ''): Observable<SVGElement> {\n // Return (copy of) cached icon if possible.\n const key = iconKey(namespace, name);\n const config = this._svgIconConfigs.get(key);\n\n if (config) {\n return this._getSvgFromConfig(config);\n }\n\n // See if we have any icon sets registered for the namespace.\n const iconSetConfigs = this._iconSetConfigs.get(namespace);\n\n if (iconSetConfigs) {\n return this._getSvgFromIconSetConfigs(name, iconSetConfigs);\n }\n\n return observableThrow(getMatIconNameNotFoundError(key));\n }\n\n ngOnDestroy() {\n this._svgIconConfigs.clear();\n this._iconSetConfigs.clear();\n this._cachedIconsByUrl.clear();\n }\n\n /**\n * Returns the cached icon for a SvgIconConfig if available, or fetches it from its URL if not.\n */\n private _getSvgFromConfig(config: SvgIconConfig): Observable<SVGElement> {\n if (config.svgElement) {\n // We already have the SVG element for this icon, return a copy.\n return observableOf(cloneSvg(config.svgElement));\n } else {\n // Fetch the icon from the config's URL, cache it, and return a copy.\n return this._loadSvgIconFromConfig(config).pipe(\n tap(svg => config.svgElement = svg),\n map(svg => cloneSvg(svg)),\n );\n }\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 `<svg>` 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 */\n private _getSvgFromIconSetConfigs(name: string, iconSetConfigs: SvgIconConfig[]):\n Observable<SVGElement> {\n // For all the icon set SVG elements we've fetched, see if any contain an icon with the\n // requested name.\n const namedIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);\n\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\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 const iconSetFetchRequests: Observable<SVGElement | null>[] = iconSetConfigs\n .filter(iconSetConfig => !iconSetConfig.svgElement)\n .map(iconSetConfig => {\n return this._loadSvgIconSetFromConfig(iconSetConfig).pipe(\n catchError((err: HttpErrorResponse): Observable<SVGElement | null> => {\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, iconSetConfig.url);\n\n // Swallow errors fetching individual URLs so the\n // combined Observable won't necessarily fail.\n console.error(`Loading icon set URL: ${url} failed: ${err.message}`);\n return observableOf(null);\n })\n );\n });\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 forkJoin(iconSetFetchRequests).pipe(map(() => {\n const foundIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);\n\n if (!foundIcon) {\n throw getMatIconNameNotFoundError(name);\n }\n\n return foundIcon;\n }));\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 */\n private _extractIconWithNameFromAnySet(iconName: string, iconSetConfigs: SvgIconConfig[]):\n SVGElement | null {\n // Iterate backwards, so icon sets added later have precedence.\n for (let i = iconSetConfigs.length - 1; i >= 0; i--) {\n const config = iconSetConfigs[i];\n if (config.svgElement) {\n const foundIcon = this._extractSvgIconFromSet(config.svgElement, iconName);\n if (foundIcon) {\n return foundIcon;\n }\n }\n }\n return null;\n }\n\n /**\n * Loads the content of the icon URL specified in the SvgIconConfig and creates an SVG element\n * from it.\n */\n private _loadSvgIconFromConfig(config: SvgIconConfig): Observable<SVGElement> {\n return this._fetchUrl(config.url)\n .pipe(map(svgText => this._createSvgElementForSingleIcon(svgText)));\n }\n\n /**\n * Loads the content of the icon set URL specified in the SvgIconConfig and creates an SVG element\n * from it.\n */\n private _loadSvgIconSetFromConfig(config: SvgIconConfig): Observable<SVGElement> {\n // If the SVG for this icon set has already been parsed, do nothing.\n if (config.svgElement) {\n return observableOf(config.svgElement);\n }\n\n return this._fetchUrl(config.url).pipe(map(svgText => {\n // It is possible that the icon set was parsed and cached by an earlier request, so parsing\n // only needs to occur if the cache is yet unset.\n if (!config.svgElement) {\n config.svgElement = this._svgElementFromString(svgText);\n }\n\n return config.svgElement;\n }));\n }\n\n /**\n * Creates a DOM element from the given SVG string, and adds default attributes.\n */\n private _createSvgElementForSingleIcon(responseText: string): SVGElement {\n const svg = this._svgElementFromString(responseText);\n this._setSvgAttributes(svg);\n return svg;\n }\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 */\n private _extractSvgIconFromSet(iconSet: SVGElement, iconName: string): SVGElement | null {\n // Use the `id=\"iconName\"` syntax in order to escape special\n // characters in the ID (versus using the #iconName syntax).\n const iconSource = iconSet.querySelector(`[id=\"${iconName}\"]`);\n\n if (!iconSource) {\n return null;\n }\n\n // Clone the element and remove the ID to prevent multiple elements from being added\n // to the page with the same ID.\n const iconElement = iconSource.cloneNode(true) as Element;\n iconElement.removeAttribute('id');\n\n // If the icon node is itself an <svg> node, clone and return it directly. If not, set it as\n // the content of a new <svg> node.\n if (iconElement.nodeName.toLowerCase() === 'svg') {\n return this._setSvgAttributes(iconElement as SVGElement);\n }\n\n // If the node is a <symbol>, it won't be rendered so we have to convert it into <svg>. Note\n // that the same could be achieved by referring to it via <use href=\"#id\">, however the <use>\n // tag is problematic on Firefox, because it needs to include the current page path.\n if (iconElement.nodeName.toLowerCase() === 'symbol') {\n return this._setSvgAttributes(this._toSvgElement(iconElement));\n }\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 const svg = this._svgElementFromString('<svg></svg>');\n // Clone the node so we don't remove it from the parent icon set element.\n svg.appendChild(iconElement);\n\n return this._setSvgAttributes(svg);\n }\n\n /**\n * Creates a DOM element from the given SVG string.\n */\n private _svgElementFromString(str: string): SVGElement {\n const div = this._document.createElement('DIV');\n div.innerHTML = str;\n const svg = div.querySelector('svg') as SVGElement;\n\n if (!svg) {\n throw Error('<svg> tag not found');\n }\n\n return svg;\n }\n\n /**\n * Converts an element into an SVG node by cloning all of its children.\n */\n private _toSvgElement(element: Element): SVGElement {\n let svg = this._svgElementFromString('<svg></svg>');\n\n for (let i = 0; i < element.childNodes.length; i++) {\n if (element.childNodes[i].nodeType === this._document.ELEMENT_NODE) {\n svg.appendChild(element.childNodes[i].cloneNode(true));\n }\n }\n\n return svg;\n }\n\n /**\n * Sets the default attributes for an SVG element to be used as an icon.\n */\n private _setSvgAttributes(svg: SVGElement): SVGElement {\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 /**\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 */\n private _fetchUrl(safeUrl: SafeResourceUrl | null): Observable<string> {\n if (!this._httpClient) {\n throw getMatIconNoHttpProviderError();\n }\n\n if (safeUrl == null) {\n throw Error(`Cannot fetch icon from URL \"${safeUrl}\".`);\n }\n\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n\n if (!url) {\n throw getMatIconFailedToSanitizeUrlError(safeUrl);\n }\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 const inProgressFetch = this._inProgressUrlFetches.get(url);\n\n if (inProgressFetch) {\n return inProgressFetch;\n }\n\n // TODO(jelbourn): for some reason, the `finalize` operator \"loses\" the generic type on the\n // Observable. Figure out why and fix it.\n const req = this._httpClient.get(url, {responseType: 'text'}).pipe(\n finalize(() => this._inProgressUrlFetches.delete(url)),\n share(),\n );\n\n this._inProgressUrlFetches.set(url, req);\n return req;\n }\n\n /**\n * Registers an icon config by name in the specified namespace.\n * @param namespace Namespace in which to register the icon config.\n * @param iconName Name under which to register the config.\n * @param config Config to be registered.\n */\n private _addSvgIconConfig(namespace: string, iconName: string, config: SvgIconConfig): this {\n this._svgIconConfigs.set(iconKey(namespace, iconName), config);\n return this;\n }\n\n /**\n * Registers an icon set config in the specified namespace.\n * @param namespace Namespace in which to register the icon config.\n * @param config Config to be registered.\n */\n private _addSvgIconSetConfig(namespace: string, config: SvgIconConfig): this {\n const configNamespace = this._iconSetConfigs.get(namespace);\n\n if (configNamespace) {\n configNamespace.push(config);\n } else {\n this._iconSetConfigs.set(namespace, [config]);\n }\n\n return this;\n }\n}\n\n/** @docs-private */\nexport function ICON_REGISTRY_PROVIDER_FACTORY(\n parentRegistry: MatIconRegistry,\n httpClient: HttpClient,\n sanitizer: DomSanitizer,\n document?: any) {\n return parentRegistry || new MatIconRegistry(httpClient, sanitizer, document);\n}\n\n/** @docs-private */\nexport const ICON_REGISTRY_PROVIDER = {\n // If there is already an MatIconRegistry available, use that. Otherwise, provide a new one.\n provide: MatIconRegistry,\n deps: [\n [new Optional(), new SkipSelf(), MatIconRegistry],\n [new Optional(), HttpClient],\n DomSanitizer,\n [new Optional(), DOCUMENT as InjectionToken<any>],\n ],\n useFactory: ICON_REGISTRY_PROVIDER_FACTORY,\n};\n\n/** Clones an SVGElement while preserving type information. */\nfunction cloneSvg(svg: SVGElement): SVGElement {\n return svg.cloneNode(true) as SVGElement;\n}\n\n/** Returns the cache key to use for an icon namespace and name. */\nfunction iconKey(namespace: string, name: string) {\n return namespace + ':' + name;\n}\n","/**\n * @license\n * Copyright Google LLC 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 */\n\nimport {take} from 'rxjs/operators';\nimport {\n Attribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewEncapsulation,\n Optional,\n InjectionToken,\n inject,\n Inject,\n OnDestroy,\n AfterViewChecked,\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {CanColor, CanColorCtor, mixinColor} from '@angular/material/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {MatIconRegistry} from './icon-registry';\n\n\n// Boilerplate for applying mixins to MatIcon.\n/** @docs-private */\nclass MatIconBase {\n constructor(public _elementRef: ElementRef) {}\n}\nconst _MatIconMixinBase: CanColorCtor & typeof MatIconBase = mixinColor(MatIconBase);\n\n/**\n * Injection token used to provide the current location to `MatIcon`.\n * Used to handle server-side rendering and to stub out during unit tests.\n * @docs-private\n */\nexport const MAT_ICON_LOCATION = new InjectionToken<MatIconLocation>('mat-icon-location', {\n providedIn: 'root',\n factory: MAT_ICON_LOCATION_FACTORY\n});\n\n/**\n * Stubbed out location for `MatIcon`.\n * @docs-private\n */\nexport interface MatIconLocation {\n getPathname: () => string;\n}\n\n/** @docs-private */\nexport function MAT_ICON_LOCATION_FACTORY(): MatIconLocation {\n const _document = inject(DOCUMENT);\n const _location = _document ? _document.location : null;\n\n return {\n // Note that this needs to be a function, rather than a property, because Angular\n // will only resolve it once, but we want the current path on each call.\n getPathname: () => _location ? (_location.pathname + _location.search) : ''\n };\n}\n\n\n/** SVG attributes that accept a FuncIRI (e.g. `url(<something>)`). */\nconst funcIriAttributes = [\n 'clip-path',\n 'color-profile',\n 'src',\n 'cursor',\n 'fill',\n 'filter',\n 'marker',\n 'marker-start',\n 'marker-mid',\n 'marker-end',\n 'mask',\n 'stroke'\n];\n\n/** Selector that can be used to find all elements that are using a `FuncIRI`. */\nconst funcIriAttributeSelector = funcIriAttributes.map(attr => `[${attr}]`).join(', ');\n\n/** Regex that can be used to extract the id out of a FuncIRI. */\nconst funcIriPattern = /^url\\(['\"]?#(.*?)['\"]?\\)$/;\n\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 * `<mat-icon svgIcon=\"left-arrow\"></mat-icon>\n * <mat-icon svgIcon=\"animals:cat\"></mat-icon>`\n *\n * - Use a font ligature as an icon by putting the ligature text in the content of the `<mat-icon>`\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 * `<mat-icon>home</mat-icon>\n * <mat-icon fontSet=\"myfont\">sun</mat-icon>`\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 * `<mat-icon fontSet=\"fa\" fontIcon=\"alarm\"></mat-icon>`\n */\n@Component({\n moduleId: module.id,\n template: '<ng-content></ng-content>',\n selector: 'mat-icon',\n exportAs: 'matIcon',\n styleUrls: ['icon.css'],\n inputs: ['color'],\n host: {\n 'role': 'img',\n 'class': 'mat-icon notranslate',\n '[class.mat-icon-inline]': 'inline',\n '[class.mat-icon-no-color]': 'color !== \"primary\" && color !== \"accent\" && color !== \"warn\"',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatIcon extends _MatIconMixinBase implements OnChanges, OnInit, AfterViewChecked,\n CanColor, OnDestroy {\n\n /**\n * Whether the icon should be inlined, automatically sizing the icon to match the font size of\n * the element the icon is contained in.\n */\n @Input()\n get inline(): boolean {\n return this._inline;\n }\n set inline(inline: boolean) {\n this._inline = coerceBooleanProperty(inline);\n }\n private _inline: boolean = false;\n\n /** Name of the icon in the SVG icon set. */\n @Input() svgIcon: string;\n\n /** Font set that the icon is a part of. */\n @Input()\n get fontSet(): string { return this._fontSet; }\n set fontSet(value: string) {\n this._fontSet = this._cleanupFontValue(value);\n }\n private _fontSet: string;\n\n /** Name of an icon within a font set. */\n @Input()\n get fontIcon(): string { return this._fontIcon; }\n set fontIcon(value: string) {\n this._fontIcon = this._cleanupFontValue(value);\n }\n private _fontIcon: string;\n\n private _previousFontSetClass: string;\n private _previousFontIconClass: string;\n\n /** Keeps track of the current page path. */\n private _previousPath?: string;\n\n /** Keeps track of the elements and attributes that we've prefixed with the current path. */\n private _elementsWithExternalReferences?: Map<Element, {name: string, value: string}[]>;\n\n constructor(\n elementRef: ElementRef<HTMLElement>,\n private _iconRegistry: MatIconRegistry,\n @Attribute('aria-hidden') ariaHidden: string,\n /**\n * @deprecated `location` parameter to be made required.\n * @breaking-change 8.0.0\n */\n @Optional() @Inject(MAT_ICON_LOCATION) private _location?: MatIconLocation) {\n super(elementRef);\n\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 elementRef.nativeElement.setAttribute('aria-hidden', 'true');\n }\n }\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 */\n private _splitIconName(iconName: string): [string, string] {\n if (!iconName) {\n return ['', ''];\n }\n const parts = iconName.split(':');\n switch (parts.length) {\n case 1: return ['', parts[0]]; // Use default namespace.\n case 2: return <[string, string]>parts;\n default: throw Error(`Invalid icon name: \"${iconName}\"`);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Only update the inline SVG icon if the inputs changed, to avoid unnecessary DOM operations.\n const svgIconChanges = changes['svgIcon'];\n\n if (svgIconChanges) {\n if (this.svgIcon) {\n const [namespace, iconName] = this._splitIconName(this.svgIcon);\n\n this._iconRegistry.getNamedSvgIcon(iconName, namespace).pipe(take(1)).subscribe(\n svg => this._setSvgElement(svg),\n (err: Error) => console.log(`Error retrieving icon: ${err.message}`)\n );\n } else if (svgIconChanges.previousValue) {\n this._clearSvgElement();\n }\n }\n\n if (this._usingFontIcon()) {\n this._updateFontIconClasses();\n }\n }\n\n ngOnInit() {\n // Update font classes because ngOnChanges won't be called if none of the inputs are present,\n // e.g. <mat-icon>arrow</mat-icon> 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 ngAfterViewChecked() {\n const cachedElements = this._elementsWithExternalReferences;\n\n if (cachedElements && this._location && cachedElements.size) {\n const newPath = this._location.getPathname();\n\n // We need to check whether the URL has changed on each change detection since\n // the browser doesn't have an API that will let us react on link clicks and\n // we can't depend on the Angular router. The references need to be updated,\n // because while most browsers don't care whether the URL is correct after\n // the first render, Safari will break if the user navigates to a different\n // page and the SVG isn't re-rendered.\n if (newPath !== this._previousPath) {\n this._previousPath = newPath;\n this._prependPathToReferences(newPath);\n }\n }\n }\n\n ngOnDestroy() {\n if (this._elementsWithExternalReferences) {\n this._elementsWithExternalReferences.clear();\n }\n }\n\n private _usingFontIcon(): boolean {\n return !this.svgIcon;\n }\n\n private _setSvgElement(svg: SVGElement) {\n this._clearSvgElement();\n\n // Workaround for IE11 and Edge ignoring `style` tags inside dynamically-created SVGs.\n // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10898469/\n // Do this before inserting the element into the DOM, in order to avoid a style recalculation.\n const styleTags = svg.querySelectorAll('style') as NodeListOf<HTMLStyleElement>;\n\n for (let i = 0; i < styleTags.length; i++) {\n styleTags[i].textContent += ' ';\n }\n\n // Note: we do this fix here, rather than the icon registry, because the\n // references have to point to the URL at the time that the icon was created.\n if (this._location) {\n const path = this._location.getPathname();\n this._previousPath = path;\n this._cacheChildrenWithExternalReferences(svg);\n this._prependPathToReferences(path);\n }\n\n this._elementRef.nativeElement.appendChild(svg);\n }\n\n private _clearSvgElement() {\n const layoutElement: HTMLElement = this._elementRef.nativeElement;\n let childCount = layoutElement.childNodes.length;\n\n if (this._elementsWithExternalReferences) {\n this._elementsWithExternalReferences.clear();\n }\n\n // Remove existing non-element child nodes and SVGs, and add the new SVG element. Note that\n // we can't use innerHTML, because IE will throw if the element has a data binding.\n while (childCount--) {\n const child = layoutElement.childNodes[childCount];\n\n // 1 corresponds to Node.ELEMENT_NODE. We remove all non-element nodes in order to get rid\n // of any loose text nodes, as well as any SVG elements in order to remove any old icons.\n if (child.nodeType !== 1 || child.nodeName.toLowerCase() === 'svg') {\n layoutElement.removeChild(child);\n }\n }\n }\n\n private _updateFontIconClasses() {\n if (!this._usingFontIcon()) {\n return;\n }\n\n const elem: HTMLElement = this._elementRef.nativeElement;\n const fontSetClass = this.fontSet ?\n this._iconRegistry.classNameForFontAlias(this.fontSet) :\n this._iconRegistry.getDefaultFontSetClass();\n\n if (fontSetClass != this._previousFontSetClass) {\n if (this._previousFontSetClass) {\n elem.classList.remove(this._previousFontSetClass);\n }\n if (fontSetClass) {\n elem.classList.add(fontSetClass);\n }\n this._previousFontSetClass = fontSetClass;\n }\n\n if (this.fontIcon != this._previousFontIconClass) {\n if (this._previousFontIconClass) {\n elem.classList.remove(this._previousFontIconClass);\n }\n if (this.fontIcon) {\n elem.classList.add(this.fontIcon);\n }\n this._previousFontIconClass = this.fontIcon;\n }\n }\n\n /**\n * Cleans up a value to be used as a fontIcon or fontSet.\n * Since the value ends up being assigned as a CSS class, we\n * have to trim the value and omit space-separated values.\n */\n private _cleanupFontValue(value: string) {\n return typeof value === 'string' ? value.trim().split(' ')[0] : value;\n }\n\n /**\n * Prepends the current path to all elements that have an attribute pointing to a `FuncIRI`\n * reference. This is required because WebKit browsers require references to be prefixed with\n * the current path, if the page has a `base` tag.\n */\n private _prependPathToReferences(path: string) {\n const elements = this._elementsWithExternalReferences;\n\n if (elements) {\n elements.forEach((attrs, element) => {\n attrs.forEach(attr => {\n element.setAttribute(attr.name, `url('${path}#${attr.value}')`);\n });\n });\n }\n }\n\n /**\n * Caches the children of an SVG element that have `url()`\n * references that we need to prefix with the current path.\n */\n private _cacheChildrenWithExternalReferences(element: SVGElement) {\n const elementsWithFuncIri = element.querySelectorAll(funcIriAttributeSelector);\n const elements = this._elementsWithExternalReferences =\n this._elementsWithExternalReferences || new Map();\n\n for (let i = 0; i < elementsWithFuncIri.length; i++) {\n funcIriAttributes.forEach(attr => {\n const elementWithReference = elementsWithFuncIri[i];\n const value = elementWithReference.getAttribute(attr);\n const match = value ? value.match(funcIriPattern) : null;\n\n if (match) {\n let attributes = elements.get(elementWithReference);\n\n if (!attributes) {\n attributes = [];\n elements.set(elementWithReference, attributes);\n }\n\n attributes!.push({name: attr, value: match[1]});\n }\n });\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC 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 */\n\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatIcon} from './icon';\n\n\n@NgModule({\n imports: [MatCommonModule],\n exports: [MatIcon, MatCommonModule],\n declarations: [MatIcon],\n})\nexport class MatIconModule {}\n"],"names":["__extends","d","b","__","this","constructor","extendStatics","prototype","Object","create","getMatIconNameNotFoundError","iconName","Error","getMatIconNoHttpProviderError","getMatIconFailedToSanitizeUrlError","url","getMatIconFailedToSanitizeLiteralError","literal","ICON_REGISTRY_PROVIDER_FACTORY","parentRegistry","httpClient","sanitizer","document","MatIconRegistry","cloneSvg","svg","cloneNode","iconKey","namespace","name","MAT_ICON_LOCATION_FACTORY","_document","inject","DOCUMENT","_location","location","getPathname","pathname","search","setPrototypeOf","__proto__","Array","p","hasOwnProperty","SvgIconConfig","data","nodeName","svgElement","_httpClient","_sanitizer","_svgIconConfigs","Map","_iconSetConfigs","_cachedIconsByUrl","_inProgressUrlFetches","_fontCssClassesByAlias","_defaultFontSetClass","addSvgIcon","addSvgIconInNamespace","addSvgIconLiteral","addSvgIconLiteralInNamespace","_addSvgIconConfig","sanitizedLiteral","sanitize","SecurityContext","HTML","_createSvgElementForSingleIcon","addSvgIconSet","addSvgIconSetInNamespace","addSvgIconSetLiteral","addSvgIconSetLiteralInNamespace","_addSvgIconSetConfig","_svgElementFromString","registerFontClassAlias","alias","className","set","classNameForFontAlias","get","setDefaultFontSetClass","getDefaultFontSetClass","getSvgIconFromUrl","safeUrl","_this","RESOURCE_URL","cachedIcon","observableOf","_loadSvgIconFromConfig","pipe","tap","map","getNamedSvgIcon","key","config","_getSvgFromConfig","iconSetConfigs","_getSvgFromIconSetConfigs","observableThrow","ngOnDestroy","clear","namedIcon","_extractIconWithNameFromAnySet","iconSetFetchRequests","filter","iconSetConfig","_loadSvgIconSetFromConfig","catchError","err","console","error","message","forkJoin","foundIcon","i","length","_extractSvgIconFromSet","_fetchUrl","svgText","responseText","_setSvgAttributes","iconSet","iconSource","querySelector","iconElement","removeAttribute","toLowerCase","_toSvgElement","appendChild","str","div","createElement","innerHTML","element","childNodes","nodeType","ELEMENT_NODE","setAttribute","inProgressFetch","req","responseType","finalize","delete","share","configNamespace","push","type","Injectable","args","providedIn","HttpClient","decorators","Optional","DomSanitizer","undefined","Inject","ICON_REGISTRY_PROVIDER","provide","deps","SkipSelf","useFactory","MatIconBase","_elementRef","_MatIconMixinBase","mixinColor","MAT_ICON_LOCATION","InjectionToken","factory","funcIriAttributes","attr","funcIriAttributeSelector","join","funcIriPattern","MatIcon","_super","elementRef","_iconRegistry","ariaHidden","call","_inline","nativeElement","tslib_1.__extends","defineProperty","inline","coerceBooleanProperty","_fontSet","value","_cleanupFontValue","_fontIcon","_splitIconName","parts","split","ngOnChanges","changes","svgIconChanges","svgIcon","_a","take","subscribe","_setSvgElement","log","previousValue","_clearSvgElement","_usingFontIcon","_updateFontIconClasses","ngOnInit","ngAfterViewChecked","cachedElements","_elementsWithExternalReferences","size","newPath","_previousPath","_prependPathToReferences","styleTags","querySelectorAll","textContent","path","_cacheChildrenWithExternalReferences","layoutElement","childCount","child","removeChild","elem","fontSetClass","fontSet","_previousFontSetClass","classList","remove","add","fontIcon","_previousFontIconClass","trim","elements","forEach","attrs","elementsWithFuncIri","elementWithReference","getAttribute","match","attributes","Component","template","selector","exportAs","styles","inputs","host","role","class","[class.mat-icon-inline]","[class.mat-icon-no-color]","encapsulation","ViewEncapsulation","None","changeDetection","ChangeDetectionStrategy","OnPush","String","Attribute","propDecorators","Input","MatIconModule","NgModule","imports","MatCommonModule","exports","declarations"],"mappings":"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"}