{"version":3,"file":"ngx-com-components-icon.mjs","sources":["../../../projects/com/components/icon/icon.registry.ts","../../../projects/com/components/icon/icon.providers.ts","../../../projects/com/components/icon/icon.variants.ts","../../../projects/com/components/icon/icon.component.ts","../../../projects/com/components/icon/ngx-com-components-icon.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport type { ComIconData, ComIconMap } from './icon.types';\n\n/**\n * Singleton registry for icons used by `com-icon`.\n *\n * Stores generic `ComIconData` (SVG element tuples) rather than any\n * vendor-specific format. Use the Lucide adapter (`ngx-com/components/icon/lucide`)\n * or register raw SVG data directly via `provideComIcons`.\n */\n@Injectable({ providedIn: 'root' })\nexport class ComIconRegistry {\n  private readonly icons: ComIconMap = {};\n\n  /** Merges the given icons into the registry. */\n  register(icons: ComIconMap): void {\n    Object.assign(this.icons, icons);\n  }\n\n  /** Returns the icon data for the given PascalCase name, or `null` if not registered. */\n  get(name: string): ComIconData | null {\n    return this.icons[name] ?? null;\n  }\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport type { Provider } from '@angular/core';\nimport type { ComIconMap } from './icon.types';\nimport { ComIconRegistry } from './icon.registry';\n\n/**\n * Token injected by `ComIcon` to trigger icon registration factories.\n *\n * Each `provideComIcons()` call adds a `multi` provider whose factory\n * registers icons into the singleton `ComIconRegistry`. The token itself\n * is never read — its purpose is to force Angular's DI to run the factories.\n */\nexport const COM_ICON_REGISTRAR: InjectionToken<void[]> = new InjectionToken<void[]>('ComIconRegistrar');\n\n/**\n * Provides icons for use with `com-icon`.\n *\n * Accepts generic `ComIconData` (SVG element tuples). For Lucide icons,\n * use `provideComLucideIcons` from `ngx-com/components/icon/lucide` instead.\n *\n * Works at **all** injector levels: app root, lazy route, and component.\n * Icons are merged into the root-level `ComIconRegistry`, so multiple calls\n * accumulate rather than shadow.\n *\n * @example Root-level with raw SVG data\n * ```ts\n * import { provideComIcons } from 'ngx-com/components/icon';\n *\n * const myIcons = {\n *   Star: [['polygon', { points: '12 2 15.09 6.26 ...' }]],\n * };\n *\n * export const appConfig = {\n *   providers: [provideComIcons(myIcons)]\n * };\n * ```\n *\n * @example With Lucide adapter (recommended)\n * ```ts\n * import { provideComLucideIcons } from 'ngx-com/components/icon/lucide';\n * import { Star, Check } from 'lucide-angular';\n *\n * export const appConfig = {\n *   providers: [provideComLucideIcons({ Star, Check })]\n * };\n * ```\n */\nexport function provideComIcons(icons: ComIconMap): Provider {\n  return {\n    provide: COM_ICON_REGISTRAR,\n    multi: true,\n    useFactory: () => inject(ComIconRegistry).register(icons),\n  };\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport type IconColor = 'current' | 'primary' | 'accent' | 'warn' | 'success' | 'muted' | 'disabled';\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nexport const iconVariants: (props?: { color?: IconColor; size?: IconSize }) => string = cva(\n  'inline-flex items-center justify-center shrink-0 align-middle',\n  {\n    variants: {\n      color: {\n        current: '',\n        primary: 'text-primary',\n        accent: 'text-accent',\n        warn: 'text-warn',\n        success: 'text-success',\n        muted: 'text-muted-foreground',\n        disabled: 'text-disabled-foreground',\n      },\n      size: {\n        xs: 'size-icon-xs',\n        sm: 'size-icon-sm',\n        md: 'size-icon-md',\n        lg: 'size-icon-lg',\n        xl: 'size-icon-xl',\n        '2xl': 'size-icon-2xl',\n      },\n    },\n    defaultVariants: {\n      color: 'current',\n      size: 'lg',\n    },\n  }\n);\n\n/** Pixel values matching the CSS tokens — passed to Lucide's numeric [size] prop */\nexport const ICON_SIZE_PX: Record<IconSize, number> = {\n  xs: 12,\n  sm: 16,\n  md: 20,\n  lg: 24,\n  xl: 32,\n  '2xl': 40,\n};\n\nexport type IconVariants = VariantProps<typeof iconVariants>;\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DOCUMENT,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  Renderer2,\n  ViewEncapsulation,\n} from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { COM_ICON_REGISTRAR } from './icon.providers';\nimport { ComIconRegistry } from './icon.registry';\nimport type { ComIconData } from './icon.types';\nimport { iconVariants, ICON_SIZE_PX, type IconColor, type IconSize } from './icon.variants';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * Converts a kebab-case or space-separated icon name to PascalCase.\n */\nfunction toPascalCase(str: string): string {\n  return str.replace(/(\\w)([a-z0-9]*)(_|-|\\s*)/g, (_g0, g1: string, g2: string) =>\n    g1.toUpperCase() + g2.toLowerCase()\n  );\n}\n\n/**\n * Icon component — renders SVG icons with CVA-powered color and size variants.\n *\n * Icons inherit `currentColor` by default, making them automatically match\n * surrounding text. Use the `color` input for semantic color variants that\n * respond to theme changes.\n *\n * Icon data is vendor-agnostic — register icons via `provideComIcons` (raw SVG data)\n * or `provideComLucideIcons` from `ngx-com/components/icon/lucide` (Lucide adapter).\n *\n * @tokens `--color-primary`, `--color-accent`, `--color-warn`, `--color-success`,\n *         `--color-muted-foreground`, `--color-disabled-foreground`,\n *         `--size-icon-xs`, `--size-icon-sm`, `--size-icon-md`,\n *         `--size-icon-lg`, `--size-icon-xl`, `--size-icon-2xl`\n *\n * @example Basic usage (requires icon registration via provideComLucideIcons)\n * ```html\n * <com-icon name=\"star\" />\n * <com-icon name=\"check\" color=\"success\" size=\"sm\" />\n * <com-icon name=\"alert-triangle\" color=\"warn\" />\n * ```\n *\n * @example Direct icon data (no provider needed)\n * ```html\n * <com-icon [img]=\"starIconData\" color=\"accent\" size=\"2xl\" />\n * ```\n *\n * @example Accessible icon (not decorative)\n * ```html\n * <com-icon name=\"check\" color=\"success\" ariaLabel=\"Task completed\" />\n * ```\n *\n * @example Inline with text (inherits parent color)\n * ```html\n * <span class=\"text-primary\">\n *   <com-icon name=\"star\" size=\"sm\" /> Favorite\n * </span>\n * ```\n */\n@Component({\n  selector: 'com-icon',\n  template: '',\n  host: {\n    '[class]': 'hostClasses()',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class ComIcon {\n  private readonly doc = inject(DOCUMENT);\n  private readonly rd = inject(Renderer2);\n  private readonly elRef = inject(ElementRef<HTMLElement>);\n  private readonly registry = inject(ComIconRegistry);\n  private readonly _registrar = inject(COM_ICON_REGISTRAR, { optional: true });\n\n  /** Icon name in kebab-case (e.g. 'chevron-right'). Requires icon registration. */\n  readonly name: InputSignal<string | undefined> = input<string>();\n\n  /** Direct icon data (SVG element tuples). Takes precedence over `name`. */\n  readonly img: InputSignal<ComIconData | undefined> = input<ComIconData>();\n\n  /** Semantic color variant. Defaults to 'current' (inherits from parent). */\n  readonly color: InputSignal<IconColor> = input<IconColor>('current');\n\n  /** Size variant. Defaults to 'lg' (24px). */\n  readonly size: InputSignal<IconSize> = input<IconSize>('lg');\n\n  /** Stroke width. Defaults to 2. */\n  readonly strokeWidth: InputSignal<number> = input<number>(2);\n\n  /** When true, stroke width doesn't scale with icon size. */\n  readonly absoluteStrokeWidth: InputSignal<boolean> = input<boolean>(false);\n\n  /** Applies aria-label and removes aria-hidden. Use for meaningful icons. */\n  readonly ariaLabel: InputSignal<string | undefined> = input<string>();\n\n  /** Resolves icon data from either `img` (direct ref) or `name` (registry lookup). */\n  protected readonly resolvedIcon: Signal<ComIconData | undefined> = computed(() => {\n    const imgData = this.img();\n    if (imgData) return imgData;\n\n    const iconName = this.name();\n    if (iconName) return this.registry.get(toPascalCase(iconName)) ?? undefined;\n\n    return undefined;\n  });\n\n  protected readonly sizeInPx: Signal<number> = computed(() => ICON_SIZE_PX[this.size()]);\n\n  protected readonly effectiveStrokeWidth: Signal<number> = computed(() => {\n    const sw = this.strokeWidth();\n    if (!this.absoluteStrokeWidth()) return sw;\n    return sw * 24 / this.sizeInPx();\n  });\n\n  protected readonly hostClasses: Signal<string> = computed(() =>\n    iconVariants({ color: this.color(), size: this.size() })\n  );\n\n  constructor() {\n    effect(() => {\n      this.renderSvg();\n    });\n  }\n\n  /** Builds and inserts the SVG element, or clears the host if no icon data is available. */\n  private renderSvg(): void {\n    const el = this.elRef.nativeElement;\n    const data = this.resolvedIcon();\n    const label = this.ariaLabel();\n\n    // Clear previous SVG\n    const existing = el.querySelector('svg');\n    if (existing) {\n      this.rd.removeChild(el, existing);\n    }\n\n    if (!data) return;\n\n    const size = this.sizeInPx();\n    const sw = this.effectiveStrokeWidth();\n\n    // Build SVG element\n    const svg = this.doc.createElementNS(SVG_NS, 'svg');\n    this.rd.setAttribute(svg, 'xmlns', SVG_NS);\n    this.rd.setAttribute(svg, 'width', String(size));\n    this.rd.setAttribute(svg, 'height', String(size));\n    this.rd.setAttribute(svg, 'viewBox', '0 0 24 24');\n    this.rd.setAttribute(svg, 'fill', 'none');\n    this.rd.setAttribute(svg, 'stroke', 'currentColor');\n    this.rd.setAttribute(svg, 'stroke-width', String(sw));\n    this.rd.setAttribute(svg, 'stroke-linecap', 'round');\n    this.rd.setAttribute(svg, 'stroke-linejoin', 'round');\n\n    if (label) {\n      this.rd.setAttribute(svg, 'aria-label', label);\n    } else {\n      this.rd.setAttribute(svg, 'aria-hidden', 'true');\n    }\n\n    // Render SVG children\n    for (const [tag, attrs] of data) {\n      const child = this.doc.createElementNS(SVG_NS, tag);\n      for (const [key, value] of Object.entries(attrs)) {\n        this.rd.setAttribute(child, key, String(value));\n      }\n      this.rd.appendChild(svg, child);\n    }\n\n    this.rd.appendChild(el, svg);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}