@angular/material
Version:
Angular Material
1 lines • 26.9 kB
Source Map (JSON)
{"version":3,"file":"icon.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/icon/icon.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/icon/icon-module.ts"],"sourcesContent":["/**\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.dev/license\n */\n\nimport {\n AfterViewChecked,\n booleanAttribute,\n Component,\n ElementRef,\n ErrorHandler,\n inject,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n HostAttributeToken,\n DOCUMENT,\n} from '@angular/core';\nimport {ThemePalette} from '../core';\nimport {Subscription} from 'rxjs';\nimport {take} from 'rxjs/operators';\n\nimport {MatIconRegistry} from './icon-registry';\n\n/** Default options for `mat-icon`. */\nexport interface MatIconDefaultOptions {\n /**\n * Theme color of the icon. This API is supported in M2 themes only, it\n * has no effect in M3 themes. For color customization in M3, see https://material.angular.dev/components/icon/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n */\n color?: ThemePalette;\n /** Font set that the icon is a part of. */\n fontSet?: string;\n}\n\n/** Injection token to be used to override the default options for `mat-icon`. */\nexport const MAT_ICON_DEFAULT_OPTIONS = new InjectionToken<MatIconDefaultOptions>(\n 'MAT_ICON_DEFAULT_OPTIONS',\n);\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: () => {\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/**\n * Stubbed out location for `MatIcon`.\n * @docs-private\n */\nexport interface MatIconLocation {\n getPathname: () => string;\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 `fontIcon` attribute or the\n * content of the `<mat-icon>` component. If you register a custom font class, don't forget to also\n * include the special class `mat-ligature-font`. It is recommended to use the attribute alternative\n * to prevent the ligature text to be selectable and to appear in search engine results.\n * 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 fontIcon=\"home\"></mat-icon>\n * <mat-icon>home</mat-icon>\n * <mat-icon fontSet=\"myfont\" fontIcon=\"sun\"></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://fontawesome-v4.github.io/examples/\n * Example:\n * `<mat-icon fontSet=\"fa\" fontIcon=\"alarm\"></mat-icon>`\n */\n@Component({\n template: '<ng-content></ng-content>',\n selector: 'mat-icon',\n exportAs: 'matIcon',\n styleUrl: 'icon.css',\n host: {\n 'role': 'img',\n 'class': 'mat-icon notranslate',\n '[class]': 'color ? \"mat-\" + color : \"\"',\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 '[attr.fontIcon]': '_usingFontIcon() ? fontIcon : null',\n '[class.mat-icon-inline]': 'inline',\n '[class.mat-icon-no-color]': 'color !== \"primary\" && color !== \"accent\" && color !== \"warn\"',\n },\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatIcon implements OnInit, AfterViewChecked, OnDestroy {\n readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _iconRegistry = inject(MatIconRegistry);\n private _location = inject<MatIconLocation>(MAT_ICON_LOCATION);\n private readonly _errorHandler = inject(ErrorHandler);\n private _defaultColor!: ThemePalette;\n\n /**\n * Theme color of the icon. This API is supported in M2 themes only, it\n * has no effect in M3 themes. For color customization in M3, see https://material.angular.dev/components/icon/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n */\n @Input()\n get color() {\n return this._color || this._defaultColor;\n }\n set color(value: string | null | undefined) {\n this._color = value;\n }\n private _color: string | null | undefined;\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({transform: booleanAttribute})\n inline: boolean = false;\n\n /** Name of the icon in the SVG icon set. */\n @Input()\n get svgIcon(): string {\n return this._svgIcon;\n }\n set svgIcon(value: string) {\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 private _svgIcon!: string;\n\n /** Font set that the icon is a part of. */\n @Input()\n get fontSet(): string {\n return this._fontSet;\n }\n set fontSet(value: string) {\n const newValue = this._cleanupFontValue(value);\n\n if (newValue !== this._fontSet) {\n this._fontSet = newValue;\n this._updateFontIconClasses();\n }\n }\n private _fontSet!: string;\n\n /** Name of an icon within a font set. */\n @Input()\n get fontIcon(): string {\n return this._fontIcon;\n }\n set fontIcon(value: string) {\n const newValue = this._cleanupFontValue(value);\n\n if (newValue !== this._fontIcon) {\n this._fontIcon = newValue;\n this._updateFontIconClasses();\n }\n }\n private _fontIcon!: string;\n\n private _previousFontSetClass: string[] = [];\n private _previousFontIconClass!: string;\n\n _svgName: string | null = null;\n _svgNamespace: string | null = null;\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 /** Subscription to the current in-progress SVG icon request. */\n private _currentIconFetch = Subscription.EMPTY;\n\n constructor() {\n const ariaHidden = inject(new HostAttributeToken('aria-hidden'), {optional: true});\n const defaults = inject<MatIconDefaultOptions>(MAT_ICON_DEFAULT_OPTIONS, {optional: true});\n\n if (defaults) {\n if (defaults.color) {\n this.color = this._defaultColor = defaults.color;\n }\n\n if (defaults.fontSet) {\n this.fontSet = defaults.fontSet;\n }\n }\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 this._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:\n return ['', parts[0]]; // Use default namespace.\n case 2:\n return <[string, string]>parts;\n default:\n throw Error(`Invalid icon name: \"${iconName}\"`); // 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\n ngAfterViewChecked() {\n const cachedElements = this._elementsWithExternalReferences;\n\n if (cachedElements && 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 this._currentIconFetch.unsubscribe();\n\n if (this._elementsWithExternalReferences) {\n this._elementsWithExternalReferences.clear();\n }\n }\n\n _usingFontIcon(): boolean {\n return !this.svgIcon;\n }\n\n private _setSvgElement(svg: SVGElement) {\n this._clearSvgElement();\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\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 child.remove();\n }\n }\n }\n\n private _updateFontIconClasses() {\n if (!this._usingFontIcon()) {\n return;\n }\n\n const elem: HTMLElement = this._elementRef.nativeElement;\n const fontSetClasses = (\n this.fontSet\n ? this._iconRegistry.classNameForFontAlias(this.fontSet).split(/ +/)\n : this._iconRegistry.getDefaultFontSetClass()\n ).filter(className => className.length > 0);\n\n this._previousFontSetClass.forEach(className => elem.classList.remove(className));\n fontSetClasses.forEach(className => elem.classList.add(className));\n this._previousFontSetClass = fontSetClasses;\n\n if (\n this.fontIcon !== this._previousFontIconClass &&\n !fontSetClasses.includes('mat-ligature-font')\n ) {\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 /** Sets a new SVG icon with a particular name. */\n private _updateSvgIcon(rawName: string | undefined) {\n this._svgNamespace = null;\n this._svgName = null;\n this._currentIconFetch.unsubscribe();\n\n if (rawName) {\n const [namespace, iconName] = this._splitIconName(rawName);\n\n if (namespace) {\n this._svgNamespace = namespace;\n }\n\n if (iconName) {\n this._svgName = iconName;\n }\n\n this._currentIconFetch = this._iconRegistry\n .getNamedSvgIcon(iconName, namespace)\n .pipe(take(1))\n .subscribe(\n svg => this._setSvgElement(svg),\n (err: Error) => {\n const errorMessage = `Error retrieving icon ${namespace}:${iconName}! ${err.message}`;\n this._errorHandler.handleError(new Error(errorMessage));\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.dev/license\n */\n\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {NgModule} from '@angular/core';\nimport {MatIcon} from './icon';\n\n@NgModule({\n imports: [MatIcon],\n exports: [MatIcon, BidiModule],\n})\nexport class MatIconModule {}\n"],"names":[],"mappings":"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"}