@shival99/z-ui 2.3.11 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/fesm2022/shival99-z-ui-components-z-drawer.mjs +7 -2
  2. package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -1
  3. package/fesm2022/shival99-z-ui-components-z-gallery.mjs +4 -369
  4. package/fesm2022/shival99-z-ui-components-z-gallery.mjs.map +1 -1
  5. package/fesm2022/shival99-z-ui-components-z-icon.mjs +20 -11
  6. package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
  7. package/fesm2022/shival99-z-ui-components-z-media-player.mjs +54 -45
  8. package/fesm2022/shival99-z-ui-components-z-media-player.mjs.map +1 -1
  9. package/fesm2022/shival99-z-ui-components-z-modal.mjs +12 -2
  10. package/fesm2022/shival99-z-ui-components-z-modal.mjs.map +1 -1
  11. package/fesm2022/shival99-z-ui-components-z-popover.mjs +75 -43
  12. package/fesm2022/shival99-z-ui-components-z-popover.mjs.map +1 -1
  13. package/fesm2022/shival99-z-ui-components-z-tabs.mjs +17 -11
  14. package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -1
  15. package/package.json +1 -1
  16. package/types/shival99-z-ui-components-z-autocomplete.d.ts +1 -1
  17. package/types/shival99-z-ui-components-z-calendar.d.ts +4 -4
  18. package/types/shival99-z-ui-components-z-editor.d.ts +1 -1
  19. package/types/shival99-z-ui-components-z-media-player.d.ts +1 -1
  20. package/types/shival99-z-ui-components-z-modal.d.ts +1 -1
  21. package/types/shival99-z-ui-components-z-popover.d.ts +1 -0
  22. package/types/shival99-z-ui-components-z-select.d.ts +1 -1
  23. package/types/shival99-z-ui-components-z-table.d.ts +1 -1
  24. package/types/shival99-z-ui-components-z-tabs.d.ts +6 -2
  25. package/types/shival99-z-ui-components-z-toast.d.ts +2 -2
  26. package/types/shival99-z-ui-components-z-upload.d.ts +3 -3
@@ -510,17 +510,26 @@ async function getFallbackIconFromFamily(name) {
510
510
  }
511
511
  if (name.startsWith('phosphor')) {
512
512
  const { weight } = convertPhosphorIconName(name);
513
- const icons = weight === 'bold'
514
- ? await import('@ng-icons/phosphor-icons/bold')
515
- : weight === 'fill'
516
- ? await import('@ng-icons/phosphor-icons/fill')
517
- : weight === 'light'
518
- ? await import('@ng-icons/phosphor-icons/light')
519
- : weight === 'thin'
520
- ? await import('@ng-icons/phosphor-icons/thin')
521
- : weight === 'duotone'
522
- ? await import('@ng-icons/phosphor-icons/duotone')
523
- : await import('@ng-icons/phosphor-icons/regular');
513
+ let icons = null;
514
+ switch (weight) {
515
+ case 'bold':
516
+ icons = await import('@ng-icons/phosphor-icons/bold');
517
+ break;
518
+ case 'fill':
519
+ icons = await import('@ng-icons/phosphor-icons/fill');
520
+ break;
521
+ case 'light':
522
+ icons = await import('@ng-icons/phosphor-icons/light');
523
+ break;
524
+ case 'thin':
525
+ icons = await import('@ng-icons/phosphor-icons/thin');
526
+ break;
527
+ case 'duotone':
528
+ icons = await import('@ng-icons/phosphor-icons/duotone');
529
+ break;
530
+ default:
531
+ icons = await import('@ng-icons/phosphor-icons/regular');
532
+ }
524
533
  const icon = Reflect.get(icons, name);
525
534
  return typeof icon === 'string' ? icon : null;
526
535
  }
@@ -1 +1 @@
1
- {"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 {\n type ComponentRef,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n type OnDestroy,\n signal,\n type Type,\n viewChild,\n ViewContainerRef,\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 type { ZIconAnimationTrigger } from './z-icon.types';\nimport { zIconVariants, type ZIconVariants } from './z-icon.variants';\nimport { type ZIcon } from './z-icons';\n\n@Component({\n selector: 'z-icon, [z-icon]',\n imports: [NgIcon],\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 implements OnDestroy {\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 animatedIconHost = viewChild('animatedIconHost', { read: ViewContainerRef });\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 private 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 private _animatedIconRef: ComponentRef<unknown> | null = null;\n private _animatedIconType: Type<unknown> | null = null;\n private _animatedIconListenerCleanup: (() => void) | null = null;\n private _animatedIconRestartTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n private readonly _isPersistentAnimate = computed(() => this.zAnimationTrigger() === 'always' || this.zAnimate());\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(() => {\n const host = this.animatedIconHost();\n const type = this.animatedIcon();\n\n if (!host) {\n this._destroyAnimatedIconRef();\n return;\n }\n\n if (type !== this._animatedIconType) {\n this._destroyAnimatedIconRef();\n this._animatedIconType = type;\n host.clear();\n\n if (type) {\n this._animatedIconRef = host.createComponent(type);\n this._attachAnimatedIconLoopListener(this._animatedIconRef);\n }\n }\n\n const ref = this._animatedIconRef;\n if (ref) {\n const inputs = this._animatedIconInputs();\n for (const [key, value] of Object.entries(inputs)) {\n ref.setInput(key, value);\n }\n // Signal inputs set imperatively via setInput() don't reliably schedule\n // change detection for a dynamically created OnPush child, so force it.\n ref.changeDetectorRef.detectChanges();\n }\n });\n\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 _destroyAnimatedIconRef(): void {\n this._cancelAnimatedIconRestart();\n this._animatedIconListenerCleanup?.();\n this._animatedIconListenerCleanup = null;\n this._animatedIconRef?.destroy();\n this._animatedIconRef = null;\n this._animatedIconType = null;\n }\n\n private _attachAnimatedIconLoopListener(ref: ComponentRef<unknown>): void {\n const nativeElement = ref.location.nativeElement as HTMLElement;\n const handler = () => this._restartAnimatedIconLoop(ref);\n nativeElement.addEventListener('animationend', handler);\n this._animatedIconListenerCleanup = () => nativeElement.removeEventListener('animationend', handler);\n }\n\n private _restartAnimatedIconLoop(ref: ComponentRef<unknown>): void {\n if (this._animatedIconRef !== ref || !this._isPersistentAnimate()) {\n return;\n }\n\n this._cancelAnimatedIconRestart();\n ref.setInput('animate', false);\n ref.changeDetectorRef.detectChanges();\n this._animatedIconRestartTimeoutId = setTimeout(() => {\n this._animatedIconRestartTimeoutId = null;\n if (this._animatedIconRef !== ref || !this._isPersistentAnimate()) {\n return;\n }\n ref.setInput('animate', true);\n ref.changeDetectorRef.detectChanges();\n }, 50);\n }\n\n private _cancelAnimatedIconRestart(): void {\n if (this._animatedIconRestartTimeoutId !== null) {\n clearTimeout(this._animatedIconRestartTimeoutId);\n this._animatedIconRestartTimeoutId = null;\n }\n }\n\n ngOnDestroy(): void {\n this._destroyAnimatedIconRef();\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 #animatedIconHost />\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 heroMicroIcons from '@ng-icons/heroicons/micro';\nimport type * as heroMiniIcons from '@ng-icons/heroicons/mini';\nimport type * as heroOutlineIcons from '@ng-icons/heroicons/outline';\nimport type * as heroSolidIcons from '@ng-icons/heroicons/solid';\nimport type * as iconoirRegularIcons from '@ng-icons/iconoir/regular';\nimport type * as iconoirSolidIcons from '@ng-icons/iconoir/solid';\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';\nimport type * as tablerIcons from '@ng-icons/tabler-icons';\nimport type * as tablerFillIcons from '@ng-icons/tabler-icons/fill';\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>;\ntype ZTablerIcon = Extract<keyof typeof tablerIcons | keyof typeof tablerFillIcons, `tabler${string}`>;\ntype ZHeroIcon = Extract<\n | keyof typeof heroMicroIcons\n | keyof typeof heroMiniIcons\n | keyof typeof heroOutlineIcons\n | keyof typeof heroSolidIcons,\n `hero${string}`\n>;\ntype ZIconoirIcon = Extract<keyof typeof iconoirRegularIcons | keyof typeof iconoirSolidIcons, `iconoir${string}`>;\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\n/**\n * Optional bundled icon overrides used before the CDN loader fallback.\n *\n * The default registry is intentionally empty so icon families remain lazy.\n */\nexport const Z_ICONS = {} as const satisfies Record<string, IconType>;\n\n/**\n * Names accepted by `z-icon`, covering every icon family configured by the\n * default loader and preserving each family's style suffix conventions.\n */\nexport type ZIcon =\n ZLucideIcon | ZSaxIcon | ZPhosphorIcon | ZTablerIcon | ZHeroIcon | ZIconoirIcon | ZHugeIcon | ZBrandIcon;\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { type EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { provideNgIconLoader, withCaching } from '@ng-icons/core';\nimport { catchError, from, map, type Observable, of, retry, switchMap, tap, throwError, timeout, timer } 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 * Normalizes line-based SVG families to the shared ng-icon stroke variable.\n * This keeps `zStrokeWidth` consistent across the different icon sources.\n */\nfunction normalizeStrokeSvg(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\nasync function getFallbackIcon(name: string): Promise<string> {\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\n const familyIcon = await getFallbackIconFromFamily(name);\n if (familyIcon) {\n return familyIcon;\n }\n\n const lucideIcons = await import('@ng-icons/lucide');\n const matchedIcon = Reflect.get(lucideIcons, name);\n if (typeof matchedIcon === 'string') {\n return matchedIcon;\n }\n\n return lucideIcons.lucideCircleHelp;\n}\n\n/**\n * Resolves an icon from the local ng-icons package for CDN failure fallback.\n * Dynamic imports keep the complete family out of the normal application path.\n */\nasync function getFallbackIconFromFamily(name: string): Promise<string | null> {\n if (name.startsWith('tabler')) {\n const icons = name.endsWith('Fill')\n ? await import('@ng-icons/tabler-icons/fill')\n : await import('@ng-icons/tabler-icons');\n const icon = Reflect.get(icons, name);\n return typeof icon === 'string' ? icon : null;\n }\n\n if (name.startsWith('hero')) {\n const icons = name.endsWith('Micro')\n ? await import('@ng-icons/heroicons/micro')\n : name.endsWith('Mini')\n ? await import('@ng-icons/heroicons/mini')\n : name.endsWith('Solid')\n ? await import('@ng-icons/heroicons/solid')\n : await import('@ng-icons/heroicons/outline');\n const icon = Reflect.get(icons, name);\n return typeof icon === 'string' ? icon : null;\n }\n\n if (name.startsWith('iconoir')) {\n const icons = name.endsWith('Solid')\n ? await import('@ng-icons/iconoir/solid')\n : await import('@ng-icons/iconoir/regular');\n const icon = Reflect.get(icons, name);\n return typeof icon === 'string' ? icon : null;\n }\n\n if (name.startsWith('phosphor')) {\n const { weight } = convertPhosphorIconName(name);\n const icons =\n weight === 'bold'\n ? await import('@ng-icons/phosphor-icons/bold')\n : weight === 'fill'\n ? await import('@ng-icons/phosphor-icons/fill')\n : weight === 'light'\n ? await import('@ng-icons/phosphor-icons/light')\n : weight === 'thin'\n ? await import('@ng-icons/phosphor-icons/thin')\n : weight === 'duotone'\n ? await import('@ng-icons/phosphor-icons/duotone')\n : await import('@ng-icons/phosphor-icons/regular');\n const icon = Reflect.get(icons, name);\n return typeof icon === 'string' ? icon : null;\n }\n\n return null;\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 a Tabler icon name to its CDN folder and kebab-case asset name.\n * Tabler's filled package uses a `Fill` suffix in its ng-icons exports.\n */\nfunction convertTablerIconName(name: string): { style: 'outline' | 'filled'; iconName: string } {\n const isFilled = name.endsWith('Fill');\n const iconPart = (isFilled ? name.slice(0, -'Fill'.length) : name).replace(/^tabler/, '');\n const iconName = iconPart\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 return { style: isFilled ? 'filled' : 'outline', iconName };\n}\n\n/**\n * Converts a Heroicons export name to its official size/style asset path.\n * Mini and micro exports are solid-only 20px and 16px variants respectively.\n */\nfunction convertHeroIconName(name: string): { size: '24' | '20' | '16'; style: 'outline' | 'solid'; iconName: string } {\n let iconPart = name.replace(/^hero/, '');\n let size: '24' | '20' | '16' = '24';\n let style: 'outline' | 'solid' = 'outline';\n\n if (iconPart.endsWith('Micro')) {\n size = '16';\n style = 'solid';\n iconPart = iconPart.slice(0, -'Micro'.length);\n } else if (iconPart.endsWith('Mini')) {\n size = '20';\n style = 'solid';\n iconPart = iconPart.slice(0, -'Mini'.length);\n } else if (iconPart.endsWith('Solid')) {\n style = 'solid';\n iconPart = iconPart.slice(0, -'Solid'.length);\n }\n\n const iconName = iconPart\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 return { size, style, iconName };\n}\n\n/**\n * Converts an Iconoir export name to its style folder and kebab-case asset.\n */\nfunction convertIconoirIconName(name: string): { style: 'regular' | 'solid'; iconName: string } {\n const isSolid = name.endsWith('Solid');\n const iconPart = (isSolid ? name.slice(0, -'Solid'.length) : name).replace(/^iconoir/, '');\n const iconName = 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 { style: isSolid ? 'solid' : 'regular', 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 TABLER_CDN_URL = 'https://cdn.jsdelivr.net/npm/@tabler/icons@latest/icons';\nconst HEROICONS_CDN_URL = 'https://cdn.jsdelivr.net/npm/heroicons@latest';\nconst ICONOIR_CDN_URL = 'https://cdn.jsdelivr.net/npm/iconoir@latest/icons';\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 = 4000;\nconst ICON_CDN_RETRY_COUNT = 2;\nconst ICON_CDN_RETRY_DELAY_MS = 250;\n\nfunction retryIconRequest(error: unknown, retryCount: number): Observable<number> {\n if (error instanceof HttpErrorResponse && error.status >= 400 && error.status < 500) {\n return throwError(() => error);\n }\n\n return timer(ICON_CDN_RETRY_DELAY_MS * retryCount);\n}\n\n/**\n * Provides hybrid icon loading from CDN with fallback to local icon packages.\n * The default path keeps full icon families lazy, while a CDN failure loads\n * only the requested family's package as a fallback.\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 retry({\n count: ICON_CDN_RETRY_COUNT,\n delay: retryIconRequest,\n }),\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 from(getFallbackIcon(name));\n })\n );\n }),\n catchError(() => from(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 from(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(() => from(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 from(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('tabler')) {\n const { style, iconName } = convertTablerIconName(name);\n const url = `${TABLER_CDN_URL}/${style}/${iconName}.svg`;\n return loadWithCache(name, url, http, normalizeStrokeSvg);\n }\n\n if (name.startsWith('hero')) {\n const { size, style, iconName } = convertHeroIconName(name);\n const url = `${HEROICONS_CDN_URL}/${size}/${style}/${iconName}.svg`;\n return loadWithCache(name, url, http, normalizeStrokeSvg);\n }\n\n if (name.startsWith('iconoir')) {\n const { style, iconName } = convertIconoirIconName(name);\n const url = `${ICONOIR_CDN_URL}/${style}/${iconName}.svg`;\n return loadWithCache(name, url, http, normalizeStrokeSvg);\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 from(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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"}
1
+ {"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 {\n type ComponentRef,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n type OnDestroy,\n signal,\n type Type,\n viewChild,\n ViewContainerRef,\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 type { ZIconAnimationTrigger } from './z-icon.types';\nimport { zIconVariants, type ZIconVariants } from './z-icon.variants';\nimport { type ZIcon } from './z-icons';\n\n@Component({\n selector: 'z-icon, [z-icon]',\n imports: [NgIcon],\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 implements OnDestroy {\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 animatedIconHost = viewChild('animatedIconHost', { read: ViewContainerRef });\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 private 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 private _animatedIconRef: ComponentRef<unknown> | null = null;\n private _animatedIconType: Type<unknown> | null = null;\n private _animatedIconListenerCleanup: (() => void) | null = null;\n private _animatedIconRestartTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n private readonly _isPersistentAnimate = computed(() => this.zAnimationTrigger() === 'always' || this.zAnimate());\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(() => {\n const host = this.animatedIconHost();\n const type = this.animatedIcon();\n\n if (!host) {\n this._destroyAnimatedIconRef();\n return;\n }\n\n if (type !== this._animatedIconType) {\n this._destroyAnimatedIconRef();\n this._animatedIconType = type;\n host.clear();\n\n if (type) {\n this._animatedIconRef = host.createComponent(type);\n this._attachAnimatedIconLoopListener(this._animatedIconRef);\n }\n }\n\n const ref = this._animatedIconRef;\n if (ref) {\n const inputs = this._animatedIconInputs();\n for (const [key, value] of Object.entries(inputs)) {\n ref.setInput(key, value);\n }\n // Signal inputs set imperatively via setInput() don't reliably schedule\n // change detection for a dynamically created OnPush child, so force it.\n ref.changeDetectorRef.detectChanges();\n }\n });\n\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 _destroyAnimatedIconRef(): void {\n this._cancelAnimatedIconRestart();\n this._animatedIconListenerCleanup?.();\n this._animatedIconListenerCleanup = null;\n this._animatedIconRef?.destroy();\n this._animatedIconRef = null;\n this._animatedIconType = null;\n }\n\n private _attachAnimatedIconLoopListener(ref: ComponentRef<unknown>): void {\n const nativeElement = ref.location.nativeElement as HTMLElement;\n const handler = () => this._restartAnimatedIconLoop(ref);\n nativeElement.addEventListener('animationend', handler);\n this._animatedIconListenerCleanup = () => nativeElement.removeEventListener('animationend', handler);\n }\n\n private _restartAnimatedIconLoop(ref: ComponentRef<unknown>): void {\n if (this._animatedIconRef !== ref || !this._isPersistentAnimate()) {\n return;\n }\n\n this._cancelAnimatedIconRestart();\n ref.setInput('animate', false);\n ref.changeDetectorRef.detectChanges();\n this._animatedIconRestartTimeoutId = setTimeout(() => {\n this._animatedIconRestartTimeoutId = null;\n if (this._animatedIconRef !== ref || !this._isPersistentAnimate()) {\n return;\n }\n ref.setInput('animate', true);\n ref.changeDetectorRef.detectChanges();\n }, 50);\n }\n\n private _cancelAnimatedIconRestart(): void {\n if (this._animatedIconRestartTimeoutId !== null) {\n clearTimeout(this._animatedIconRestartTimeoutId);\n this._animatedIconRestartTimeoutId = null;\n }\n }\n\n ngOnDestroy(): void {\n this._destroyAnimatedIconRef();\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 #animatedIconHost />\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 heroMicroIcons from '@ng-icons/heroicons/micro';\nimport type * as heroMiniIcons from '@ng-icons/heroicons/mini';\nimport type * as heroOutlineIcons from '@ng-icons/heroicons/outline';\nimport type * as heroSolidIcons from '@ng-icons/heroicons/solid';\nimport type * as iconoirRegularIcons from '@ng-icons/iconoir/regular';\nimport type * as iconoirSolidIcons from '@ng-icons/iconoir/solid';\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';\nimport type * as tablerIcons from '@ng-icons/tabler-icons';\nimport type * as tablerFillIcons from '@ng-icons/tabler-icons/fill';\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>;\ntype ZTablerIcon = Extract<keyof typeof tablerIcons | keyof typeof tablerFillIcons, `tabler${string}`>;\ntype ZHeroIcon = Extract<\n | keyof typeof heroMicroIcons\n | keyof typeof heroMiniIcons\n | keyof typeof heroOutlineIcons\n | keyof typeof heroSolidIcons,\n `hero${string}`\n>;\ntype ZIconoirIcon = Extract<keyof typeof iconoirRegularIcons | keyof typeof iconoirSolidIcons, `iconoir${string}`>;\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\n/**\n * Optional bundled icon overrides used before the CDN loader fallback.\n *\n * The default registry is intentionally empty so icon families remain lazy.\n */\nexport const Z_ICONS = {} as const satisfies Record<string, IconType>;\n\n/**\n * Names accepted by `z-icon`, covering every icon family configured by the\n * default loader and preserving each family's style suffix conventions.\n */\nexport type ZIcon =\n ZLucideIcon | ZSaxIcon | ZPhosphorIcon | ZTablerIcon | ZHeroIcon | ZIconoirIcon | ZHugeIcon | ZBrandIcon;\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { type EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { provideNgIconLoader, withCaching } from '@ng-icons/core';\nimport { catchError, from, map, type Observable, of, retry, switchMap, tap, throwError, timeout, timer } 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 * Normalizes line-based SVG families to the shared ng-icon stroke variable.\n * This keeps `zStrokeWidth` consistent across the different icon sources.\n */\nfunction normalizeStrokeSvg(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\nasync function getFallbackIcon(name: string): Promise<string> {\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\n const familyIcon = await getFallbackIconFromFamily(name);\n if (familyIcon) {\n return familyIcon;\n }\n\n const lucideIcons = await import('@ng-icons/lucide');\n const matchedIcon = Reflect.get(lucideIcons, name);\n if (typeof matchedIcon === 'string') {\n return matchedIcon;\n }\n\n return lucideIcons.lucideCircleHelp;\n}\n\n/**\n * Resolves an icon from the local ng-icons package for CDN failure fallback.\n * Dynamic imports keep the complete family out of the normal application path.\n */\nasync function getFallbackIconFromFamily(name: string): Promise<string | null> {\n if (name.startsWith('tabler')) {\n const icons = name.endsWith('Fill')\n ? await import('@ng-icons/tabler-icons/fill')\n : await import('@ng-icons/tabler-icons');\n const icon = Reflect.get(icons, name);\n return typeof icon === 'string' ? icon : null;\n }\n\n if (name.startsWith('hero')) {\n const icons = name.endsWith('Micro')\n ? await import('@ng-icons/heroicons/micro')\n : name.endsWith('Mini')\n ? await import('@ng-icons/heroicons/mini')\n : name.endsWith('Solid')\n ? await import('@ng-icons/heroicons/solid')\n : await import('@ng-icons/heroicons/outline');\n const icon = Reflect.get(icons, name);\n return typeof icon === 'string' ? icon : null;\n }\n\n if (name.startsWith('iconoir')) {\n const icons = name.endsWith('Solid')\n ? await import('@ng-icons/iconoir/solid')\n : await import('@ng-icons/iconoir/regular');\n const icon = Reflect.get(icons, name);\n return typeof icon === 'string' ? icon : null;\n }\n\n if (name.startsWith('phosphor')) {\n const { weight } = convertPhosphorIconName(name);\n let icons = null;\n switch (weight) {\n case 'bold':\n icons = await import('@ng-icons/phosphor-icons/bold');\n break;\n case 'fill':\n icons = await import('@ng-icons/phosphor-icons/fill');\n break;\n case 'light':\n icons = await import('@ng-icons/phosphor-icons/light');\n break;\n case 'thin':\n icons = await import('@ng-icons/phosphor-icons/thin');\n break;\n case 'duotone':\n icons = await import('@ng-icons/phosphor-icons/duotone');\n break;\n default:\n icons = await import('@ng-icons/phosphor-icons/regular');\n }\n\n const icon = Reflect.get(icons, name);\n return typeof icon === 'string' ? icon : null;\n }\n\n return null;\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 a Tabler icon name to its CDN folder and kebab-case asset name.\n * Tabler's filled package uses a `Fill` suffix in its ng-icons exports.\n */\nfunction convertTablerIconName(name: string): { style: 'outline' | 'filled'; iconName: string } {\n const isFilled = name.endsWith('Fill');\n const iconPart = (isFilled ? name.slice(0, -'Fill'.length) : name).replace(/^tabler/, '');\n const iconName = iconPart\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 return { style: isFilled ? 'filled' : 'outline', iconName };\n}\n\n/**\n * Converts a Heroicons export name to its official size/style asset path.\n * Mini and micro exports are solid-only 20px and 16px variants respectively.\n */\nfunction convertHeroIconName(name: string): { size: '24' | '20' | '16'; style: 'outline' | 'solid'; iconName: string } {\n let iconPart = name.replace(/^hero/, '');\n let size: '24' | '20' | '16' = '24';\n let style: 'outline' | 'solid' = 'outline';\n\n if (iconPart.endsWith('Micro')) {\n size = '16';\n style = 'solid';\n iconPart = iconPart.slice(0, -'Micro'.length);\n } else if (iconPart.endsWith('Mini')) {\n size = '20';\n style = 'solid';\n iconPart = iconPart.slice(0, -'Mini'.length);\n } else if (iconPart.endsWith('Solid')) {\n style = 'solid';\n iconPart = iconPart.slice(0, -'Solid'.length);\n }\n\n const iconName = iconPart\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 return { size, style, iconName };\n}\n\n/**\n * Converts an Iconoir export name to its style folder and kebab-case asset.\n */\nfunction convertIconoirIconName(name: string): { style: 'regular' | 'solid'; iconName: string } {\n const isSolid = name.endsWith('Solid');\n const iconPart = (isSolid ? name.slice(0, -'Solid'.length) : name).replace(/^iconoir/, '');\n const iconName = 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 { style: isSolid ? 'solid' : 'regular', 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 TABLER_CDN_URL = 'https://cdn.jsdelivr.net/npm/@tabler/icons@latest/icons';\nconst HEROICONS_CDN_URL = 'https://cdn.jsdelivr.net/npm/heroicons@latest';\nconst ICONOIR_CDN_URL = 'https://cdn.jsdelivr.net/npm/iconoir@latest/icons';\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 = 4000;\nconst ICON_CDN_RETRY_COUNT = 2;\nconst ICON_CDN_RETRY_DELAY_MS = 250;\n\nfunction retryIconRequest(error: unknown, retryCount: number): Observable<number> {\n if (error instanceof HttpErrorResponse && error.status >= 400 && error.status < 500) {\n return throwError(() => error);\n }\n\n return timer(ICON_CDN_RETRY_DELAY_MS * retryCount);\n}\n\n/**\n * Provides hybrid icon loading from CDN with fallback to local icon packages.\n * The default path keeps full icon families lazy, while a CDN failure loads\n * only the requested family's package as a fallback.\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 retry({\n count: ICON_CDN_RETRY_COUNT,\n delay: retryIconRequest,\n }),\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 from(getFallbackIcon(name));\n })\n );\n }),\n catchError(() => from(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 from(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(() => from(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 from(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('tabler')) {\n const { style, iconName } = convertTablerIconName(name);\n const url = `${TABLER_CDN_URL}/${style}/${iconName}.svg`;\n return loadWithCache(name, url, http, normalizeStrokeSvg);\n }\n\n if (name.startsWith('hero')) {\n const { size, style, iconName } = convertHeroIconName(name);\n const url = `${HEROICONS_CDN_URL}/${size}/${style}/${iconName}.svg`;\n return loadWithCache(name, url, http, normalizeStrokeSvg);\n }\n\n if (name.startsWith('iconoir')) {\n const { style, iconName } = convertIconoirIconName(name);\n const url = `${ICONOIR_CDN_URL}/${style}/${iconName}.svg`;\n return loadWithCache(name, url, http, normalizeStrokeSvg);\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 from(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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"}
@@ -926,51 +926,60 @@ class ZMediaPlayerComponent {
926
926
  return;
927
927
  }
928
928
  const key = event.key.toLowerCase();
929
- if (key === ' ' || key === 'arrowup' || key === 'arrowdown' || key === 'arrowleft' || key === 'arrowright') {
930
- event.preventDefault();
931
- }
932
- if (key === ' ' || key === 'k') {
933
- this.togglePlay();
934
- return;
935
- }
936
- if (key === 'm') {
937
- this.toggleMute();
938
- return;
939
- }
940
- if (key === 'f') {
941
- this.toggleFullscreen();
942
- return;
943
- }
944
- if (key === 't') {
945
- this.toggleTheaterMode();
946
- return;
947
- }
948
- if (key === 'i') {
949
- void this.toggleMiniplayer();
950
- return;
951
- }
952
- if (key === 'arrowleft' || key === 'j') {
953
- const skipSec = key === 'j' ? 10 : 5;
954
- this.triggerSkip(skipSec, 'left');
955
- return;
956
- }
957
- if (key === 'arrowright' || key === 'l') {
958
- const skipSec = key === 'l' ? 10 : 5;
959
- this.triggerSkip(skipSec, 'right');
960
- return;
961
- }
962
- if (key === 'arrowup') {
963
- this.onVolumeChange(Math.min(1.0, this.volume() + 0.05));
964
- return;
965
- }
966
- if (key === 'arrowdown') {
967
- this.onVolumeChange(Math.max(0, this.volume() - 0.05));
968
- return;
969
- }
970
- if (event.key >= '0' && event.key <= '9') {
971
- const numPercent = Number(event.key) * 10;
972
- this.seekTo((numPercent / 100) * this.duration());
973
- return;
929
+ switch (key) {
930
+ case ' ':
931
+ event.preventDefault();
932
+ this.togglePlay();
933
+ return;
934
+ case 'k':
935
+ this.togglePlay();
936
+ return;
937
+ case 'm':
938
+ this.toggleMute();
939
+ return;
940
+ case 'f':
941
+ this.toggleFullscreen();
942
+ return;
943
+ case 't':
944
+ this.toggleTheaterMode();
945
+ return;
946
+ case 'i':
947
+ void this.toggleMiniplayer();
948
+ return;
949
+ case 'arrowleft':
950
+ event.preventDefault();
951
+ this.triggerSkip(5, 'left');
952
+ return;
953
+ case 'j':
954
+ this.triggerSkip(10, 'left');
955
+ return;
956
+ case 'arrowright':
957
+ event.preventDefault();
958
+ this.triggerSkip(5, 'right');
959
+ return;
960
+ case 'l':
961
+ this.triggerSkip(10, 'right');
962
+ return;
963
+ case 'arrowup':
964
+ event.preventDefault();
965
+ this.onVolumeChange(Math.min(1.0, this.volume() + 0.05));
966
+ return;
967
+ case 'arrowdown':
968
+ event.preventDefault();
969
+ this.onVolumeChange(Math.max(0, this.volume() - 0.05));
970
+ return;
971
+ case '0':
972
+ case '1':
973
+ case '2':
974
+ case '3':
975
+ case '4':
976
+ case '5':
977
+ case '6':
978
+ case '7':
979
+ case '8':
980
+ case '9':
981
+ this.seekTo((Number(key) / 10) * this.duration());
982
+ return;
974
983
  }
975
984
  }
976
985
  toggleSettings() {