{"version":3,"file":"shival99-z-ui-components-z-icon.mjs","sources":["../../../../libs/core-ui/components/z-icon/z-animated-icons.ts","../../../../libs/core-ui/components/z-icon/z-icon-cache.ts","../../../../libs/core-ui/components/z-icon/z-icon.variants.ts","../../../../libs/core-ui/components/z-icon/z-icon.component.ts","../../../../libs/core-ui/components/z-icon/z-icon.component.html","../../../../libs/core-ui/components/z-icon/z-icons.ts","../../../../libs/core-ui/components/z-icon/z-icon-loader.provider.ts","../../../../libs/core-ui/components/z-icon/shival99-z-ui-components-z-icon.ts"],"sourcesContent":["import { type Type } from '@angular/core';\nimport * as animatedIcons from 'ng-animated-icons';\n\ntype ZAnimatedIconExport = Extract<keyof typeof animatedIcons, `${string}Icon`>;\ntype ZBrokenAnimatedIconExport = 'AudioLinesIcon';\ntype ZSafeAnimatedIconExport = Exclude<ZAnimatedIconExport, ZBrokenAnimatedIconExport>;\n\ntype ZStripIconSuffix<T extends string> = T extends `${infer Name}Icon` ? Name : T;\n\ntype ZKebabCase<T extends string, Previous extends string = ''> = T extends `${infer Head}${infer Tail}`\n  ? Tail extends Uncapitalize<Tail>\n    ? Head extends `${number}`\n      ? Previous extends '' | '-' | `${number}`\n        ? `${Head}${ZKebabCase<Tail, Head>}`\n        : `-${Head}${ZKebabCase<Tail, Head>}`\n      : `${Lowercase<Head>}${ZKebabCase<Tail, Head>}`\n    : `${Lowercase<Head>}-${ZKebabCase<Tail, '-'>}`\n  : T;\n\ntype ZAnimatedIconName = ZKebabCase<ZStripIconSuffix<ZSafeAnimatedIconExport>>;\n\nexport type ZAnimatedIcon = ZAnimatedIconName;\n\nconst ANIMATED_ICONS = animatedIcons as unknown as Record<ZAnimatedIconExport, Type<unknown>>;\nconst BROKEN_ANIMATED_ICON_EXPORTS = new Set<ZAnimatedIconExport>(['AudioLinesIcon']);\n\nexport const Z_ANIMATED_ICONS = Object.fromEntries(\n  (\n    Object.entries(ANIMATED_ICONS).filter(\n      ([exportName]) =>\n        exportName.endsWith('Icon') && !BROKEN_ANIMATED_ICON_EXPORTS.has(exportName as ZAnimatedIconExport)\n    ) as [ZSafeAnimatedIconExport, Type<unknown>][]\n  ).map(([exportName, icon]) => [toKebabIconName(exportName), icon])\n) as Record<ZAnimatedIcon, Type<unknown>>;\n\nexport function getZAnimatedIconComponent(iconName: ZAnimatedIcon): Type<unknown> | null {\n  return Z_ANIMATED_ICONS[iconName] ?? null;\n}\n\nfunction toKebabIconName(exportName: string): ZAnimatedIcon {\n  const iconName = exportName.endsWith('Icon') ? exportName.slice(0, -4) : exportName;\n\n  return iconName\n    .replace(/([a-z])([0-9])/g, '$1-$2')\n    .replace(/([0-9])([A-Z])/g, '$1-$2')\n    .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n    .toLowerCase() as ZAnimatedIcon;\n}\n","import { isDevMode } from '@angular/core';\nimport { ZIndexDbService } from '@shival99/z-ui/services';\n\nexport const Z_ICON_CACHE_DB_NAME = 'ZIconCache';\nexport const Z_ICON_CACHE_STORE = 'zIcons';\n\n/**\n * Schema version for cached icon SVGs. Each entry is stored together with the\n * version it was produced under; on read, an entry whose version doesn't match\n * is treated as a miss and re-fetched. Bump this whenever the SVG we cache\n * changes shape (e.g. a new/updated normalizer) so stale entries — like the\n * pre-normalize brand logos that cached without their color — self-invalidate\n * without forcing users to clear storage.\n */\nexport const ZICON_CACHE_VERSION = 2;\n\ninterface ZIconCacheEntry {\n  v: number;\n  svg: string;\n}\n\nexport const zIconCacheDb = new ZIndexDbService({\n  dbName: Z_ICON_CACHE_DB_NAME,\n  version: 1,\n  stores: [{ name: Z_ICON_CACHE_STORE, encrypt: !isDevMode() }],\n  defaultStore: Z_ICON_CACHE_STORE,\n});\n\n/**\n * Reads a cached icon SVG, returning it only when stored under the current\n * schema version. Legacy plain-string entries and version mismatches read as a\n * miss so the caller re-fetches and rewrites them in the current shape.\n */\nexport async function readCachedIconSvg(name: string): Promise<string | null> {\n  const entry = await zIconCacheDb.get<ZIconCacheEntry | string>(name, { storeName: Z_ICON_CACHE_STORE });\n  if (entry && typeof entry === 'object' && entry.v === ZICON_CACHE_VERSION) {\n    return entry.svg;\n  }\n  return null;\n}\n\n/** Writes an icon SVG tagged with the current schema version. */\nexport function writeCachedIconSvg(name: string, svg: string): void {\n  const entry: ZIconCacheEntry = { v: ZICON_CACHE_VERSION, svg };\n  void zIconCacheDb.set(name, entry, { storeName: Z_ICON_CACHE_STORE });\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nconst zIconSizeVariants = Object.fromEntries(\n  Array.from({ length: 100 - 10 + 1 }, (_, index) => {\n    const size = String(10 + index);\n    return [size, `size-${size}`];\n  })\n);\n\nexport const zIconVariants = cva('', {\n  variants: {\n    zSize: zIconSizeVariants,\n  },\n  defaultVariants: {\n    zSize: '16',\n  },\n});\n\nexport type ZIconSize = `${number}`;\nexport type ZIconVariants = VariantProps<typeof zIconVariants>;\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  input,\n  signal,\n  type Type,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { NgIconComponent as NgIcon } from '@ng-icons/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { getZAnimatedIconComponent, type ZAnimatedIcon } from './z-animated-icons';\nimport { Z_ICON_CACHE_STORE, zIconCacheDb } from './z-icon-cache';\nimport { zIconVariants, type ZIconVariants } from './z-icon.variants';\nimport { type ZIcon } from './z-icons';\n\nexport type ZIconAnimationTrigger = 'manual' | 'hover' | 'focus' | 'interaction' | 'always';\n\n@Component({\n  selector: 'z-icon, [z-icon]',\n  imports: [NgIcon, NgComponentOutlet],\n  standalone: true,\n  templateUrl: './z-icon.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    '[class]': 'zClasses()',\n    '[style.width]': 'normalizedSize() + \"px\"',\n    '[style.height]': 'normalizedSize() + \"px\"',\n    '(mouseenter)': 'setHoverActive(true)',\n    '(mouseleave)': 'setHoverActive(false)',\n    '(focusin)': 'setFocusActive(true)',\n    '(focusout)': 'setFocusActive(false)',\n    '(touchstart)': 'setTouchActive(true)',\n    '(touchend)': 'setTouchActive(false)',\n  },\n})\nexport class ZIconComponent {\n  public readonly class = input<ClassValue>('');\n  public readonly zType = input<ZIcon>();\n  public readonly zAnimatedType = input<ZAnimatedIcon>();\n  public readonly zAnimate = input(false);\n  public readonly zAnimationTrigger = input<ZIconAnimationTrigger>('manual');\n  public readonly zSize = input<ZIconVariants['zSize']>('16');\n  public readonly zStrokeWidth = input<number>(2);\n  public readonly zSvg = input<string>('');\n  protected readonly resolvedSvg = signal('');\n  protected readonly isHoverActive = signal(false);\n  protected readonly isFocusActive = signal(false);\n  protected readonly isTouchActive = signal(false);\n  protected readonly normalizedSize = computed(() => {\n    const size = this.zSize();\n    if (size === null || size === undefined || size === '') {\n      return '16';\n    }\n\n    return String(size);\n  });\n\n  private readonly _svgFetchError = signal<string>('');\n\n  protected readonly zClasses = computed(() =>\n    zMergeClasses(\n      zIconVariants({ zSize: this.zSize() }),\n      this.class(),\n      this.zStrokeWidth() === 0 ? 'stroke-none' : '',\n      'inline-flex shrink-0'\n    )\n  );\n\n  protected readonly animatedIcon = computed<Type<unknown> | null>(() => {\n    const animatedType = this.zAnimatedType();\n    if (!animatedType) {\n      return null;\n    }\n\n    return getZAnimatedIconComponent(animatedType);\n  });\n\n  protected readonly animatedIconInputs = computed<Record<string, unknown>>(() => ({\n    animate: this.shouldAnimate(),\n    color: 'currentColor',\n    size: Number(this.normalizedSize()),\n    strokeWidth: this.zStrokeWidth(),\n  }));\n\n  protected readonly shouldAnimate = computed(() => {\n    const trigger = this.zAnimationTrigger();\n    if (trigger === 'always' || this.zAnimate()) {\n      return true;\n    }\n\n    if (trigger === 'hover') {\n      return this.isHoverActive() || this.isTouchActive();\n    }\n\n    if (trigger === 'focus') {\n      return this.isFocusActive();\n    }\n\n    if (trigger === 'interaction') {\n      return this.isHoverActive() || this.isFocusActive() || this.isTouchActive();\n    }\n\n    return false;\n  });\n\n  constructor() {\n    effect(onCleanup => {\n      const svgInput = this.zSvg().trim();\n      if (!svgInput) {\n        this.resolvedSvg.set('');\n        this._svgFetchError.set('');\n        return;\n      }\n\n      if (this._isRawSvg(svgInput)) {\n        this.resolvedSvg.set(this._normalizeCustomSvg(svgInput));\n        this._svgFetchError.set('');\n        return;\n      }\n\n      if (!this._isSvgPath(svgInput)) {\n        this.resolvedSvg.set('');\n        this._svgFetchError.set('Unsupported SVG input format.');\n        return;\n      }\n\n      const controller = new AbortController();\n      onCleanup(() => controller.abort());\n\n      const cacheKey = `zsvg:path:${svgInput}`;\n      void zIconCacheDb\n        .get<string>(cacheKey, { storeName: Z_ICON_CACHE_STORE })\n        .then(cachedSvg => {\n          if (controller.signal.aborted) {\n            return null;\n          }\n          if (cachedSvg && this._isRawSvg(cachedSvg.trim())) {\n            this.resolvedSvg.set(this._normalizeCustomSvg(cachedSvg));\n            this._svgFetchError.set('');\n            return null;\n          }\n\n          return fetch(svgInput, { signal: controller.signal }).then(response => {\n            if (!response.ok) {\n              throw new Error(`Failed to fetch SVG from \"${svgInput}\"`);\n            }\n            return response.text();\n          });\n        })\n        .then(svgContent => {\n          if (controller.signal.aborted || !svgContent) {\n            return;\n          }\n\n          if (!this._isRawSvg(svgContent.trim())) {\n            throw new Error(`Invalid SVG content loaded from \"${svgInput}\"`);\n          }\n\n          const normalizedSvg = this._normalizeCustomSvg(svgContent);\n          this.resolvedSvg.set(normalizedSvg);\n          this._svgFetchError.set('');\n          void zIconCacheDb.set(cacheKey, normalizedSvg, { storeName: Z_ICON_CACHE_STORE }).catch(console.error);\n        })\n        .catch(error => {\n          if (controller.signal.aborted) {\n            return;\n          }\n          console.error('[z-icon] Failed to load zSvg path:', error);\n          this.resolvedSvg.set('');\n          this._svgFetchError.set('Unable to load SVG path.');\n        });\n    });\n  }\n\n  private _isRawSvg(value: string): boolean {\n    return value.startsWith('<svg');\n  }\n\n  protected setHoverActive(isActive: boolean): void {\n    this.isHoverActive.set(isActive);\n  }\n\n  protected setFocusActive(isActive: boolean): void {\n    this.isFocusActive.set(isActive);\n  }\n\n  protected setTouchActive(isActive: boolean): void {\n    this.isTouchActive.set(isActive);\n  }\n\n  private _isSvgPath(value: string): boolean {\n    return value.endsWith('.svg') || value.includes('/');\n  }\n\n  private _normalizeCustomSvg(svg: string): string {\n    try {\n      const parser = new DOMParser();\n      const doc = parser.parseFromString(svg, 'image/svg+xml');\n      const svgEl = doc.documentElement;\n      if (svgEl.tagName.toLowerCase() !== 'svg') {\n        return svg;\n      }\n\n      const width = svgEl.getAttribute('width');\n      const height = svgEl.getAttribute('height');\n      if (\n        !svgEl.getAttribute('viewBox') &&\n        width &&\n        height &&\n        !Number.isNaN(Number(width)) &&\n        !Number.isNaN(Number(height))\n      ) {\n        svgEl.setAttribute('viewBox', `0 0 ${width} ${height}`);\n      }\n\n      svgEl.removeAttribute('width');\n      svgEl.removeAttribute('height');\n\n      const allNodes = [svgEl, ...Array.from(svgEl.querySelectorAll('*'))];\n      allNodes.forEach(node => {\n        const fill = node.getAttribute('fill');\n        if (fill && fill !== 'none' && fill !== 'currentColor') {\n          node.setAttribute('fill', 'currentColor');\n        }\n\n        const stroke = node.getAttribute('stroke');\n        if (stroke && stroke !== 'none' && stroke !== 'currentColor') {\n          node.setAttribute('stroke', 'currentColor');\n        }\n\n        if (node.hasAttribute('stroke-width')) {\n          node.removeAttribute('stroke-width');\n          const currentStyle = node.getAttribute('style') ?? '';\n          const normalizedStyle = currentStyle.trim();\n          const strokeWidthStyle = 'stroke-width: var(--ng-icon__stroke-width, 2)';\n          node.setAttribute('style', normalizedStyle ? `${normalizedStyle}; ${strokeWidthStyle}` : strokeWidthStyle);\n        }\n      });\n\n      return svgEl.outerHTML;\n    } catch {\n      return svg;\n    }\n  }\n}\n","@if (animatedIcon()) {\n  <ng-container [ngComponentOutlet]=\"animatedIcon()\" [ngComponentOutletInputs]=\"animatedIconInputs()\" />\n} @else if (resolvedSvg()) {\n  <ng-icon [svg]=\"resolvedSvg()\" [size]=\"normalizedSize()\" [strokeWidth]=\"zStrokeWidth()\" />\n} @else if (!zSvg()) {\n  <ng-icon [name]=\"zType()\" [size]=\"normalizedSize()\" [strokeWidth]=\"zStrokeWidth()\" />\n}\n","import type * as hugeIcons from '@hugeicons/core-free-icons';\nimport { type IconType } from '@ng-icons/core';\nimport type * as saxBoldIcons from '@ng-icons/iconsax/bold';\nimport type * as saxOutlineIcons from '@ng-icons/iconsax/outline';\nimport type * as lucideIcons from '@ng-icons/lucide';\nimport type * as phosphorBoldIcons from '@ng-icons/phosphor-icons/bold';\nimport type * as phosphorDuotoneIcons from '@ng-icons/phosphor-icons/duotone';\nimport type * as phosphorFillIcons from '@ng-icons/phosphor-icons/fill';\nimport type * as phosphorLightIcons from '@ng-icons/phosphor-icons/light';\nimport type * as phosphorRegularIcons from '@ng-icons/phosphor-icons/regular';\nimport type * as phosphorThinIcons from '@ng-icons/phosphor-icons/thin';\n\ntype ZLucideIcon = Extract<keyof typeof lucideIcons, `lucide${string}`>;\ntype ZSaxIcon = Extract<keyof typeof saxBoldIcons | keyof typeof saxOutlineIcons, `sax${string}`>;\ntype ZPhosphorIcon = Extract<\n  | keyof typeof phosphorRegularIcons\n  | keyof typeof phosphorBoldIcons\n  | keyof typeof phosphorFillIcons\n  | keyof typeof phosphorLightIcons\n  | keyof typeof phosphorThinIcons\n  | keyof typeof phosphorDuotoneIcons,\n  `phosphor${string}`\n>;\n\n/**\n * HugeIcons exports are PascalCase with an `Icon` suffix (e.g. `HeartIcon`,\n * `Home01Icon`). We re-expose them with a `huge` prefix to stay consistent\n * with the other families (e.g. `hugeHeart`, `hugeHome01`).\n */\ntype ZHugeIcon = {\n  [K in keyof typeof hugeIcons as K extends `${infer Name}Icon` ? `huge${Name}` : never]: true;\n} extends infer M\n  ? Extract<keyof M, `huge${string}`>\n  : never;\n\n/**\n * Brand/logo icons served at runtime from theSVG (thesvg.org). These are\n * loaded dynamically by slug, so unlike the other families there is no\n * generated union to validate against — any `brand`-prefixed name is accepted.\n * The PascalCase part maps to the CDN slug, and an optional Color/Light/Dark/\n * Wordmark suffix selects the variant (default `mono`, which uses currentColor).\n * Examples: `brandGithub`, `brandSlackWordmark`, `brandFigmaColor`.\n */\nexport type ZBrandIcon = `brand${string}`;\n\nexport const Z_ICONS = {} as const satisfies Record<string, IconType>;\n\nexport type ZIcon = ZLucideIcon | ZSaxIcon | ZPhosphorIcon | ZHugeIcon | ZBrandIcon;\n","import { HttpClient } from '@angular/common/http';\nimport { type EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { provideNgIconLoader, withCaching } from '@ng-icons/core';\nimport { lucideLoader, lucideLoader2, lucideLoaderCircle, lucideLoaderPinwheel } from '@ng-icons/lucide';\nimport { catchError, from, map, type Observable, of, switchMap, tap, timeout } from 'rxjs';\nimport { readCachedIconSvg, writeCachedIconSvg } from './z-icon-cache';\nimport { Z_ICONS } from './z-icons';\n\n/**\n * Normalizes Sax SVG to use currentColor and CSS variable for stroke-width.\n * This allows the icon to inherit color and strokeWidth from ng-icon props.\n */\nfunction normalizeSaxSvg(svg: string): string {\n  const cssVar = 'style=\"stroke-width: var(--ng-icon__stroke-width, 2)\"';\n  const normalized = svg.replace(/fill=\"#292D32\"/gi, 'fill=\"currentColor\"');\n  return normalized.replace(/stroke-width=\"[^\"]*\"/gi, cssVar);\n}\n\n/**\n * Normalizes Lucide SVG to use CSS variable for stroke-width.\n * This allows ng-icon strokeWidth prop to work correctly.\n * Replaces hardcoded stroke-width with var(--ng-icon__stroke-width, 2).\n */\nfunction normalizeLucideSvg(svg: string): string {\n  const cssVar = 'style=\"stroke-width: var(--ng-icon__stroke-width, 2)\"';\n  return svg.replace(/stroke-width=\"[^\"]*\"/gi, cssVar);\n}\n\n/**\n * Phosphor SVGs already ship with fill=\"currentColor\" and no stroke-width,\n * so no normalization is required. Kept as an explicit passthrough for parity\n * with the other icon families.\n */\nfunction normalizePhosphorSvg(svg: string): string {\n  return svg;\n}\n\n/**\n * theSVG color logos (default/light/dark/wordmark) often declare their brand\n * color as a `fill` on the root `<svg>` element, letting the child paths\n * inherit it. ng-icon, however, sets `fill=\"currentColor\"` on the rendered\n * `<svg>`, which clobbers that root fill and turns the logo the host text color\n * (e.g. the blue Zalo logo rendered black).\n *\n * To keep the brand color we lift the root fill onto the icon's contents:\n * everything inside `<svg …>` is wrapped in a `<g fill=\"…\">`, which ng-icon's\n * root-level currentColor can no longer override. Mono icons declare no root\n * fill, so they pass through untouched and keep inheriting currentColor.\n */\nfunction normalizeBrandSvg(svg: string): string {\n  const rootMatch = svg.match(/<svg\\b([^>]*)>/i);\n  if (!rootMatch) {\n    return svg;\n  }\n\n  const rootAttrs = rootMatch[1];\n  const fillMatch = rootAttrs.match(/\\sfill\\s*=\\s*\"([^\"]*)\"/i);\n  const fill = fillMatch?.[1];\n  if (!fill || fill === 'none' || fill === 'currentColor') {\n    return svg;\n  }\n\n  const openTag = rootMatch[0];\n  const openTagIndex = rootMatch.index ?? svg.indexOf(openTag);\n  const strippedOpenTag = openTag.replace(/\\sfill\\s*=\\s*\"[^\"]*\"/i, '');\n  const closeIndex = svg.lastIndexOf('</svg>');\n  if (closeIndex === -1) {\n    return svg;\n  }\n\n  const inner = svg.slice(openTagIndex + openTag.length, closeIndex);\n  return `${strippedOpenTag}<g fill=\"${fill}\">${inner}</g></svg>`;\n}\n\n/**\n * HugeIcons ships each icon as an ESM module exporting a path-array\n * (e.g. `const HeartIcon = [[\"path\", { d: \"...\", stroke: \"currentColor\", strokeWidth: \"1.5\" }]]`),\n * not a ready-made SVG. This converts that module source into an `<svg>` string\n * suitable for ng-icon, mapping camelCase attributes to kebab-case and wiring\n * stroke-width to the ng-icon CSS variable.\n */\nfunction normalizeHugeIconModule(moduleSource: string): string {\n  const elements: string[] = [];\n  const elementRegex = /\\[\\s*\"([a-zA-Z]+)\"\\s*,\\s*\\{([^}]*)\\}\\s*\\]/g;\n  let match: RegExpExecArray | null;\n\n  while ((match = elementRegex.exec(moduleSource)) !== null) {\n    const tag = match[1];\n    const attrsBody = match[2];\n    const attrs: string[] = [];\n    const attrRegex = /([a-zA-Z]+)\\s*:\\s*\"([^\"]*)\"/g;\n    let attrMatch: RegExpExecArray | null;\n\n    while ((attrMatch = attrRegex.exec(attrsBody)) !== null) {\n      const rawKey = attrMatch[1];\n      const value = attrMatch[2];\n      if (rawKey === 'key') {\n        continue;\n      }\n      if (rawKey === 'strokeWidth') {\n        attrs.push(`style=\"stroke-width:var(--ng-icon__stroke-width, ${value})\"`);\n        continue;\n      }\n      const attrName = rawKey.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n      attrs.push(`${attrName}=\"${value}\"`);\n    }\n\n    elements.push(`<${tag} ${attrs.join(' ')}></${tag}>`);\n  }\n\n  if (elements.length === 0) {\n    return '';\n  }\n\n  return `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">${elements.join('')}</svg>`;\n}\n\nfunction getFallbackIcon(name: string): string {\n  const criticalIcon = CRITICAL_ICON_FALLBACKS[name];\n  if (criticalIcon) {\n    return criticalIcon;\n  }\n\n  const icon = Z_ICONS[name as keyof typeof Z_ICONS];\n  if (icon) {\n    // console.warn(`[ZIcon] Using bundled fallback for \"${name}\"`);\n    return icon;\n  }\n  return '';\n}\n\n/**\n * Converts ng-icons icon name to Lucide CDN format.\n * Examples:\n * - lucideArrowLeft -> arrow-left\n * - lucideAlertCircle -> alert-circle\n * - lucideTrash2 -> trash-2\n * - lucideGrid3x3 -> grid-3-x-3\n */\nfunction convertLucideIconName(name: string): string {\n  return name\n    .replace(/^lucide/, '')\n    .replace(/([A-Z])/g, '-$1')\n    .replace(/(\\d+)/g, '-$1')\n    .replace(/(\\d)([a-z])/g, '$1-$2')\n    .toLowerCase()\n    .replace(/^-/, '')\n    .replace(/--+/g, '-');\n}\n\n/**\n * Converts ng-icons Sax icon name to CDN format.\n * Examples:\n * - saxCloudChangeBold -> bold/cloud-change\n * - saxPauseBold -> bold/pause\n * - saxRefreshBold -> bold/refresh\n * - saxHomeOutline -> outline/home\n * - saxUserLinear -> linear/user\n */\nfunction convertIconSaxIconName(name: string): { style: string; iconName: string } | null {\n  let iconPart = name.replace(/^sax/, '');\n  // Extract style suffix (Bold, Outline, Linear, Bulk, Broken, TwoTone)\n  const styleMatch = iconPart.match(/(Bold|Outline|Linear|Bulk|Broken|TwoTone)$/i);\n  if (!styleMatch) {\n    return null;\n  }\n\n  const style = styleMatch[1].toLowerCase();\n  const styleFolder = style === 'twotone' ? 'twotone' : style;\n  iconPart = iconPart.replace(/(Bold|Outline|Linear|Bulk|Broken|TwoTone)$/i, '');\n  const iconName = iconPart\n    .replace(/([A-Z])/g, '-$1')\n    .replace(/(\\d+)/g, '-$1')\n    .toLowerCase()\n    .replace(/^-/, '')\n    .replace(/--+/g, '-');\n\n  return { style: styleFolder, iconName };\n}\n\n/**\n * Converts ng-icons Phosphor icon name to CDN format.\n * Phosphor weights map to folders, and every weight except \"regular\" carries a\n * file-name suffix (e.g. heart-bold.svg), while regular is just heart.svg.\n * Examples:\n * - phosphorHeart -> regular/heart\n * - phosphorHeartBold -> bold/heart-bold\n * - phosphorHeartFill -> fill/heart-fill\n * - phosphorHeartDuotone -> duotone/heart-duotone\n * - phosphorAddressBookTabsLight -> light/address-book-tabs-light\n */\nfunction convertPhosphorIconName(name: string): { weight: string; iconName: string } {\n  let iconPart = name.replace(/^phosphor/, '');\n  const weightMatch = iconPart.match(/(Bold|Fill|Light|Thin|Duotone)$/);\n  const weight = weightMatch ? weightMatch[1].toLowerCase() : 'regular';\n  if (weightMatch) {\n    iconPart = iconPart.replace(/(Bold|Fill|Light|Thin|Duotone)$/, '');\n  }\n\n  const kebab = iconPart\n    .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n    .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n    .toLowerCase()\n    .replace(/^-/, '')\n    .replace(/--+/g, '-');\n\n  const iconName = weight === 'regular' ? kebab : `${kebab}-${weight}`;\n\n  return { weight, iconName };\n}\n\n/**\n * Converts ng-icons-style Huge icon name to the @hugeicons/core-free-icons\n * CDN module name. We expose icons with a `huge` prefix over the original\n * PascalCase export name, so we just strip the prefix and append `Icon`.\n * Examples:\n * - hugeHeart -> HeartIcon\n * - hugeHome01 -> Home01Icon\n * - hugeFirstBracketCircle -> FirstBracketCircleIcon\n */\nfunction convertHugeIconName(name: string): string {\n  return `${name.replace(/^huge/, '')}Icon`;\n}\n\n/**\n * Converts an ng-icons-style brand icon name into a theSVG CDN slug and an\n * ordered list of variants to try. Icons live at\n * `https://thesvg.org/icons/{slug}/{variant}.svg`.\n *\n * A trailing variant suffix (Default/Color/Light/Dark/Wordmark/Mono) pins that\n * exact variant. Without a suffix we serve the brand's full-color `default`\n * logo and fall back to `mono` (single-color, inherits currentColor) only for\n * the rare brand that ships no default asset. The remaining name is\n * lower-kebab-cased to form the slug.\n * Examples:\n * - brandGithub          -> { slug: 'github', variants: ['default', 'mono'] }\n * - brandZalo            -> { slug: 'zalo', variants: ['default', 'mono'] }  (renders the blue Zalo logo)\n * - brandGithubMono      -> { slug: 'github', variants: ['mono'] }\n * - brandSlackWordmark   -> { slug: 'slack', variants: ['wordmark'] }\n * - brandGithubActions   -> { slug: 'github-actions', variants: ['default', 'mono'] }\n */\nfunction convertBrandIconName(name: string): { slug: string; variants: string[] } {\n  let iconPart = name.replace(/^brand/, '');\n  const variantMatch = iconPart.match(/(Default|Color|Light|Dark|Wordmark|Mono)$/);\n  const variants = variantMatch ? [variantMatch[1].toLowerCase()] : ['default', 'mono'];\n  if (variantMatch) {\n    iconPart = iconPart.replace(/(Default|Color|Light|Dark|Wordmark|Mono)$/, '');\n  }\n\n  const slug = iconPart\n    .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n    .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n    .toLowerCase()\n    .replace(/^-/, '')\n    .replace(/--+/g, '-');\n\n  return { slug, variants };\n}\n\nconst LUCIDE_CDN_URL = 'https://cdn.jsdelivr.net/npm/lucide-static@latest/icons';\nconst SAX_CDN_URL = 'https://cdn.jsdelivr.net/gh/placetopay-org/iconsax-vue@main/src/Base';\nconst PHOSPHOR_CDN_URL = 'https://cdn.jsdelivr.net/npm/@phosphor-icons/core@latest/assets';\nconst HUGE_CDN_URL = 'https://cdn.jsdelivr.net/npm/@hugeicons/core-free-icons@4.2.1/dist/esm';\nconst BRAND_CDN_URL = 'https://thesvg.org/icons';\nconst ICON_CDN_TIMEOUT_MS = 2500;\nconst CRITICAL_ICON_FALLBACKS: Record<string, string> = {\n  lucideLoader,\n  lucideLoader2,\n  lucideLoaderCircle,\n  lucideLoaderPinwheel,\n};\n\n/**\n * Provides hybrid icon loading from CDN with fallback to bundled icons:\n * - Primary: Load icons from CDN (Lucide & Iconsax)\n * - Fallback: Use bundled icons from Z_ICONS if CDN fails\n *\n * @example\n * ```typescript\n * // app.config.ts\n * providers: [\n *   provideHttpClient(),\n *   provideZIconLoader(),\n * ]\n * ```\n */\nfunction loadWithCache(\n  name: string,\n  url: string,\n  http: HttpClient,\n  normalizer: (svg: string) => string\n): Observable<string> {\n  return from(readCachedIconSvg(name)).pipe(\n    switchMap(cached => {\n      if (cached) {\n        return of(cached);\n      }\n\n      return http.get(url, { responseType: 'text' }).pipe(\n        timeout(ICON_CDN_TIMEOUT_MS),\n        map(normalizer),\n        tap(svg => writeCachedIconSvg(name, svg)),\n        catchError(error => {\n          console.error(`[ZIcon] Failed to load \"${name}\" from ${url}`, error);\n          return of(getFallbackIcon(name));\n        })\n      );\n    }),\n    catchError(() => of(getFallbackIcon(name)))\n  );\n}\n\n/**\n * Loads a theSVG brand icon, trying each variant in order until one returns a\n * real SVG. theSVG serves a 404 HTML page for missing variants, so we both let\n * HTTP errors fall through to the next variant AND guard against a 200 that\n * isn't actually SVG markup. The first success is cached under the icon name.\n */\nfunction loadBrandWithCache(name: string, slug: string, variants: string[], http: HttpClient): Observable<string> {\n  const tryVariant = (index: number): Observable<string> => {\n    if (index >= variants.length) {\n      return of(getFallbackIcon(name));\n    }\n\n    const url = `${BRAND_CDN_URL}/${slug}/${variants[index]}.svg`;\n    return http.get(url, { responseType: 'text' }).pipe(\n      switchMap(svg => {\n        if (!svg.trimStart().startsWith('<svg')) {\n          return tryVariant(index + 1);\n        }\n        const normalized = normalizeBrandSvg(svg);\n        writeCachedIconSvg(name, normalized);\n        return of(normalized);\n      }),\n      catchError(() => tryVariant(index + 1))\n    );\n  };\n\n  return from(readCachedIconSvg(name)).pipe(\n    switchMap(cached => (cached ? of(cached) : tryVariant(0))),\n    catchError(() => of(getFallbackIcon(name)))\n  );\n}\n\nexport function provideZIconLoader(): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    provideNgIconLoader(name => {\n      const http = inject(HttpClient);\n      if (name.startsWith('sax')) {\n        const parsed = convertIconSaxIconName(name);\n        if (!parsed) {\n          console.warn(`[ZIcon] Invalid Sax icon name: \"${name}\"`);\n          return of(getFallbackIcon(name));\n        }\n\n        const url = `${SAX_CDN_URL}/${parsed.style}/${parsed.iconName}.svg`;\n        return loadWithCache(name, url, http, normalizeSaxSvg);\n      }\n\n      if (name.startsWith('lucide')) {\n        const iconName = convertLucideIconName(name);\n        const url = `${LUCIDE_CDN_URL}/${iconName}.svg`;\n        return loadWithCache(name, url, http, normalizeLucideSvg);\n      }\n\n      if (name.startsWith('phosphor')) {\n        const { weight, iconName } = convertPhosphorIconName(name);\n        const url = `${PHOSPHOR_CDN_URL}/${weight}/${iconName}.svg`;\n        return loadWithCache(name, url, http, normalizePhosphorSvg);\n      }\n\n      if (name.startsWith('huge')) {\n        const moduleName = convertHugeIconName(name);\n        const url = `${HUGE_CDN_URL}/${moduleName}.js`;\n        return loadWithCache(name, url, http, normalizeHugeIconModule);\n      }\n\n      if (name.startsWith('brand')) {\n        const { slug, variants } = convertBrandIconName(name);\n        return loadBrandWithCache(name, slug, variants, http);\n      }\n\n      // console.warn(`[ZIcon] Unknown icon: \"${name}\"`);\n      return of(getFallbackIcon(name));\n    }, withCaching()),\n  ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NgIcon"],"mappings":"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"}