mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 12:37:53 +00:00
1 line
122 KiB
JSON
1 line
122 KiB
JSON
{"ast":null,"code":"import { SecurityContext, ɵɵdefineInjectable, ɵɵinject, ErrorHandler, Injectable, Optional, Inject, SkipSelf, InjectionToken, inject, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, Attribute, Input, NgModule } from '@angular/core';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport { of, throwError, forkJoin, Subscription } from 'rxjs';\nimport { tap, map, catchError, finalize, share, take } from 'rxjs/operators';\nimport { HttpClient } from '@angular/common/http';\nimport { DomSanitizer } from '@angular/platform-browser';\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/**\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 */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common/http';\nimport * as ɵngcc2 from '@angular/platform-browser';\nconst _c0 = [\"*\"];\nfunction 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 * `<mat-icon>` without including @angular/common/http.\n * @docs-private\n */\nfunction getMatIconNoHttpProviderError() {\n return Error('Could not find HttpClient provider for use with Angular Material icons. ' + 'Please include the HttpClientModule from @angular/common/http in your ' + 'app imports.');\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 */\nfunction getMatIconFailedToSanitizeUrlError(url) {\n return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL ` + `via Angular's DomSanitizer. Attempted URL was \"${url}\".`);\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 */\nfunction getMatIconFailedToSanitizeLiteralError(literal) {\n return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by ` + `Angular's DomSanitizer. Attempted literal was \"${literal}\".`);\n}\n/**\n * Configuration for an icon, including the URL and possibly the cached SVG element.\n * @docs-private\n */\nclass SvgIconConfig {\n constructor(url, svgText, options) {\n this.url = url;\n this.svgText = svgText;\n this.options = options;\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 */\nclass MatIconRegistry {\n constructor(_httpClient, _sanitizer, document, _errorHandler) {\n this._httpClient = _httpClient;\n this._sanitizer = _sanitizer;\n this._errorHandler = _errorHandler;\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 /** Cache for icons loaded by direct URLs. */\n this._cachedIconsByUrl = new Map();\n /** In-progress icon fetches. Used to coalesce multiple requests to the same URL. */\n this._inProgressUrlFetches = new Map();\n /** Map from font identifiers to their CSS class names. Used for icon fonts. */\n this._fontCssClassesByAlias = new Map();\n /** Registered icon resolver functions. */\n this._resolvers = [];\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 this._defaultFontSetClass = 'material-icons';\n this._document = document;\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, url, options) {\n return this.addSvgIconInNamespace('', iconName, url, options);\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, literal, options) {\n return this.addSvgIconLiteralInNamespace('', iconName, literal, options);\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, iconName, url, options) {\n return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig(url, null, options));\n }\n /**\n * Registers an icon resolver function with the registry. The function will be invoked with the\n * name and namespace of an icon when the registry tries to resolve the URL from which to fetch\n * the icon. The resolver is expected to return a `SafeResourceUrl` that points to the icon,\n * an object with the icon URL and icon options, or `null` if the icon is not supported. Resolvers\n * will be invoked in the order in which they have been registered.\n * @param resolver Resolver function to be registered.\n */\n addSvgIconResolver(resolver) {\n this._resolvers.push(resolver);\n return this;\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, iconName, literal, options) {\n const cleanLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);\n // TODO: add an ngDevMode check\n if (!cleanLiteral) {\n throw getMatIconFailedToSanitizeLiteralError(literal);\n }\n return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig('', cleanLiteral, options));\n }\n /**\n * Registers an icon set by URL in the default namespace.\n * @param url\n */\n addSvgIconSet(url, options) {\n return this.addSvgIconSetInNamespace('', url, options);\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, options) {\n return this.addSvgIconSetLiteralInNamespace('', literal, options);\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, url, options) {\n return this._addSvgIconSetConfig(namespace, new SvgIconConfig(url, null, options));\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, literal, options) {\n const cleanLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);\n if (!cleanLiteral) {\n throw getMatIconFailedToSanitizeLiteralError(literal);\n }\n return this._addSvgIconSetConfig(namespace, new SvgIconConfig('', cleanLiteral, options));\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, 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 */\n classNameForFontAlias(alias) {\n return this._fontCssClassesByAlias.get(alias) || alias;\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) {\n this._defaultFontSetClass = className;\n return this;\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() {\n return this._defaultFontSetClass;\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) {\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n if (!url) {\n throw getMatIconFailedToSanitizeUrlError(safeUrl);\n }\n const cachedIcon = this._cachedIconsByUrl.get(url);\n if (cachedIcon) {\n return of(cloneSvg(cachedIcon));\n }\n return this._loadSvgIconFromConfig(new SvgIconConfig(safeUrl, null)).pipe(tap(svg => this._cachedIconsByUrl.set(url, svg)), map(svg => cloneSvg(svg)));\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, namespace = '') {\n const key = iconKey(namespace, name);\n let config = this._svgIconConfigs.get(key);\n // Return (copy of) cached icon if possible.\n if (config) {\n return this._getSvgFromConfig(config);\n }\n // Otherwise try to resolve the config from one of the resolver functions.\n config = this._getIconConfigFromResolvers(namespace, name);\n if (config) {\n this._svgIconConfigs.set(key, config);\n return this._getSvgFromConfig(config);\n }\n // See if we have any icon sets registered for the namespace.\n const iconSetConfigs = this._iconSetConfigs.get(namespace);\n if (iconSetConfigs) {\n return this._getSvgFromIconSetConfigs(name, iconSetConfigs);\n }\n return throwError(getMatIconNameNotFoundError(key));\n }\n ngOnDestroy() {\n this._resolvers = [];\n this._svgIconConfigs.clear();\n this._iconSetConfigs.clear();\n this._cachedIconsByUrl.clear();\n }\n /**\n * Returns the cached icon for a SvgIconConfig if available, or fetches it from its URL if not.\n */\n _getSvgFromConfig(config) {\n if (config.svgText) {\n // We already have the SVG element for this icon, return a copy.\n return of(cloneSvg(this._svgElementFromConfig(config)));\n } else {\n // Fetch the icon from the config's URL, cache it, and return a copy.\n return this._loadSvgIconFromConfig(config).pipe(map(svg => cloneSvg(svg)));\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 _getSvgFromIconSetConfigs(name, iconSetConfigs) {\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 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 of(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 const iconSetFetchRequests = iconSetConfigs.filter(iconSetConfig => !iconSetConfig.svgText).map(iconSetConfig => {\n return this._loadSvgIconSetFromConfig(iconSetConfig).pipe(catchError(err => {\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, iconSetConfig.url);\n // Swallow errors fetching individual URLs so the\n // combined Observable won't necessarily fail.\n const errorMessage = `Loading icon set URL: ${url} failed: ${err.message}`;\n this._errorHandler.handleError(new Error(errorMessage));\n return of(null);\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 // TODO: add an ngDevMode check\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 */\n _extractIconWithNameFromAnySet(iconName, iconSetConfigs) {\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 // Parsing the icon set's text into an SVG element can be expensive. We can avoid some of\n // the parsing by doing a quick check using `indexOf` to see if there's any chance for the\n // icon to be in the set. This won't be 100% accurate, but it should help us avoid at least\n // some of the parsing.\n if (config.svgText && config.svgText.indexOf(iconName) > -1) {\n const svg = this._svgElementFromConfig(config);\n const foundIcon = this._extractSvgIconFromSet(svg, iconName, config.options);\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 */\n _loadSvgIconFromConfig(config) {\n return this._fetchIcon(config).pipe(tap(svgText => config.svgText = svgText), map(() => this._svgElementFromConfig(config)));\n }\n /**\n * Loads the content of the icon set URL specified in the\n * SvgIconConfig and attaches it to the config.\n */\n _loadSvgIconSetFromConfig(config) {\n if (config.svgText) {\n return of(null);\n }\n return this._fetchIcon(config).pipe(tap(svgText => config.svgText = svgText));\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 _extractSvgIconFromSet(iconSet, iconName, options) {\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 if (!iconSource) {\n return null;\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);\n iconElement.removeAttribute('id');\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, options);\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), options);\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 return this._setSvgAttributes(svg, options);\n }\n /**\n * Creates a DOM element from the given SVG string.\n */\n _svgElementFromString(str) {\n const div = this._document.createElement('DIV');\n div.innerHTML = str;\n const svg = div.querySelector('svg');\n // TODO: add an ngDevMode check\n if (!svg) {\n throw Error('<svg> tag not found');\n }\n return svg;\n }\n /**\n * Converts an element into an SVG node by cloning all of its children.\n */\n _toSvgElement(element) {\n const svg = this._svgElementFromString('<svg></svg>');\n const attributes = element.attributes;\n // Copy over all the attributes from the `symbol` to the new SVG, except the id.\n for (let i = 0; i < attributes.length; i++) {\n const {\n name,\n value\n } = attributes[i];\n if (name !== 'id') {\n svg.setAttribute(name, value);\n }\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 return svg;\n }\n /**\n * Sets the default attributes for an SVG element to be used as an icon.\n */\n _setSvgAttributes(svg, options) {\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 if (options && options.viewBox) {\n svg.setAttribute('viewBox', options.viewBox);\n }\n return svg;\n }\n /**\n * Returns an Observable which produces the string contents of the given icon. Results may be\n * cached, so future calls with the same URL may not cause another HTTP request.\n */\n _fetchIcon(iconConfig) {\n var _a;\n const {\n url: safeUrl,\n options\n } = iconConfig;\n const withCredentials = (_a = options === null || options === void 0 ? void 0 : options.withCredentials) !== null && _a !== void 0 ? _a : false;\n if (!this._httpClient) {\n throw getMatIconNoHttpProviderError();\n }\n // TODO: add an ngDevMode check\n if (safeUrl == null) {\n throw Error(`Cannot fetch icon from URL \"${safeUrl}\".`);\n }\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n // TODO: add an ngDevMode check\n if (!url) {\n throw getMatIconFailedToSanitizeUrlError(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 const inProgressFetch = this._inProgressUrlFetches.get(url);\n if (inProgressFetch) {\n return inProgressFetch;\n }\n const req = this._httpClient.get(url, {\n responseType: 'text',\n withCredentials\n }).pipe(finalize(() => this._inProgressUrlFetches.delete(url)), share());\n this._inProgressUrlFetches.set(url, req);\n return req;\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 _addSvgIconConfig(namespace, iconName, config) {\n this._svgIconConfigs.set(iconKey(namespace, iconName), config);\n return this;\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 _addSvgIconSetConfig(namespace, config) {\n const configNamespace = this._iconSetConfigs.get(namespace);\n if (configNamespace) {\n configNamespace.push(config);\n } else {\n this._iconSetConfigs.set(namespace, [config]);\n }\n return this;\n }\n /** Parses a config's text into an SVG element. */\n _svgElementFromConfig(config) {\n if (!config.svgElement) {\n const svg = this._svgElementFromString(config.svgText);\n this._setSvgAttributes(svg, config.options);\n config.svgElement = svg;\n }\n return config.svgElement;\n }\n /** Tries to create an icon config through the registered resolver functions. */\n _getIconConfigFromResolvers(namespace, name) {\n for (let i = 0; i < this._resolvers.length; i++) {\n const result = this._resolvers[i](name, namespace);\n if (result) {\n return isSafeUrlWithOptions(result) ? new SvgIconConfig(result.url, null, result.options) : new SvgIconConfig(result, null);\n }\n }\n return undefined;\n }\n}\nMatIconRegistry.ɵfac = function MatIconRegistry_Factory(t) {\n return new (t || MatIconRegistry)(ɵngcc0.ɵɵinject(ɵngcc1.HttpClient, 8), ɵngcc0.ɵɵinject(ɵngcc2.DomSanitizer), ɵngcc0.ɵɵinject(DOCUMENT, 8), ɵngcc0.ɵɵinject(ɵngcc0.ErrorHandler));\n};\nMatIconRegistry.ɵprov = ɵɵdefineInjectable({\n factory: function MatIconRegistry_Factory() {\n return new MatIconRegistry(ɵɵinject(HttpClient, 8), ɵɵinject(DomSanitizer), ɵɵinject(DOCUMENT, 8), ɵɵinject(ErrorHandler));\n },\n token: MatIconRegistry,\n providedIn: \"root\"\n});\nMatIconRegistry.ctorParameters = () => [{\n type: HttpClient,\n decorators: [{\n type: Optional\n }]\n}, {\n type: DomSanitizer\n}, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }]\n}, {\n type: ErrorHandler\n}];\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatIconRegistry, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], function () {\n return [{\n type: ɵngcc1.HttpClient,\n decorators: [{\n type: Optional\n }]\n }, {\n type: ɵngcc2.DomSanitizer\n }, {\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }]\n }, {\n type: ɵngcc0.ErrorHandler\n }];\n }, null);\n})();\n/** @docs-private */\nfunction ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, httpClient, sanitizer, errorHandler, document) {\n return parentRegistry || new MatIconRegistry(httpClient, sanitizer, document, errorHandler);\n}\n/** @docs-private */\nconst 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(), HttpClient], DomSanitizer, ErrorHandler, [new Optional(), DOCUMENT]],\n useFactory: ICON_REGISTRY_PROVIDER_FACTORY\n};\n/** Clones an SVGElement while preserving type information. */\nfunction cloneSvg(svg) {\n return svg.cloneNode(true);\n}\n/** Returns the cache key to use for an icon namespace and name. */\nfunction iconKey(namespace, name) {\n return namespace + ':' + name;\n}\nfunction isSafeUrlWithOptions(value) {\n return !!(value.url && value.options);\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// Boilerplate for applying mixins to MatIcon.\n/** @docs-private */\nclass MatIconBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatIconMixinBase = mixinColor(MatIconBase);\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 */\nconst MAT_ICON_LOCATION = new InjectionToken('mat-icon-location', {\n providedIn: 'root',\n factory: MAT_ICON_LOCATION_FACTORY\n});\n/** @docs-private */\nfunction MAT_ICON_LOCATION_FACTORY() {\n const _document = inject(DOCUMENT);\n const _location = _document ? _document.location : null;\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/** SVG attributes that accept a FuncIRI (e.g. `url(<something>)`). */\nconst funcIriAttributes = ['clip-path', 'color-profile', 'src', 'cursor', 'fill', 'filter', 'marker', 'marker-start', 'marker-mid', 'marker-end', 'mask', 'stroke'];\nconst ɵ0 = attr => `[${attr}]`;\n/** Selector that can be used to find all elements that are using a `FuncIRI`. */\nconst funcIriAttributeSelector = funcIriAttributes.map(ɵ0).join(', ');\n/** Regex that can be used to extract the id out of a FuncIRI. */\nconst funcIriPattern = /^url\\(['\"]?#(.*?)['\"]?\\)$/;\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 */\nclass MatIcon extends _MatIconMixinBase {\n constructor(elementRef, _iconRegistry, ariaHidden, _location, _errorHandler) {\n super(elementRef);\n this._iconRegistry = _iconRegistry;\n this._location = _location;\n this._errorHandler = _errorHandler;\n this._inline = false;\n /** Subscription to the current in-progress SVG icon request. */\n this._currentIconFetch = Subscription.EMPTY;\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 * 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 get inline() {\n return this._inline;\n }\n set inline(inline) {\n this._inline = coerceBooleanProperty(inline);\n }\n /** Name of the icon in the SVG icon set. */\n get svgIcon() {\n return this._svgIcon;\n }\n set svgIcon(value) {\n if (value !== this._svgIcon) {\n if (value) {\n this._updateSvgIcon(value);\n } else if (this._svgIcon) {\n this._clearSvgElement();\n }\n this._svgIcon = value;\n }\n }\n /** Font set that the icon is a part of. */\n get fontSet() {\n return this._fontSet;\n }\n set fontSet(value) {\n const newValue = this._cleanupFontValue(value);\n if (newValue !== this._fontSet) {\n this._fontSet = newValue;\n this._updateFontIconClasses();\n }\n }\n /** Name of an icon within a font set. */\n get fontIcon() {\n return this._fontIcon;\n }\n set fontIcon(value) {\n const newValue = this._cleanupFontValue(value);\n if (newValue !== this._fontIcon) {\n this._fontIcon = newValue;\n this._updateFontIconClasses();\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 _splitIconName(iconName) {\n if (!iconName) {\n return ['', ''];\n }\n const parts = iconName.split(':');\n switch (parts.length) {\n case 1:\n return ['', parts[0]];\n // Use default namespace.\n case 2:\n return parts;\n default:\n throw Error(`Invalid icon name: \"${iconName}\"`);\n // TODO: add an ngDevMode check\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 this._updateFontIconClasses();\n }\n ngAfterViewChecked() {\n const cachedElements = this._elementsWithExternalReferences;\n if (cachedElements && cachedElements.size) {\n const newPath = this._location.getPathname();\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 ngOnDestroy() {\n this._currentIconFetch.unsubscribe();\n if (this._elementsWithExternalReferences) {\n this._elementsWithExternalReferences.clear();\n }\n }\n _usingFontIcon() {\n return !this.svgIcon;\n }\n _setSvgElement(svg) {\n this._clearSvgElement();\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');\n for (let i = 0; i < styleTags.length; i++) {\n styleTags[i].textContent += ' ';\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 const path = this._location.getPathname();\n this._previousPath = path;\n this._cacheChildrenWithExternalReferences(svg);\n this._prependPathToReferences(path);\n this._elementRef.nativeElement.appendChild(svg);\n }\n _clearSvgElement() {\n const layoutElement = this._elementRef.nativeElement;\n let childCount = layoutElement.childNodes.length;\n if (this._elementsWithExternalReferences) {\n this._elementsWithExternalReferences.clear();\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 // 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 _updateFontIconClasses() {\n if (!this._usingFontIcon()) {\n return;\n }\n const elem = this._elementRef.nativeElement;\n const fontSetClass = this.fontSet ? this._iconRegistry.classNameForFontAlias(this.fontSet) : this._iconRegistry.getDefaultFontSetClass();\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 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 * 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 _cleanupFontValue(value) {\n return typeof value === 'string' ? value.trim().split(' ')[0] : value;\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 _prependPathToReferences(path) {\n const elements = this._elementsWithExternalReferences;\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 * Caches the children of an SVG element that have `url()`\n * references that we need to prefix with the current path.\n */\n _cacheChildrenWithExternalReferences(element) {\n const elementsWithFuncIri = element.querySelectorAll(funcIriAttributeSelector);\n const elements = this._elementsWithExternalReferences = this._elementsWithExternalReferences || new Map();\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 if (match) {\n let attributes = elements.get(elementWithReference);\n if (!attributes) {\n attributes = [];\n elements.set(elementWithReference, attributes);\n }\n attributes.push({\n name: attr,\n value: match[1]\n });\n }\n });\n }\n }\n /** Sets a new SVG icon with a particular name. */\n _updateSvgIcon(rawName) {\n this._svgNamespace = null;\n this._svgName = null;\n this._currentIconFetch.unsubscribe();\n if (rawName) {\n const [namespace, iconName] = this._splitIconName(rawName);\n if (namespace) {\n this._svgNamespace = namespace;\n }\n if (iconName) {\n this._svgName = iconName;\n }\n this._currentIconFetch = this._iconRegistry.getNamedSvgIcon(iconName, namespace).pipe(take(1)).subscribe(svg => this._setSvgElement(svg), err => {\n const errorMessage = `Error retrieving icon ${namespace}:${iconName}! ${err.message}`;\n this._errorHandler.handleError(new Error(errorMessage));\n });\n }\n }\n}\nMatIcon.ɵfac = function MatIcon_Factory(t) {\n return new (t || MatIcon)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(MatIconRegistry), ɵngcc0.ɵɵinjectAttribute('aria-hidden'), ɵngcc0.ɵɵdirectiveInject(MAT_ICON_LOCATION), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ErrorHandler));\n};\nMatIcon.ɵcmp = /*@__PURE__*/ɵngcc0.ɵɵdefineComponent({\n type: MatIcon,\n selectors: [[\"mat-icon\"]],\n hostAttrs: [\"role\", \"img\", 1, \"mat-icon\", \"notranslate\"],\n hostVars: 7,\n hostBindings: function MatIcon_HostBindings(rf, ctx) {\n if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"data-mat-icon-type\", ctx._usingFontIcon() ? \"font\" : \"svg\")(\"data-mat-icon-name\", ctx._svgName || ctx.fontIcon)(\"data-mat-icon-namespace\", ctx._svgNamespace || ctx.fontSet);\n ɵngcc0.ɵɵclassProp(\"mat-icon-inline\", ctx.inline)(\"mat-icon-no-color\", ctx.color !== \"primary\" && ctx.color !== \"accent\" && ctx.color !== \"warn\");\n }\n },\n inputs: {\n color: \"color\",\n inline: \"inline\",\n svgIcon: \"svgIcon\",\n fontSet: \"fontSet\",\n fontIcon: \"fontIcon\"\n },\n exportAs: [\"matIcon\"],\n features: [ɵngcc0.ɵɵInheritDefinitionFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatIcon_Template(rf, ctx) {\n if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n }\n },\n styles: [\".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n});\nMatIcon.ctorParameters = () => [{\n type: ElementRef\n}, {\n type: MatIconRegistry\n}, {\n type: String,\n decorators: [{\n type: Attribute,\n args: ['aria-hidden']\n }]\n}, {\n type: undefined,\n decorators: [{\n type: Inject,\n args: [MAT_ICON_LOCATION]\n }]\n}, {\n type: ErrorHandler\n}];\nMatIcon.propDecorators = {\n inline: [{\n type: Input\n }],\n svgIcon: [{\n type: Input\n }],\n fontSet: [{\n type: Input\n }],\n fontIcon: [{\n type: Input\n }]\n};\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatIcon, [{\n type: Component,\n args: [{\n template: '<ng-content></ng-content>',\n selector: 'mat-icon',\n exportAs: 'matIcon',\n inputs: ['color'],\n host: {\n 'role': 'img',\n 'class': 'mat-icon notranslate',\n '[attr.data-mat-icon-type]': '_usingFontIcon() ? \"font\" : \"svg\"',\n '[attr.data-mat-icon-name]': '_svgName || fontIcon',\n '[attr.data-mat-icon-namespace]': '_svgNamespace || fontSet',\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 styles: [\".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\\n\"]\n }]\n }], function () {\n return [{\n type: ɵngcc0.ElementRef\n }, {\n type: MatIconRegistry\n }, {\n type: String,\n decorators: [{\n type: Attribute,\n args: ['aria-hidden']\n }]\n }, {\n type: undefined,\n decorators: [{\n type: Inject,\n args: [MAT_ICON_LOCATION]\n }]\n }, {\n type: ɵngcc0.ErrorHandler\n }];\n }, {\n inline: [{\n type: Input\n }],\n svgIcon: [{\n type: Input\n }],\n fontSet: [{\n type: Input\n }],\n fontIcon: [{\n type: Input\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 */\nclass MatIconModule {}\nMatIconModule.ɵfac = function MatIconModule_Factory(t) {\n return new (t || MatIconModule)();\n};\nMatIconModule.ɵmod = /*@__PURE__*/ɵngcc0.ɵɵdefineNgModule({\n type: MatIconModule\n});\nMatIconModule.ɵinj = /*@__PURE__*/ɵngcc0.ɵɵdefineInjector({\n imports: [MatCommonModule, MatCommonModule]\n});\n(function () {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatIconModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: [MatIcon, MatCommonModule],\n declarations: [MatIcon]\n }]\n }], null, null);\n})();\n(function () {\n (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatIconModule, {\n declarations: function () {\n return [MatIcon];\n },\n imports: function () {\n return [MatCommonModule];\n },\n exports: function () {\n return [MatIcon, MatCommonModule];\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\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ICON_REGISTRY_PROVIDER, ICON_REGISTRY_PROVIDER_FACTORY, MAT_ICON_LOCATION, MAT_ICON_LOCATION_FACTORY, MatIcon, MatIconModule, MatIconRegistry, getMatIconFailedToSanitizeLiteralError, getMatIconFailedToSanitizeUrlError, getMatIconNameNotFoundError, getMatIconNoHttpProviderError, ɵ0 };","map":{"version":3,"names":["SecurityContext","ɵɵdefineInjectable","ɵɵinject","ErrorHandler","Injectable","Optional","Inject","SkipSelf","InjectionToken","inject","Component","ViewEncapsulation","ChangeDetectionStrategy","ElementRef","Attribute","Input","NgModule","mixinColor","MatCommonModule","coerceBooleanProperty","DOCUMENT","of","throwError","forkJoin","Subscription","tap","map","catchError","finalize","share","take","HttpClient","DomSanitizer","ɵngcc0","ɵngcc1","ɵngcc2","_c0","getMatIconNameNotFoundError","iconName","Error","getMatIconNoHttpProviderError","getMatIconFailedToSanitizeUrlError","url","getMatIconFailedToSanitizeLiteralError","literal","SvgIconConfig","constructor","svgText","options","MatIconRegistry","_httpClient","_sanitizer","document","_errorHandler","_svgIconConfigs","Map","_iconSetConfigs","_cachedIconsByUrl","_inProgressUrlFetches","_fontCssClassesByAlias","_resolvers","_defaultFontSetClass","_document","addSvgIcon","addSvgIconInNamespace","addSvgIconLiteral","addSvgIconLiteralInNamespace","namespace","_addSvgIconConfig","addSvgIconResolver","resolver","push","cleanLiteral","sanitize","HTML","addSvgIconSet","addSvgIconSetInNamespace","addSvgIconSetLiteral","addSvgIconSetLiteralInNamespace","_addSvgIconSetConfig","registerFontClassAlias","alias","className","set","classNameForFontAlias","get","setDefaultFontSetClass","getDefaultFontSetClass","getSvgIconFromUrl","safeUrl","RESOURCE_URL","cachedIcon","cloneSvg","_loadSvgIconFromConfig","pipe","svg","getNamedSvgIcon","name","key","iconKey","config","_getSvgFromConfig","_getIconConfigFromResolvers","iconSetConfigs","_getSvgFromIconSetConfigs","ngOnDestroy","clear","_svgElementFromConfig","namedIcon","_extractIconWithNameFromAnySet","iconSetFetchRequests","filter","iconSetConfig","_loadSvgIconSetFromConfig","err","errorMessage","message","handleError","foundIcon","i","length","indexOf","_extractSvgIconFromSet","_fetchIcon","iconSet","iconSource","querySelector","iconElement","cloneNode","removeAttribute","nodeName","toLowerCase","_setSvgAttributes","_toSvgElement","_svgElementFromString","appendChild","str","div","createElement","innerHTML","element","attributes","value","setAttribute","childNodes","nodeType","ELEMENT_NODE","viewBox","iconConfig","_a","withCredentials","inProgressFetch","req","responseType","delete","configNamespace","svgElement","result","isSafeUrlWithOptions","undefined","ɵfac","MatIconRegistry_Factory","t","ɵprov","factory","token","providedIn","ctorParameters","type","decorators","args","ngDevMode","ɵsetClassMetadata","ICON_REGISTRY_PROVIDER_FACTORY","parentRegistry","httpClient","sanitizer","errorHandler","ICON_REGISTRY_PROVIDER","provide","deps","useFactory","MatIconBase","_elementRef","_MatIconMixinBase","MAT_ICON_LOCATION","MAT_ICON_LOCATION_FACTORY","_location","location","getPathname","pathname","search","funcIriAttributes","ɵ0","attr","funcIriAttributeSelector","join","funcIriPattern","MatIcon","elementRef","_iconRegistry","ariaHidden","_inline","_currentIconFetch","EMPTY","nativeElement","inline","svgIcon","_svgIcon","_updateSvgIcon","_clearSvgElement","fontSet","_fontSet","newValue","_cleanupFontValue","_updateFontIconClasses","fontIcon","_fontIcon","_splitIconName","parts","split","ngOnInit","ngAfterViewChecked","cachedElements","_elementsWithExternalReferences","size","newPath","_previousPath","_prependPathToReferences","unsubscribe","_usingFontIcon","_setSvgElement","styleTags","querySelectorAll","textContent","path","_cacheChildrenWithExternalReferences","layoutElement","childCount","child","removeChild","elem","fontSetClass","_previousFontSetClass","classList","remove","add","_previousFontIconClass","trim","elements","forEach","attrs","elementsWithFuncIri","elementWithReference","getAttribute","match","rawName","_svgNamespace","_svgName","subscribe","MatIcon_Factory","ɵɵdirectiveInject","ɵɵinjectAttribute","ɵcmp","ɵɵdefineComponent","selectors","hostAttrs","hostVars","hostBindings","MatIcon_HostBindings","rf","ctx","ɵɵattribute","ɵɵclassProp","color","inputs","exportAs","features","ɵɵInheritDefinitionFeature","ngContentSelectors","decls","vars","template","MatIcon_Template","ɵɵprojectionDef","ɵɵprojection","styles","encapsulation","changeDetection","String","propDecorators","selector","host","None","OnPush","MatIconModule","MatIconModule_Factory","ɵmod","ɵɵdefineNgModule","ɵinj","ɵɵdefineInjector","imports","exports","declarations","ngJitMode","ɵɵsetNgModuleScope"],"sources":["C:/Users/eudes.inacio/GabineteDigital/gabinete-digital-fo/node_modules/@angular/material/__ivy_ngcc__/fesm2015/icon.js"],"sourcesContent":["import { SecurityContext, ɵɵdefineInjectable, ɵɵinject, ErrorHandler, Injectable, Optional, Inject, SkipSelf, InjectionToken, inject, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, Attribute, Input, NgModule } from '@angular/core';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport { of, throwError, forkJoin, Subscription } from 'rxjs';\nimport { tap, map, catchError, finalize, share, take } from 'rxjs/operators';\nimport { HttpClient } from '@angular/common/http';\nimport { DomSanitizer } from '@angular/platform-browser';\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/**\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 */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common/http';\nimport * as ɵngcc2 from '@angular/platform-browser';\n\nconst _c0 = [\"*\"];\nfunction 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 * `<mat-icon>` without including @angular/common/http.\n * @docs-private\n */\nfunction getMatIconNoHttpProviderError() {\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 * 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 */\nfunction getMatIconFailedToSanitizeUrlError(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 * 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 */\nfunction getMatIconFailedToSanitizeLiteralError(literal) {\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 * Configuration for an icon, including the URL and possibly the cached SVG element.\n * @docs-private\n */\nclass SvgIconConfig {\n constructor(url, svgText, options) {\n this.url = url;\n this.svgText = svgText;\n this.options = options;\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 */\nclass MatIconRegistry {\n constructor(_httpClient, _sanitizer, document, _errorHandler) {\n this._httpClient = _httpClient;\n this._sanitizer = _sanitizer;\n this._errorHandler = _errorHandler;\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 /** Cache for icons loaded by direct URLs. */\n this._cachedIconsByUrl = new Map();\n /** In-progress icon fetches. Used to coalesce multiple requests to the same URL. */\n this._inProgressUrlFetches = new Map();\n /** Map from font identifiers to their CSS class names. Used for icon fonts. */\n this._fontCssClassesByAlias = new Map();\n /** Registered icon resolver functions. */\n this._resolvers = [];\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 this._defaultFontSetClass = 'material-icons';\n this._document = document;\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, url, options) {\n return this.addSvgIconInNamespace('', iconName, url, options);\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, literal, options) {\n return this.addSvgIconLiteralInNamespace('', iconName, literal, options);\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, iconName, url, options) {\n return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig(url, null, options));\n }\n /**\n * Registers an icon resolver function with the registry. The function will be invoked with the\n * name and namespace of an icon when the registry tries to resolve the URL from which to fetch\n * the icon. The resolver is expected to return a `SafeResourceUrl` that points to the icon,\n * an object with the icon URL and icon options, or `null` if the icon is not supported. Resolvers\n * will be invoked in the order in which they have been registered.\n * @param resolver Resolver function to be registered.\n */\n addSvgIconResolver(resolver) {\n this._resolvers.push(resolver);\n return this;\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, iconName, literal, options) {\n const cleanLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);\n // TODO: add an ngDevMode check\n if (!cleanLiteral) {\n throw getMatIconFailedToSanitizeLiteralError(literal);\n }\n return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig('', cleanLiteral, options));\n }\n /**\n * Registers an icon set by URL in the default namespace.\n * @param url\n */\n addSvgIconSet(url, options) {\n return this.addSvgIconSetInNamespace('', url, options);\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, options) {\n return this.addSvgIconSetLiteralInNamespace('', literal, options);\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, url, options) {\n return this._addSvgIconSetConfig(namespace, new SvgIconConfig(url, null, options));\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, literal, options) {\n const cleanLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);\n if (!cleanLiteral) {\n throw getMatIconFailedToSanitizeLiteralError(literal);\n }\n return this._addSvgIconSetConfig(namespace, new SvgIconConfig('', cleanLiteral, options));\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, 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 */\n classNameForFontAlias(alias) {\n return this._fontCssClassesByAlias.get(alias) || alias;\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) {\n this._defaultFontSetClass = className;\n return this;\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() {\n return this._defaultFontSetClass;\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) {\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n if (!url) {\n throw getMatIconFailedToSanitizeUrlError(safeUrl);\n }\n const cachedIcon = this._cachedIconsByUrl.get(url);\n if (cachedIcon) {\n return of(cloneSvg(cachedIcon));\n }\n return this._loadSvgIconFromConfig(new SvgIconConfig(safeUrl, null)).pipe(tap(svg => this._cachedIconsByUrl.set(url, svg)), map(svg => cloneSvg(svg)));\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, namespace = '') {\n const key = iconKey(namespace, name);\n let config = this._svgIconConfigs.get(key);\n // Return (copy of) cached icon if possible.\n if (config) {\n return this._getSvgFromConfig(config);\n }\n // Otherwise try to resolve the config from one of the resolver functions.\n config = this._getIconConfigFromResolvers(namespace, name);\n if (config) {\n this._svgIconConfigs.set(key, config);\n return this._getSvgFromConfig(config);\n }\n // See if we have any icon sets registered for the namespace.\n const iconSetConfigs = this._iconSetConfigs.get(namespace);\n if (iconSetConfigs) {\n return this._getSvgFromIconSetConfigs(name, iconSetConfigs);\n }\n return throwError(getMatIconNameNotFoundError(key));\n }\n ngOnDestroy() {\n this._resolvers = [];\n this._svgIconConfigs.clear();\n this._iconSetConfigs.clear();\n this._cachedIconsByUrl.clear();\n }\n /**\n * Returns the cached icon for a SvgIconConfig if available, or fetches it from its URL if not.\n */\n _getSvgFromConfig(config) {\n if (config.svgText) {\n // We already have the SVG element for this icon, return a copy.\n return of(cloneSvg(this._svgElementFromConfig(config)));\n }\n else {\n // Fetch the icon from the config's URL, cache it, and return a copy.\n return this._loadSvgIconFromConfig(config).pipe(map(svg => cloneSvg(svg)));\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 _getSvgFromIconSetConfigs(name, iconSetConfigs) {\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 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 of(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 const iconSetFetchRequests = iconSetConfigs\n .filter(iconSetConfig => !iconSetConfig.svgText)\n .map(iconSetConfig => {\n return this._loadSvgIconSetFromConfig(iconSetConfig).pipe(catchError((err) => {\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, iconSetConfig.url);\n // Swallow errors fetching individual URLs so the\n // combined Observable won't necessarily fail.\n const errorMessage = `Loading icon set URL: ${url} failed: ${err.message}`;\n this._errorHandler.handleError(new Error(errorMessage));\n return of(null);\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 // TODO: add an ngDevMode check\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 */\n _extractIconWithNameFromAnySet(iconName, iconSetConfigs) {\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 // Parsing the icon set's text into an SVG element can be expensive. We can avoid some of\n // the parsing by doing a quick check using `indexOf` to see if there's any chance for the\n // icon to be in the set. This won't be 100% accurate, but it should help us avoid at least\n // some of the parsing.\n if (config.svgText && config.svgText.indexOf(iconName) > -1) {\n const svg = this._svgElementFromConfig(config);\n const foundIcon = this._extractSvgIconFromSet(svg, iconName, config.options);\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 */\n _loadSvgIconFromConfig(config) {\n return this._fetchIcon(config).pipe(tap(svgText => config.svgText = svgText), map(() => this._svgElementFromConfig(config)));\n }\n /**\n * Loads the content of the icon set URL specified in the\n * SvgIconConfig and attaches it to the config.\n */\n _loadSvgIconSetFromConfig(config) {\n if (config.svgText) {\n return of(null);\n }\n return this._fetchIcon(config).pipe(tap(svgText => config.svgText = svgText));\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 _extractSvgIconFromSet(iconSet, iconName, options) {\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 if (!iconSource) {\n return null;\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);\n iconElement.removeAttribute('id');\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, options);\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), options);\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 return this._setSvgAttributes(svg, options);\n }\n /**\n * Creates a DOM element from the given SVG string.\n */\n _svgElementFromString(str) {\n const div = this._document.createElement('DIV');\n div.innerHTML = str;\n const svg = div.querySelector('svg');\n // TODO: add an ngDevMode check\n if (!svg) {\n throw Error('<svg> tag not found');\n }\n return svg;\n }\n /**\n * Converts an element into an SVG node by cloning all of its children.\n */\n _toSvgElement(element) {\n const svg = this._svgElementFromString('<svg></svg>');\n const attributes = element.attributes;\n // Copy over all the attributes from the `symbol` to the new SVG, except the id.\n for (let i = 0; i < attributes.length; i++) {\n const { name, value } = attributes[i];\n if (name !== 'id') {\n svg.setAttribute(name, value);\n }\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 return svg;\n }\n /**\n * Sets the default attributes for an SVG element to be used as an icon.\n */\n _setSvgAttributes(svg, options) {\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 if (options && options.viewBox) {\n svg.setAttribute('viewBox', options.viewBox);\n }\n return svg;\n }\n /**\n * Returns an Observable which produces the string contents of the given icon. Results may be\n * cached, so future calls with the same URL may not cause another HTTP request.\n */\n _fetchIcon(iconConfig) {\n var _a;\n const { url: safeUrl, options } = iconConfig;\n const withCredentials = (_a = options === null || options === void 0 ? void 0 : options.withCredentials) !== null && _a !== void 0 ? _a : false;\n if (!this._httpClient) {\n throw getMatIconNoHttpProviderError();\n }\n // TODO: add an ngDevMode check\n if (safeUrl == null) {\n throw Error(`Cannot fetch icon from URL \"${safeUrl}\".`);\n }\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n // TODO: add an ngDevMode check\n if (!url) {\n throw getMatIconFailedToSanitizeUrlError(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 const inProgressFetch = this._inProgressUrlFetches.get(url);\n if (inProgressFetch) {\n return inProgressFetch;\n }\n const req = this._httpClient.get(url, { responseType: 'text', withCredentials }).pipe(finalize(() => this._inProgressUrlFetches.delete(url)), share());\n this._inProgressUrlFetches.set(url, req);\n return req;\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 _addSvgIconConfig(namespace, iconName, config) {\n this._svgIconConfigs.set(iconKey(namespace, iconName), config);\n return this;\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 _addSvgIconSetConfig(namespace, config) {\n const 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 /** Parses a config's text into an SVG element. */\n _svgElementFromConfig(config) {\n if (!config.svgElement) {\n const svg = this._svgElementFromString(config.svgText);\n this._setSvgAttributes(svg, config.options);\n config.svgElement = svg;\n }\n return config.svgElement;\n }\n /** Tries to create an icon config through the registered resolver functions. */\n _getIconConfigFromResolvers(namespace, name) {\n for (let i = 0; i < this._resolvers.length; i++) {\n const result = this._resolvers[i](name, namespace);\n if (result) {\n return isSafeUrlWithOptions(result) ?\n new SvgIconConfig(result.url, null, result.options) :\n new SvgIconConfig(result, null);\n }\n }\n return undefined;\n }\n}\nMatIconRegistry.ɵfac = function MatIconRegistry_Factory(t) { return new (t || MatIconRegistry)(ɵngcc0.ɵɵinject(ɵngcc1.HttpClient, 8), ɵngcc0.ɵɵinject(ɵngcc2.DomSanitizer), ɵngcc0.ɵɵinject(DOCUMENT, 8), ɵngcc0.ɵɵinject(ɵngcc0.ErrorHandler)); };\nMatIconRegistry.ɵprov = ɵɵdefineInjectable({ factory: function MatIconRegistry_Factory() { return new MatIconRegistry(ɵɵinject(HttpClient, 8), ɵɵinject(DomSanitizer), ɵɵinject(DOCUMENT, 8), ɵɵinject(ErrorHandler)); }, token: MatIconRegistry, providedIn: \"root\" });\nMatIconRegistry.ctorParameters = () => [\n { type: HttpClient, decorators: [{ type: Optional }] },\n { type: DomSanitizer },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: ErrorHandler }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatIconRegistry, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: ɵngcc1.HttpClient, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.DomSanitizer }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc0.ErrorHandler }]; }, null); })();\n/** @docs-private */\nfunction ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, httpClient, sanitizer, errorHandler, document) {\n return parentRegistry || new MatIconRegistry(httpClient, sanitizer, document, errorHandler);\n}\n/** @docs-private */\nconst 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 ErrorHandler,\n [new Optional(), DOCUMENT],\n ],\n useFactory: ICON_REGISTRY_PROVIDER_FACTORY,\n};\n/** Clones an SVGElement while preserving type information. */\nfunction cloneSvg(svg) {\n return svg.cloneNode(true);\n}\n/** Returns the cache key to use for an icon namespace and name. */\nfunction iconKey(namespace, name) {\n return namespace + ':' + name;\n}\nfunction isSafeUrlWithOptions(value) {\n return !!(value.url && value.options);\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// Boilerplate for applying mixins to MatIcon.\n/** @docs-private */\nclass MatIconBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatIconMixinBase = mixinColor(MatIconBase);\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 */\nconst MAT_ICON_LOCATION = new InjectionToken('mat-icon-location', {\n providedIn: 'root',\n factory: MAT_ICON_LOCATION_FACTORY\n});\n/** @docs-private */\nfunction MAT_ICON_LOCATION_FACTORY() {\n const _document = inject(DOCUMENT);\n const _location = _document ? _document.location : null;\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/** 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];\nconst ɵ0 = attr => `[${attr}]`;\n/** Selector that can be used to find all elements that are using a `FuncIRI`. */\nconst funcIriAttributeSelector = funcIriAttributes.map(ɵ0).join(', ');\n/** Regex that can be used to extract the id out of a FuncIRI. */\nconst funcIriPattern = /^url\\(['\"]?#(.*?)['\"]?\\)$/;\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 */\nclass MatIcon extends _MatIconMixinBase {\n constructor(elementRef, _iconRegistry, ariaHidden, _location, _errorHandler) {\n super(elementRef);\n this._iconRegistry = _iconRegistry;\n this._location = _location;\n this._errorHandler = _errorHandler;\n this._inline = false;\n /** Subscription to the current in-progress SVG icon request. */\n this._currentIconFetch = Subscription.EMPTY;\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 * 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 get inline() {\n return this._inline;\n }\n set inline(inline) {\n this._inline = coerceBooleanProperty(inline);\n }\n /** Name of the icon in the SVG icon set. */\n get svgIcon() { return this._svgIcon; }\n set svgIcon(value) {\n if (value !== this._svgIcon) {\n if (value) {\n this._updateSvgIcon(value);\n }\n else if (this._svgIcon) {\n this._clearSvgElement();\n }\n this._svgIcon = value;\n }\n }\n /** Font set that the icon is a part of. */\n get fontSet() { return this._fontSet; }\n set fontSet(value) {\n const newValue = this._cleanupFontValue(value);\n if (newValue !== this._fontSet) {\n this._fontSet = newValue;\n this._updateFontIconClasses();\n }\n }\n /** Name of an icon within a font set. */\n get fontIcon() { return this._fontIcon; }\n set fontIcon(value) {\n const newValue = this._cleanupFontValue(value);\n if (newValue !== this._fontIcon) {\n this._fontIcon = newValue;\n this._updateFontIconClasses();\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 _splitIconName(iconName) {\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 parts;\n default: throw Error(`Invalid icon name: \"${iconName}\"`); // TODO: add an ngDevMode check\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 this._updateFontIconClasses();\n }\n ngAfterViewChecked() {\n const cachedElements = this._elementsWithExternalReferences;\n if (cachedElements && cachedElements.size) {\n const newPath = this._location.getPathname();\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 ngOnDestroy() {\n this._currentIconFetch.unsubscribe();\n if (this._elementsWithExternalReferences) {\n this._elementsWithExternalReferences.clear();\n }\n }\n _usingFontIcon() {\n return !this.svgIcon;\n }\n _setSvgElement(svg) {\n this._clearSvgElement();\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');\n for (let i = 0; i < styleTags.length; i++) {\n styleTags[i].textContent += ' ';\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 const path = this._location.getPathname();\n this._previousPath = path;\n this._cacheChildrenWithExternalReferences(svg);\n this._prependPathToReferences(path);\n this._elementRef.nativeElement.appendChild(svg);\n }\n _clearSvgElement() {\n const layoutElement = this._elementRef.nativeElement;\n let childCount = layoutElement.childNodes.length;\n if (this._elementsWithExternalReferences) {\n this._elementsWithExternalReferences.clear();\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 // 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 _updateFontIconClasses() {\n if (!this._usingFontIcon()) {\n return;\n }\n const elem = this._elementRef.nativeElement;\n const fontSetClass = this.fontSet ?\n this._iconRegistry.classNameForFontAlias(this.fontSet) :\n this._iconRegistry.getDefaultFontSetClass();\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 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 * 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 _cleanupFontValue(value) {\n return typeof value === 'string' ? value.trim().split(' ')[0] : value;\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 _prependPathToReferences(path) {\n const elements = this._elementsWithExternalReferences;\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 * Caches the children of an SVG element that have `url()`\n * references that we need to prefix with the current path.\n */\n _cacheChildrenWithExternalReferences(element) {\n const elementsWithFuncIri = element.querySelectorAll(funcIriAttributeSelector);\n const elements = this._elementsWithExternalReferences =\n this._elementsWithExternalReferences || new Map();\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 if (match) {\n let attributes = elements.get(elementWithReference);\n if (!attributes) {\n attributes = [];\n elements.set(elementWithReference, attributes);\n }\n attributes.push({ name: attr, value: match[1] });\n }\n });\n }\n }\n /** Sets a new SVG icon with a particular name. */\n _updateSvgIcon(rawName) {\n this._svgNamespace = null;\n this._svgName = null;\n this._currentIconFetch.unsubscribe();\n if (rawName) {\n const [namespace, iconName] = this._splitIconName(rawName);\n if (namespace) {\n this._svgNamespace = namespace;\n }\n if (iconName) {\n this._svgName = iconName;\n }\n this._currentIconFetch = this._iconRegistry.getNamedSvgIcon(iconName, namespace)\n .pipe(take(1))\n .subscribe(svg => this._setSvgElement(svg), (err) => {\n const errorMessage = `Error retrieving icon ${namespace}:${iconName}! ${err.message}`;\n this._errorHandler.handleError(new Error(errorMessage));\n });\n }\n }\n}\nMatIcon.ɵfac = function MatIcon_Factory(t) { return new (t || MatIcon)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(MatIconRegistry), ɵngcc0.ɵɵinjectAttribute('aria-hidden'), ɵngcc0.ɵɵdirectiveInject(MAT_ICON_LOCATION), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ErrorHandler)); };\nMatIcon.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatIcon, selectors: [[\"mat-icon\"]], hostAttrs: [\"role\", \"img\", 1, \"mat-icon\", \"notranslate\"], hostVars: 7, hostBindings: function MatIcon_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"data-mat-icon-type\", ctx._usingFontIcon() ? \"font\" : \"svg\")(\"data-mat-icon-name\", ctx._svgName || ctx.fontIcon)(\"data-mat-icon-namespace\", ctx._svgNamespace || ctx.fontSet);\n ɵngcc0.ɵɵclassProp(\"mat-icon-inline\", ctx.inline)(\"mat-icon-no-color\", ctx.color !== \"primary\" && ctx.color !== \"accent\" && ctx.color !== \"warn\");\n } }, inputs: { color: \"color\", inline: \"inline\", svgIcon: \"svgIcon\", fontSet: \"fontSet\", fontIcon: \"fontIcon\" }, exportAs: [\"matIcon\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function MatIcon_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, styles: [\".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatIcon.ctorParameters = () => [\n { type: ElementRef },\n { type: MatIconRegistry },\n { type: String, decorators: [{ type: Attribute, args: ['aria-hidden',] }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_ICON_LOCATION,] }] },\n { type: ErrorHandler }\n];\nMatIcon.propDecorators = {\n inline: [{ type: Input }],\n svgIcon: [{ type: Input }],\n fontSet: [{ type: Input }],\n fontIcon: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatIcon, [{\n type: Component,\n args: [{ template: '<ng-content></ng-content>', selector: 'mat-icon', exportAs: 'matIcon', inputs: ['color'], host: {\n 'role': 'img',\n 'class': 'mat-icon notranslate',\n '[attr.data-mat-icon-type]': '_usingFontIcon() ? \"font\" : \"svg\"',\n '[attr.data-mat-icon-name]': '_svgName || fontIcon',\n '[attr.data-mat-icon-namespace]': '_svgNamespace || fontSet',\n '[class.mat-icon-inline]': 'inline',\n '[class.mat-icon-no-color]': 'color !== \"primary\" && color !== \"accent\" && color !== \"warn\"'\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\\n\"] }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: MatIconRegistry }, { type: String, decorators: [{\n type: Attribute,\n args: ['aria-hidden']\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_ICON_LOCATION]\n }] }, { type: ɵngcc0.ErrorHandler }]; }, { inline: [{\n type: Input\n }], svgIcon: [{\n type: Input\n }], fontSet: [{\n type: Input\n }], fontIcon: [{\n type: Input\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 */\nclass MatIconModule {\n}\nMatIconModule.ɵfac = function MatIconModule_Factory(t) { return new (t || MatIconModule)(); };\nMatIconModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatIconModule });\nMatIconModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [MatCommonModule, MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatIconModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: [MatIcon, MatCommonModule],\n declarations: [MatIcon]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatIconModule, { declarations: function () { return [MatIcon]; }, imports: function () { return [MatCommonModule]; }, exports: function () { return [MatIcon, MatCommonModule]; } }); })();\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\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ICON_REGISTRY_PROVIDER, ICON_REGISTRY_PROVIDER_FACTORY, MAT_ICON_LOCATION, MAT_ICON_LOCATION_FACTORY, MatIcon, MatIconModule, MatIconRegistry, getMatIconFailedToSanitizeLiteralError, getMatIconFailedToSanitizeUrlError, getMatIconNameNotFoundError, getMatIconNoHttpProviderError, ɵ0 };\n\n"],"mappings":"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"},"metadata":{},"sourceType":"module"} |