import { Injectable } from '@angular/core' import { MatIconRegistry } from '@angular/material/icon' import { DomSanitizer } from '@angular/platform-browser' import { mdiAccount, mdiArchive, mdiBackspace, mdiBookOpenPageVariant, mdiCancel, mdiChartBar, mdiChartLine, mdiCheck, mdiCheckboxBlankOutline, mdiCheckboxMarked, mdiChevronDown, mdiChevronLeft, mdiChevronRight, mdiChevronUp, mdiClose, mdiCodeArray, mdiCog, mdiCommentText, mdiConsole, mdiContentCopy, mdiContentSave, mdiDelete, mdiDeleteForever, mdiDeleteSweep, mdiDns, mdiDownload, mdiEye, mdiEyeOff, mdiFileDocumentOutline, mdiFileTree, mdiFingerprint, mdiFormatLineSpacing, mdiGraph, mdiHeart, mdiHeartPulse, mdiImage, mdiInformation, mdiLogin, mdiLogout, mdiMagnify, mdiMinus, mdiNoteText, mdiPalette, mdiPencil, mdiPlus, mdiPlusBox, mdiPound, mdiPower, mdiRefresh, mdiSkipNext, mdiSkipPrevious, mdiSwapVertical, mdiTimer, mdiTimerSand, mdiUndo, mdiUnfoldLessHorizontal, mdiUnfoldMoreHorizontal, mdiUpload, mdiWrap, } from '@mdi/js' // Map Angular Material icon names to @mdi/js SVG paths (tree-shakeable) const ICON_MAP: Record = { 'account_tree': mdiFileTree, 'add': mdiPlus, 'add_box': mdiPlusBox, 'analytics': mdiChartBar, 'archive': mdiArchive, 'auto_graph': mdiGraph, 'backspace': mdiBackspace, 'bar_chart': mdiChartBar, 'cancel': mdiCancel, 'check_box': mdiCheckboxMarked, 'check_box_outline_blank': mdiCheckboxBlankOutline, 'chevron_right': mdiChevronRight, 'close': mdiClose, 'color_lens': mdiPalette, 'content_copy': mdiContentCopy, 'data_array': mdiCodeArray, 'delete': mdiDelete, 'delete_forever': mdiDeleteForever, 'delete_sweep': mdiDeleteSweep, 'description': mdiFileDocumentOutline, 'difference': mdiSwapVertical, 'done': mdiCheck, 'download': mdiDownload, 'edit': mdiPencil, 'expand_more': mdiChevronDown, 'favorite': mdiHeart, 'file_download': mdiDownload, 'file_upload': mdiUpload, 'fingerprint': mdiFingerprint, 'format_line_spacing': mdiFormatLineSpacing, 'hourglass_empty': mdiTimerSand, 'image': mdiImage, 'info': mdiInformation, 'keyboard_arrow_down': mdiChevronDown, 'keyboard_arrow_left': mdiChevronLeft, 'keyboard_arrow_right': mdiChevronRight, 'keyboard_arrow_up': mdiChevronUp, 'login': mdiLogin, 'logout': mdiLogout, 'menu_book': mdiBookOpenPageVariant, 'mode_comment': mdiCommentText, 'monitor_heart': mdiHeartPulse, 'notes': mdiNoteText, 'numbers': mdiPound, 'person': mdiAccount, 'power': mdiPower, 'refresh': mdiRefresh, 'remove': mdiMinus, 'save': mdiContentSave, 'search': mdiMagnify, 'settings': mdiCog, 'show_chart': mdiChartLine, 'skip_next': mdiSkipNext, 'skip_previous': mdiSkipPrevious, 'storage': mdiDns, 'terminal': mdiConsole, 'timer': mdiTimer, 'undo': mdiUndo, 'unfold_less': mdiUnfoldLessHorizontal, 'unfold_more': mdiUnfoldMoreHorizontal, 'upload': mdiUpload, 'visibility': mdiEye, 'visibility_off': mdiEyeOff, 'wrap_text': mdiWrap, } @Injectable({ providedIn: 'root' }) export class IconRegistryService { constructor( private iconRegistry: MatIconRegistry, private sanitizer: DomSanitizer, ) {} registerAll(): void { for (const [name, path] of Object.entries(ICON_MAP)) { const svg = `` this.iconRegistry.addSvgIconLiteral( name, this.sanitizer.bypassSecurityTrustHtml(svg), ) } } }