@shival99/z-ui 2.1.11 → 2.1.13

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 (29) hide show
  1. package/fesm2022/shival99-z-ui-components-z-calendar.mjs +6 -5
  2. package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
  3. package/fesm2022/shival99-z-ui-components-z-editor.mjs +1 -1
  4. package/fesm2022/shival99-z-ui-components-z-editor.mjs.map +1 -1
  5. package/fesm2022/shival99-z-ui-components-z-filter.mjs +1 -1
  6. package/fesm2022/shival99-z-ui-components-z-filter.mjs.map +1 -1
  7. package/fesm2022/shival99-z-ui-components-z-gallery.mjs +1 -1
  8. package/fesm2022/shival99-z-ui-components-z-gallery.mjs.map +1 -1
  9. package/fesm2022/shival99-z-ui-components-z-icon.mjs +14 -2
  10. package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
  11. package/fesm2022/shival99-z-ui-components-z-input.mjs +6 -4
  12. package/fesm2022/shival99-z-ui-components-z-input.mjs.map +1 -1
  13. package/fesm2022/shival99-z-ui-components-z-kanban.mjs +1 -1
  14. package/fesm2022/shival99-z-ui-components-z-kanban.mjs.map +1 -1
  15. package/fesm2022/shival99-z-ui-components-z-pagination.mjs +1 -1
  16. package/fesm2022/shival99-z-ui-components-z-pagination.mjs.map +1 -1
  17. package/fesm2022/shival99-z-ui-components-z-table.mjs +25 -4
  18. package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
  19. package/package.json +1 -1
  20. package/types/shival99-z-ui-components-z-autocomplete.d.ts +1 -1
  21. package/types/shival99-z-ui-components-z-calendar.d.ts +6 -5
  22. package/types/shival99-z-ui-components-z-editor.d.ts +1 -1
  23. package/types/shival99-z-ui-components-z-icon.d.ts +1 -1
  24. package/types/shival99-z-ui-components-z-input.d.ts +3 -1
  25. package/types/shival99-z-ui-components-z-modal.d.ts +1 -1
  26. package/types/shival99-z-ui-components-z-select.d.ts +1 -1
  27. package/types/shival99-z-ui-components-z-table.d.ts +5 -1
  28. package/types/shival99-z-ui-components-z-toast.d.ts +2 -2
  29. package/types/shival99-z-ui-components-z-upload.d.ts +3 -3
@@ -7,7 +7,8 @@ import * as animatedIcons from 'ng-animated-icons';
7
7
  import { ZIndexDbService } from '@shival99/z-ui/services';
8
8
  import { cva } from 'class-variance-authority';
9
9
  import { HttpClient } from '@angular/common/http';
10
- import { from, switchMap, of, map, tap, catchError } from 'rxjs';
10
+ import { lucideLoaderPinwheel, lucideLoaderCircle, lucideLoader2, lucideLoader } from '@ng-icons/lucide';
11
+ import { from, switchMap, of, timeout, map, tap, catchError } from 'rxjs';
11
12
 
12
13
  const ANIMATED_ICONS = animatedIcons;
13
14
  const BROKEN_ANIMATED_ICON_EXPORTS = new Set(['AudioLinesIcon']);
@@ -359,6 +360,10 @@ function normalizeHugeIconModule(moduleSource) {
359
360
  return `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" xmlns="http://www.w3.org/2000/svg">${elements.join('')}</svg>`;
360
361
  }
361
362
  function getFallbackIcon(name) {
363
+ const criticalIcon = CRITICAL_ICON_FALLBACKS[name];
364
+ if (criticalIcon) {
365
+ return criticalIcon;
366
+ }
362
367
  const icon = Z_ICONS[name];
363
368
  if (icon) {
364
369
  // console.warn(`[ZIcon] Using bundled fallback for "${name}"`);
@@ -487,6 +492,13 @@ const SAX_CDN_URL = 'https://cdn.jsdelivr.net/gh/placetopay-org/iconsax-vue@main
487
492
  const PHOSPHOR_CDN_URL = 'https://cdn.jsdelivr.net/npm/@phosphor-icons/core@latest/assets';
488
493
  const HUGE_CDN_URL = 'https://cdn.jsdelivr.net/npm/@hugeicons/core-free-icons@4.2.1/dist/esm';
489
494
  const BRAND_CDN_URL = 'https://thesvg.org/icons';
495
+ const ICON_CDN_TIMEOUT_MS = 2500;
496
+ const CRITICAL_ICON_FALLBACKS = {
497
+ lucideLoader,
498
+ lucideLoader2,
499
+ lucideLoaderCircle,
500
+ lucideLoaderPinwheel,
501
+ };
490
502
  /**
491
503
  * Provides hybrid icon loading from CDN with fallback to bundled icons:
492
504
  * - Primary: Load icons from CDN (Lucide & Iconsax)
@@ -506,7 +518,7 @@ function loadWithCache(name, url, http, normalizer) {
506
518
  if (cached) {
507
519
  return of(cached);
508
520
  }
509
- return http.get(url, { responseType: 'text' }).pipe(map(normalizer), tap(svg => writeCachedIconSvg(name, svg)), catchError(error => {
521
+ return http.get(url, { responseType: 'text' }).pipe(timeout(ICON_CDN_TIMEOUT_MS), map(normalizer), tap(svg => writeCachedIconSvg(name, svg)), catchError(error => {
510
522
  console.error(`[ZIcon] Failed to load "${name}" from ${url}`, error);
511
523
  return of(getFallbackIcon(name));
512
524
  }));
@@ -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 { NgComponentOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n signal,\n type Type,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgIconComponent as NgIcon } from '@ng-icons/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { getZAnimatedIconComponent, type ZAnimatedIcon } from './z-animated-icons';\nimport { Z_ICON_CACHE_STORE, zIconCacheDb } from './z-icon-cache';\nimport { zIconVariants, type ZIconVariants } from './z-icon.variants';\nimport { type ZIcon } from './z-icons';\n\nexport type ZIconAnimationTrigger = 'manual' | 'hover' | 'focus' | 'interaction' | 'always';\n\n@Component({\n selector: 'z-icon, [z-icon]',\n imports: [NgIcon, NgComponentOutlet],\n standalone: true,\n templateUrl: './z-icon.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'zClasses()',\n '[style.width]': 'normalizedSize() + \"px\"',\n '[style.height]': 'normalizedSize() + \"px\"',\n '(mouseenter)': 'setHoverActive(true)',\n '(mouseleave)': 'setHoverActive(false)',\n '(focusin)': 'setFocusActive(true)',\n '(focusout)': 'setFocusActive(false)',\n '(touchstart)': 'setTouchActive(true)',\n '(touchend)': 'setTouchActive(false)',\n },\n})\nexport class ZIconComponent {\n public readonly class = input<ClassValue>('');\n public readonly zType = input<ZIcon>();\n public readonly zAnimatedType = input<ZAnimatedIcon>();\n public readonly zAnimate = input(false);\n public readonly zAnimationTrigger = input<ZIconAnimationTrigger>('manual');\n public readonly zSize = input<ZIconVariants['zSize']>('16');\n public readonly zStrokeWidth = input<number>(2);\n public readonly zSvg = input<string>('');\n protected readonly resolvedSvg = signal('');\n protected readonly isHoverActive = signal(false);\n protected readonly isFocusActive = signal(false);\n protected readonly isTouchActive = signal(false);\n protected readonly normalizedSize = computed(() => {\n const size = this.zSize();\n if (size === null || size === undefined || size === '') {\n return '16';\n }\n\n return String(size);\n });\n\n private readonly _svgFetchError = signal<string>('');\n\n protected readonly zClasses = computed(() =>\n zMergeClasses(\n zIconVariants({ zSize: this.zSize() }),\n this.class(),\n this.zStrokeWidth() === 0 ? 'stroke-none' : '',\n 'inline-flex shrink-0'\n )\n );\n\n protected readonly animatedIcon = computed<Type<unknown> | null>(() => {\n const animatedType = this.zAnimatedType();\n if (!animatedType) {\n return null;\n }\n\n return getZAnimatedIconComponent(animatedType);\n });\n\n protected readonly animatedIconInputs = computed<Record<string, unknown>>(() => ({\n animate: this.shouldAnimate(),\n color: 'currentColor',\n size: Number(this.normalizedSize()),\n strokeWidth: this.zStrokeWidth(),\n }));\n\n protected readonly shouldAnimate = computed(() => {\n const trigger = this.zAnimationTrigger();\n if (trigger === 'always' || this.zAnimate()) {\n return true;\n }\n\n if (trigger === 'hover') {\n return this.isHoverActive() || this.isTouchActive();\n }\n\n if (trigger === 'focus') {\n return this.isFocusActive();\n }\n\n if (trigger === 'interaction') {\n return this.isHoverActive() || this.isFocusActive() || this.isTouchActive();\n }\n\n return false;\n });\n\n constructor() {\n effect(onCleanup => {\n const svgInput = this.zSvg().trim();\n if (!svgInput) {\n this.resolvedSvg.set('');\n this._svgFetchError.set('');\n return;\n }\n\n if (this._isRawSvg(svgInput)) {\n this.resolvedSvg.set(this._normalizeCustomSvg(svgInput));\n this._svgFetchError.set('');\n return;\n }\n\n if (!this._isSvgPath(svgInput)) {\n this.resolvedSvg.set('');\n this._svgFetchError.set('Unsupported SVG input format.');\n return;\n }\n\n const controller = new AbortController();\n onCleanup(() => controller.abort());\n\n const cacheKey = `zsvg:path:${svgInput}`;\n void zIconCacheDb\n .get<string>(cacheKey, { storeName: Z_ICON_CACHE_STORE })\n .then(cachedSvg => {\n if (controller.signal.aborted) {\n return null;\n }\n if (cachedSvg && this._isRawSvg(cachedSvg.trim())) {\n this.resolvedSvg.set(this._normalizeCustomSvg(cachedSvg));\n this._svgFetchError.set('');\n return null;\n }\n\n return fetch(svgInput, { signal: controller.signal }).then(response => {\n if (!response.ok) {\n throw new Error(`Failed to fetch SVG from \"${svgInput}\"`);\n }\n return response.text();\n });\n })\n .then(svgContent => {\n if (controller.signal.aborted || !svgContent) {\n return;\n }\n\n if (!this._isRawSvg(svgContent.trim())) {\n throw new Error(`Invalid SVG content loaded from \"${svgInput}\"`);\n }\n\n const normalizedSvg = this._normalizeCustomSvg(svgContent);\n this.resolvedSvg.set(normalizedSvg);\n this._svgFetchError.set('');\n void zIconCacheDb.set(cacheKey, normalizedSvg, { storeName: Z_ICON_CACHE_STORE }).catch(console.error);\n })\n .catch(error => {\n if (controller.signal.aborted) {\n return;\n }\n console.error('[z-icon] Failed to load zSvg path:', error);\n this.resolvedSvg.set('');\n this._svgFetchError.set('Unable to load SVG path.');\n });\n });\n }\n\n private _isRawSvg(value: string): boolean {\n return value.startsWith('<svg');\n }\n\n protected setHoverActive(isActive: boolean): void {\n this.isHoverActive.set(isActive);\n }\n\n protected setFocusActive(isActive: boolean): void {\n this.isFocusActive.set(isActive);\n }\n\n protected setTouchActive(isActive: boolean): void {\n this.isTouchActive.set(isActive);\n }\n\n private _isSvgPath(value: string): boolean {\n return value.endsWith('.svg') || value.includes('/');\n }\n\n private _normalizeCustomSvg(svg: string): string {\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svg, 'image/svg+xml');\n const svgEl = doc.documentElement;\n if (svgEl.tagName.toLowerCase() !== 'svg') {\n return svg;\n }\n\n const width = svgEl.getAttribute('width');\n const height = svgEl.getAttribute('height');\n if (\n !svgEl.getAttribute('viewBox') &&\n width &&\n height &&\n !Number.isNaN(Number(width)) &&\n !Number.isNaN(Number(height))\n ) {\n svgEl.setAttribute('viewBox', `0 0 ${width} ${height}`);\n }\n\n svgEl.removeAttribute('width');\n svgEl.removeAttribute('height');\n\n const allNodes = [svgEl, ...Array.from(svgEl.querySelectorAll('*'))];\n allNodes.forEach(node => {\n const fill = node.getAttribute('fill');\n if (fill && fill !== 'none' && fill !== 'currentColor') {\n node.setAttribute('fill', 'currentColor');\n }\n\n const stroke = node.getAttribute('stroke');\n if (stroke && stroke !== 'none' && stroke !== 'currentColor') {\n node.setAttribute('stroke', 'currentColor');\n }\n\n if (node.hasAttribute('stroke-width')) {\n node.removeAttribute('stroke-width');\n const currentStyle = node.getAttribute('style') ?? '';\n const normalizedStyle = currentStyle.trim();\n const strokeWidthStyle = 'stroke-width: var(--ng-icon__stroke-width, 2)';\n node.setAttribute('style', normalizedStyle ? `${normalizedStyle}; ${strokeWidthStyle}` : strokeWidthStyle);\n }\n });\n\n return svgEl.outerHTML;\n } catch {\n return svg;\n }\n }\n}\n","@if (animatedIcon()) {\n <ng-container [ngComponentOutlet]=\"animatedIcon()\" [ngComponentOutletInputs]=\"animatedIconInputs()\" />\n} @else if (resolvedSvg()) {\n <ng-icon [svg]=\"resolvedSvg()\" [size]=\"normalizedSize()\" [strokeWidth]=\"zStrokeWidth()\" />\n} @else if (!zSvg()) {\n <ng-icon [name]=\"zType()\" [size]=\"normalizedSize()\" [strokeWidth]=\"zStrokeWidth()\" />\n}\n","import type * as hugeIcons from '@hugeicons/core-free-icons';\nimport { type IconType } from '@ng-icons/core';\nimport type * as saxBoldIcons from '@ng-icons/iconsax/bold';\nimport type * as saxOutlineIcons from '@ng-icons/iconsax/outline';\nimport type * as lucideIcons from '@ng-icons/lucide';\nimport type * as phosphorBoldIcons from '@ng-icons/phosphor-icons/bold';\nimport type * as phosphorDuotoneIcons from '@ng-icons/phosphor-icons/duotone';\nimport type * as phosphorFillIcons from '@ng-icons/phosphor-icons/fill';\nimport type * as phosphorLightIcons from '@ng-icons/phosphor-icons/light';\nimport type * as phosphorRegularIcons from '@ng-icons/phosphor-icons/regular';\nimport type * as phosphorThinIcons from '@ng-icons/phosphor-icons/thin';\n\ntype ZLucideIcon = Extract<keyof typeof lucideIcons, `lucide${string}`>;\ntype ZSaxIcon = Extract<keyof typeof saxBoldIcons | keyof typeof saxOutlineIcons, `sax${string}`>;\ntype ZPhosphorIcon = Extract<\n | keyof typeof phosphorRegularIcons\n | keyof typeof phosphorBoldIcons\n | keyof typeof phosphorFillIcons\n | keyof typeof phosphorLightIcons\n | keyof typeof phosphorThinIcons\n | keyof typeof phosphorDuotoneIcons,\n `phosphor${string}`\n>;\n\n/**\n * HugeIcons exports are PascalCase with an `Icon` suffix (e.g. `HeartIcon`,\n * `Home01Icon`). We re-expose them with a `huge` prefix to stay consistent\n * with the other families (e.g. `hugeHeart`, `hugeHome01`).\n */\ntype ZHugeIcon = {\n [K in keyof typeof hugeIcons as K extends `${infer Name}Icon` ? `huge${Name}` : never]: true;\n} extends infer M\n ? Extract<keyof M, `huge${string}`>\n : never;\n\n/**\n * Brand/logo icons served at runtime from theSVG (thesvg.org). These are\n * loaded dynamically by slug, so unlike the other families there is no\n * generated union to validate against — any `brand`-prefixed name is accepted.\n * The PascalCase part maps to the CDN slug, and an optional Color/Light/Dark/\n * Wordmark suffix selects the variant (default `mono`, which uses currentColor).\n * Examples: `brandGithub`, `brandSlackWordmark`, `brandFigmaColor`.\n */\nexport type ZBrandIcon = `brand${string}`;\n\nexport const Z_ICONS = {} as const satisfies Record<string, IconType>;\n\nexport type ZIcon = ZLucideIcon | ZSaxIcon | ZPhosphorIcon | ZHugeIcon | ZBrandIcon;\n","import { HttpClient } from '@angular/common/http';\nimport { type EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { provideNgIconLoader, withCaching } from '@ng-icons/core';\nimport { catchError, from, map, type Observable, of, switchMap, tap } from 'rxjs';\nimport { readCachedIconSvg, writeCachedIconSvg } from './z-icon-cache';\nimport { Z_ICONS } from './z-icons';\n\n/**\n * Normalizes Sax SVG to use currentColor and CSS variable for stroke-width.\n * This allows the icon to inherit color and strokeWidth from ng-icon props.\n */\nfunction normalizeSaxSvg(svg: string): string {\n const cssVar = 'style=\"stroke-width: var(--ng-icon__stroke-width, 2)\"';\n const normalized = svg.replace(/fill=\"#292D32\"/gi, 'fill=\"currentColor\"');\n return normalized.replace(/stroke-width=\"[^\"]*\"/gi, cssVar);\n}\n\n/**\n * Normalizes Lucide SVG to use CSS variable for stroke-width.\n * This allows ng-icon strokeWidth prop to work correctly.\n * Replaces hardcoded stroke-width with var(--ng-icon__stroke-width, 2).\n */\nfunction normalizeLucideSvg(svg: string): string {\n const cssVar = 'style=\"stroke-width: var(--ng-icon__stroke-width, 2)\"';\n return svg.replace(/stroke-width=\"[^\"]*\"/gi, cssVar);\n}\n\n/**\n * Phosphor SVGs already ship with fill=\"currentColor\" and no stroke-width,\n * so no normalization is required. Kept as an explicit passthrough for parity\n * with the other icon families.\n */\nfunction normalizePhosphorSvg(svg: string): string {\n return svg;\n}\n\n/**\n * theSVG color logos (default/light/dark/wordmark) often declare their brand\n * color as a `fill` on the root `<svg>` element, letting the child paths\n * inherit it. ng-icon, however, sets `fill=\"currentColor\"` on the rendered\n * `<svg>`, which clobbers that root fill and turns the logo the host text color\n * (e.g. the blue Zalo logo rendered black).\n *\n * To keep the brand color we lift the root fill onto the icon's contents:\n * everything inside `<svg …>` is wrapped in a `<g fill=\"…\">`, which ng-icon's\n * root-level currentColor can no longer override. Mono icons declare no root\n * fill, so they pass through untouched and keep inheriting currentColor.\n */\nfunction normalizeBrandSvg(svg: string): string {\n const rootMatch = svg.match(/<svg\\b([^>]*)>/i);\n if (!rootMatch) {\n return svg;\n }\n\n const rootAttrs = rootMatch[1];\n const fillMatch = rootAttrs.match(/\\sfill\\s*=\\s*\"([^\"]*)\"/i);\n const fill = fillMatch?.[1];\n if (!fill || fill === 'none' || fill === 'currentColor') {\n return svg;\n }\n\n const openTag = rootMatch[0];\n const openTagIndex = rootMatch.index ?? svg.indexOf(openTag);\n const strippedOpenTag = openTag.replace(/\\sfill\\s*=\\s*\"[^\"]*\"/i, '');\n const closeIndex = svg.lastIndexOf('</svg>');\n if (closeIndex === -1) {\n return svg;\n }\n\n const inner = svg.slice(openTagIndex + openTag.length, closeIndex);\n return `${strippedOpenTag}<g fill=\"${fill}\">${inner}</g></svg>`;\n}\n\n/**\n * HugeIcons ships each icon as an ESM module exporting a path-array\n * (e.g. `const HeartIcon = [[\"path\", { d: \"...\", stroke: \"currentColor\", strokeWidth: \"1.5\" }]]`),\n * not a ready-made SVG. This converts that module source into an `<svg>` string\n * suitable for ng-icon, mapping camelCase attributes to kebab-case and wiring\n * stroke-width to the ng-icon CSS variable.\n */\nfunction normalizeHugeIconModule(moduleSource: string): string {\n const elements: string[] = [];\n const elementRegex = /\\[\\s*\"([a-zA-Z]+)\"\\s*,\\s*\\{([^}]*)\\}\\s*\\]/g;\n let match: RegExpExecArray | null;\n\n while ((match = elementRegex.exec(moduleSource)) !== null) {\n const tag = match[1];\n const attrsBody = match[2];\n const attrs: string[] = [];\n const attrRegex = /([a-zA-Z]+)\\s*:\\s*\"([^\"]*)\"/g;\n let attrMatch: RegExpExecArray | null;\n\n while ((attrMatch = attrRegex.exec(attrsBody)) !== null) {\n const rawKey = attrMatch[1];\n const value = attrMatch[2];\n if (rawKey === 'key') {\n continue;\n }\n if (rawKey === 'strokeWidth') {\n attrs.push(`style=\"stroke-width:var(--ng-icon__stroke-width, ${value})\"`);\n continue;\n }\n const attrName = rawKey.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n attrs.push(`${attrName}=\"${value}\"`);\n }\n\n elements.push(`<${tag} ${attrs.join(' ')}></${tag}>`);\n }\n\n if (elements.length === 0) {\n return '';\n }\n\n return `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">${elements.join('')}</svg>`;\n}\n\nfunction getFallbackIcon(name: string): string {\n const icon = Z_ICONS[name as keyof typeof Z_ICONS];\n if (icon) {\n // console.warn(`[ZIcon] Using bundled fallback for \"${name}\"`);\n return icon;\n }\n return '';\n}\n\n/**\n * Converts ng-icons icon name to Lucide CDN format.\n * Examples:\n * - lucideArrowLeft -> arrow-left\n * - lucideAlertCircle -> alert-circle\n * - lucideTrash2 -> trash-2\n * - lucideGrid3x3 -> grid-3-x-3\n */\nfunction convertLucideIconName(name: string): string {\n return name\n .replace(/^lucide/, '')\n .replace(/([A-Z])/g, '-$1')\n .replace(/(\\d+)/g, '-$1')\n .replace(/(\\d)([a-z])/g, '$1-$2')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/--+/g, '-');\n}\n\n/**\n * Converts ng-icons Sax icon name to CDN format.\n * Examples:\n * - saxCloudChangeBold -> bold/cloud-change\n * - saxPauseBold -> bold/pause\n * - saxRefreshBold -> bold/refresh\n * - saxHomeOutline -> outline/home\n * - saxUserLinear -> linear/user\n */\nfunction convertIconSaxIconName(name: string): { style: string; iconName: string } | null {\n let iconPart = name.replace(/^sax/, '');\n // Extract style suffix (Bold, Outline, Linear, Bulk, Broken, TwoTone)\n const styleMatch = iconPart.match(/(Bold|Outline|Linear|Bulk|Broken|TwoTone)$/i);\n if (!styleMatch) {\n return null;\n }\n\n const style = styleMatch[1].toLowerCase();\n const styleFolder = style === 'twotone' ? 'twotone' : style;\n iconPart = iconPart.replace(/(Bold|Outline|Linear|Bulk|Broken|TwoTone)$/i, '');\n const iconName = iconPart\n .replace(/([A-Z])/g, '-$1')\n .replace(/(\\d+)/g, '-$1')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/--+/g, '-');\n\n return { style: styleFolder, iconName };\n}\n\n/**\n * Converts ng-icons Phosphor icon name to CDN format.\n * Phosphor weights map to folders, and every weight except \"regular\" carries a\n * file-name suffix (e.g. heart-bold.svg), while regular is just heart.svg.\n * Examples:\n * - phosphorHeart -> regular/heart\n * - phosphorHeartBold -> bold/heart-bold\n * - phosphorHeartFill -> fill/heart-fill\n * - phosphorHeartDuotone -> duotone/heart-duotone\n * - phosphorAddressBookTabsLight -> light/address-book-tabs-light\n */\nfunction convertPhosphorIconName(name: string): { weight: string; iconName: string } {\n let iconPart = name.replace(/^phosphor/, '');\n const weightMatch = iconPart.match(/(Bold|Fill|Light|Thin|Duotone)$/);\n const weight = weightMatch ? weightMatch[1].toLowerCase() : 'regular';\n if (weightMatch) {\n iconPart = iconPart.replace(/(Bold|Fill|Light|Thin|Duotone)$/, '');\n }\n\n const kebab = iconPart\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/--+/g, '-');\n\n const iconName = weight === 'regular' ? kebab : `${kebab}-${weight}`;\n\n return { weight, iconName };\n}\n\n/**\n * Converts ng-icons-style Huge icon name to the @hugeicons/core-free-icons\n * CDN module name. We expose icons with a `huge` prefix over the original\n * PascalCase export name, so we just strip the prefix and append `Icon`.\n * Examples:\n * - hugeHeart -> HeartIcon\n * - hugeHome01 -> Home01Icon\n * - hugeFirstBracketCircle -> FirstBracketCircleIcon\n */\nfunction convertHugeIconName(name: string): string {\n return `${name.replace(/^huge/, '')}Icon`;\n}\n\n/**\n * Converts an ng-icons-style brand icon name into a theSVG CDN slug and an\n * ordered list of variants to try. Icons live at\n * `https://thesvg.org/icons/{slug}/{variant}.svg`.\n *\n * A trailing variant suffix (Default/Color/Light/Dark/Wordmark/Mono) pins that\n * exact variant. Without a suffix we serve the brand's full-color `default`\n * logo and fall back to `mono` (single-color, inherits currentColor) only for\n * the rare brand that ships no default asset. The remaining name is\n * lower-kebab-cased to form the slug.\n * Examples:\n * - brandGithub -> { slug: 'github', variants: ['default', 'mono'] }\n * - brandZalo -> { slug: 'zalo', variants: ['default', 'mono'] } (renders the blue Zalo logo)\n * - brandGithubMono -> { slug: 'github', variants: ['mono'] }\n * - brandSlackWordmark -> { slug: 'slack', variants: ['wordmark'] }\n * - brandGithubActions -> { slug: 'github-actions', variants: ['default', 'mono'] }\n */\nfunction convertBrandIconName(name: string): { slug: string; variants: string[] } {\n let iconPart = name.replace(/^brand/, '');\n const variantMatch = iconPart.match(/(Default|Color|Light|Dark|Wordmark|Mono)$/);\n const variants = variantMatch ? [variantMatch[1].toLowerCase()] : ['default', 'mono'];\n if (variantMatch) {\n iconPart = iconPart.replace(/(Default|Color|Light|Dark|Wordmark|Mono)$/, '');\n }\n\n const slug = iconPart\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/--+/g, '-');\n\n return { slug, variants };\n}\n\nconst LUCIDE_CDN_URL = 'https://cdn.jsdelivr.net/npm/lucide-static@latest/icons';\nconst SAX_CDN_URL = 'https://cdn.jsdelivr.net/gh/placetopay-org/iconsax-vue@main/src/Base';\nconst PHOSPHOR_CDN_URL = 'https://cdn.jsdelivr.net/npm/@phosphor-icons/core@latest/assets';\nconst HUGE_CDN_URL = 'https://cdn.jsdelivr.net/npm/@hugeicons/core-free-icons@4.2.1/dist/esm';\nconst BRAND_CDN_URL = 'https://thesvg.org/icons';\n\n/**\n * Provides hybrid icon loading from CDN with fallback to bundled icons:\n * - Primary: Load icons from CDN (Lucide & Iconsax)\n * - Fallback: Use bundled icons from Z_ICONS if CDN fails\n *\n * @example\n * ```typescript\n * // app.config.ts\n * providers: [\n * provideHttpClient(),\n * provideZIconLoader(),\n * ]\n * ```\n */\nfunction loadWithCache(\n name: string,\n url: string,\n http: HttpClient,\n normalizer: (svg: string) => string\n): Observable<string> {\n return from(readCachedIconSvg(name)).pipe(\n switchMap(cached => {\n if (cached) {\n return of(cached);\n }\n\n return http.get(url, { responseType: 'text' }).pipe(\n map(normalizer),\n tap(svg => writeCachedIconSvg(name, svg)),\n catchError(error => {\n console.error(`[ZIcon] Failed to load \"${name}\" from ${url}`, error);\n return of(getFallbackIcon(name));\n })\n );\n }),\n catchError(() => of(getFallbackIcon(name)))\n );\n}\n\n/**\n * Loads a theSVG brand icon, trying each variant in order until one returns a\n * real SVG. theSVG serves a 404 HTML page for missing variants, so we both let\n * HTTP errors fall through to the next variant AND guard against a 200 that\n * isn't actually SVG markup. The first success is cached under the icon name.\n */\nfunction loadBrandWithCache(name: string, slug: string, variants: string[], http: HttpClient): Observable<string> {\n const tryVariant = (index: number): Observable<string> => {\n if (index >= variants.length) {\n return of(getFallbackIcon(name));\n }\n\n const url = `${BRAND_CDN_URL}/${slug}/${variants[index]}.svg`;\n return http.get(url, { responseType: 'text' }).pipe(\n switchMap(svg => {\n if (!svg.trimStart().startsWith('<svg')) {\n return tryVariant(index + 1);\n }\n const normalized = normalizeBrandSvg(svg);\n writeCachedIconSvg(name, normalized);\n return of(normalized);\n }),\n catchError(() => tryVariant(index + 1))\n );\n };\n\n return from(readCachedIconSvg(name)).pipe(\n switchMap(cached => (cached ? of(cached) : tryVariant(0))),\n catchError(() => of(getFallbackIcon(name)))\n );\n}\n\nexport function provideZIconLoader(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideNgIconLoader(name => {\n const http = inject(HttpClient);\n if (name.startsWith('sax')) {\n const parsed = convertIconSaxIconName(name);\n if (!parsed) {\n console.warn(`[ZIcon] Invalid Sax icon name: \"${name}\"`);\n return of(getFallbackIcon(name));\n }\n\n const url = `${SAX_CDN_URL}/${parsed.style}/${parsed.iconName}.svg`;\n return loadWithCache(name, url, http, normalizeSaxSvg);\n }\n\n if (name.startsWith('lucide')) {\n const iconName = convertLucideIconName(name);\n const url = `${LUCIDE_CDN_URL}/${iconName}.svg`;\n return loadWithCache(name, url, http, normalizeLucideSvg);\n }\n\n if (name.startsWith('phosphor')) {\n const { weight, iconName } = convertPhosphorIconName(name);\n const url = `${PHOSPHOR_CDN_URL}/${weight}/${iconName}.svg`;\n return loadWithCache(name, url, http, normalizePhosphorSvg);\n }\n\n if (name.startsWith('huge')) {\n const moduleName = convertHugeIconName(name);\n const url = `${HUGE_CDN_URL}/${moduleName}.js`;\n return loadWithCache(name, url, http, normalizeHugeIconModule);\n }\n\n if (name.startsWith('brand')) {\n const { slug, variants } = convertBrandIconName(name);\n return loadBrandWithCache(name, slug, variants, http);\n }\n\n // console.warn(`[ZIcon] Unknown icon: \"${name}\"`);\n return of(getFallbackIcon(name));\n }, withCaching()),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NgIcon"],"mappings":"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"}
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 { NgComponentOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n signal,\n type Type,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgIconComponent as NgIcon } from '@ng-icons/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { getZAnimatedIconComponent, type ZAnimatedIcon } from './z-animated-icons';\nimport { Z_ICON_CACHE_STORE, zIconCacheDb } from './z-icon-cache';\nimport { zIconVariants, type ZIconVariants } from './z-icon.variants';\nimport { type ZIcon } from './z-icons';\n\nexport type ZIconAnimationTrigger = 'manual' | 'hover' | 'focus' | 'interaction' | 'always';\n\n@Component({\n selector: 'z-icon, [z-icon]',\n imports: [NgIcon, NgComponentOutlet],\n standalone: true,\n templateUrl: './z-icon.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'zClasses()',\n '[style.width]': 'normalizedSize() + \"px\"',\n '[style.height]': 'normalizedSize() + \"px\"',\n '(mouseenter)': 'setHoverActive(true)',\n '(mouseleave)': 'setHoverActive(false)',\n '(focusin)': 'setFocusActive(true)',\n '(focusout)': 'setFocusActive(false)',\n '(touchstart)': 'setTouchActive(true)',\n '(touchend)': 'setTouchActive(false)',\n },\n})\nexport class ZIconComponent {\n public readonly class = input<ClassValue>('');\n public readonly zType = input<ZIcon>();\n public readonly zAnimatedType = input<ZAnimatedIcon>();\n public readonly zAnimate = input(false);\n public readonly zAnimationTrigger = input<ZIconAnimationTrigger>('manual');\n public readonly zSize = input<ZIconVariants['zSize']>('16');\n public readonly zStrokeWidth = input<number>(2);\n public readonly zSvg = input<string>('');\n protected readonly resolvedSvg = signal('');\n protected readonly isHoverActive = signal(false);\n protected readonly isFocusActive = signal(false);\n protected readonly isTouchActive = signal(false);\n protected readonly normalizedSize = computed(() => {\n const size = this.zSize();\n if (size === null || size === undefined || size === '') {\n return '16';\n }\n\n return String(size);\n });\n\n private readonly _svgFetchError = signal<string>('');\n\n protected readonly zClasses = computed(() =>\n zMergeClasses(\n zIconVariants({ zSize: this.zSize() }),\n this.class(),\n this.zStrokeWidth() === 0 ? 'stroke-none' : '',\n 'inline-flex shrink-0'\n )\n );\n\n protected readonly animatedIcon = computed<Type<unknown> | null>(() => {\n const animatedType = this.zAnimatedType();\n if (!animatedType) {\n return null;\n }\n\n return getZAnimatedIconComponent(animatedType);\n });\n\n protected readonly animatedIconInputs = computed<Record<string, unknown>>(() => ({\n animate: this.shouldAnimate(),\n color: 'currentColor',\n size: Number(this.normalizedSize()),\n strokeWidth: this.zStrokeWidth(),\n }));\n\n protected readonly shouldAnimate = computed(() => {\n const trigger = this.zAnimationTrigger();\n if (trigger === 'always' || this.zAnimate()) {\n return true;\n }\n\n if (trigger === 'hover') {\n return this.isHoverActive() || this.isTouchActive();\n }\n\n if (trigger === 'focus') {\n return this.isFocusActive();\n }\n\n if (trigger === 'interaction') {\n return this.isHoverActive() || this.isFocusActive() || this.isTouchActive();\n }\n\n return false;\n });\n\n constructor() {\n effect(onCleanup => {\n const svgInput = this.zSvg().trim();\n if (!svgInput) {\n this.resolvedSvg.set('');\n this._svgFetchError.set('');\n return;\n }\n\n if (this._isRawSvg(svgInput)) {\n this.resolvedSvg.set(this._normalizeCustomSvg(svgInput));\n this._svgFetchError.set('');\n return;\n }\n\n if (!this._isSvgPath(svgInput)) {\n this.resolvedSvg.set('');\n this._svgFetchError.set('Unsupported SVG input format.');\n return;\n }\n\n const controller = new AbortController();\n onCleanup(() => controller.abort());\n\n const cacheKey = `zsvg:path:${svgInput}`;\n void zIconCacheDb\n .get<string>(cacheKey, { storeName: Z_ICON_CACHE_STORE })\n .then(cachedSvg => {\n if (controller.signal.aborted) {\n return null;\n }\n if (cachedSvg && this._isRawSvg(cachedSvg.trim())) {\n this.resolvedSvg.set(this._normalizeCustomSvg(cachedSvg));\n this._svgFetchError.set('');\n return null;\n }\n\n return fetch(svgInput, { signal: controller.signal }).then(response => {\n if (!response.ok) {\n throw new Error(`Failed to fetch SVG from \"${svgInput}\"`);\n }\n return response.text();\n });\n })\n .then(svgContent => {\n if (controller.signal.aborted || !svgContent) {\n return;\n }\n\n if (!this._isRawSvg(svgContent.trim())) {\n throw new Error(`Invalid SVG content loaded from \"${svgInput}\"`);\n }\n\n const normalizedSvg = this._normalizeCustomSvg(svgContent);\n this.resolvedSvg.set(normalizedSvg);\n this._svgFetchError.set('');\n void zIconCacheDb.set(cacheKey, normalizedSvg, { storeName: Z_ICON_CACHE_STORE }).catch(console.error);\n })\n .catch(error => {\n if (controller.signal.aborted) {\n return;\n }\n console.error('[z-icon] Failed to load zSvg path:', error);\n this.resolvedSvg.set('');\n this._svgFetchError.set('Unable to load SVG path.');\n });\n });\n }\n\n private _isRawSvg(value: string): boolean {\n return value.startsWith('<svg');\n }\n\n protected setHoverActive(isActive: boolean): void {\n this.isHoverActive.set(isActive);\n }\n\n protected setFocusActive(isActive: boolean): void {\n this.isFocusActive.set(isActive);\n }\n\n protected setTouchActive(isActive: boolean): void {\n this.isTouchActive.set(isActive);\n }\n\n private _isSvgPath(value: string): boolean {\n return value.endsWith('.svg') || value.includes('/');\n }\n\n private _normalizeCustomSvg(svg: string): string {\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svg, 'image/svg+xml');\n const svgEl = doc.documentElement;\n if (svgEl.tagName.toLowerCase() !== 'svg') {\n return svg;\n }\n\n const width = svgEl.getAttribute('width');\n const height = svgEl.getAttribute('height');\n if (\n !svgEl.getAttribute('viewBox') &&\n width &&\n height &&\n !Number.isNaN(Number(width)) &&\n !Number.isNaN(Number(height))\n ) {\n svgEl.setAttribute('viewBox', `0 0 ${width} ${height}`);\n }\n\n svgEl.removeAttribute('width');\n svgEl.removeAttribute('height');\n\n const allNodes = [svgEl, ...Array.from(svgEl.querySelectorAll('*'))];\n allNodes.forEach(node => {\n const fill = node.getAttribute('fill');\n if (fill && fill !== 'none' && fill !== 'currentColor') {\n node.setAttribute('fill', 'currentColor');\n }\n\n const stroke = node.getAttribute('stroke');\n if (stroke && stroke !== 'none' && stroke !== 'currentColor') {\n node.setAttribute('stroke', 'currentColor');\n }\n\n if (node.hasAttribute('stroke-width')) {\n node.removeAttribute('stroke-width');\n const currentStyle = node.getAttribute('style') ?? '';\n const normalizedStyle = currentStyle.trim();\n const strokeWidthStyle = 'stroke-width: var(--ng-icon__stroke-width, 2)';\n node.setAttribute('style', normalizedStyle ? `${normalizedStyle}; ${strokeWidthStyle}` : strokeWidthStyle);\n }\n });\n\n return svgEl.outerHTML;\n } catch {\n return svg;\n }\n }\n}\n","@if (animatedIcon()) {\n <ng-container [ngComponentOutlet]=\"animatedIcon()\" [ngComponentOutletInputs]=\"animatedIconInputs()\" />\n} @else if (resolvedSvg()) {\n <ng-icon [svg]=\"resolvedSvg()\" [size]=\"normalizedSize()\" [strokeWidth]=\"zStrokeWidth()\" />\n} @else if (!zSvg()) {\n <ng-icon [name]=\"zType()\" [size]=\"normalizedSize()\" [strokeWidth]=\"zStrokeWidth()\" />\n}\n","import type * as hugeIcons from '@hugeicons/core-free-icons';\nimport { type IconType } from '@ng-icons/core';\nimport type * as saxBoldIcons from '@ng-icons/iconsax/bold';\nimport type * as saxOutlineIcons from '@ng-icons/iconsax/outline';\nimport type * as lucideIcons from '@ng-icons/lucide';\nimport type * as phosphorBoldIcons from '@ng-icons/phosphor-icons/bold';\nimport type * as phosphorDuotoneIcons from '@ng-icons/phosphor-icons/duotone';\nimport type * as phosphorFillIcons from '@ng-icons/phosphor-icons/fill';\nimport type * as phosphorLightIcons from '@ng-icons/phosphor-icons/light';\nimport type * as phosphorRegularIcons from '@ng-icons/phosphor-icons/regular';\nimport type * as phosphorThinIcons from '@ng-icons/phosphor-icons/thin';\n\ntype ZLucideIcon = Extract<keyof typeof lucideIcons, `lucide${string}`>;\ntype ZSaxIcon = Extract<keyof typeof saxBoldIcons | keyof typeof saxOutlineIcons, `sax${string}`>;\ntype ZPhosphorIcon = Extract<\n | keyof typeof phosphorRegularIcons\n | keyof typeof phosphorBoldIcons\n | keyof typeof phosphorFillIcons\n | keyof typeof phosphorLightIcons\n | keyof typeof phosphorThinIcons\n | keyof typeof phosphorDuotoneIcons,\n `phosphor${string}`\n>;\n\n/**\n * HugeIcons exports are PascalCase with an `Icon` suffix (e.g. `HeartIcon`,\n * `Home01Icon`). We re-expose them with a `huge` prefix to stay consistent\n * with the other families (e.g. `hugeHeart`, `hugeHome01`).\n */\ntype ZHugeIcon = {\n [K in keyof typeof hugeIcons as K extends `${infer Name}Icon` ? `huge${Name}` : never]: true;\n} extends infer M\n ? Extract<keyof M, `huge${string}`>\n : never;\n\n/**\n * Brand/logo icons served at runtime from theSVG (thesvg.org). These are\n * loaded dynamically by slug, so unlike the other families there is no\n * generated union to validate against — any `brand`-prefixed name is accepted.\n * The PascalCase part maps to the CDN slug, and an optional Color/Light/Dark/\n * Wordmark suffix selects the variant (default `mono`, which uses currentColor).\n * Examples: `brandGithub`, `brandSlackWordmark`, `brandFigmaColor`.\n */\nexport type ZBrandIcon = `brand${string}`;\n\nexport const Z_ICONS = {} as const satisfies Record<string, IconType>;\n\nexport type ZIcon = ZLucideIcon | ZSaxIcon | ZPhosphorIcon | ZHugeIcon | ZBrandIcon;\n","import { HttpClient } from '@angular/common/http';\nimport { type EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { provideNgIconLoader, withCaching } from '@ng-icons/core';\nimport { lucideLoader, lucideLoader2, lucideLoaderCircle, lucideLoaderPinwheel } from '@ng-icons/lucide';\nimport { catchError, from, map, type Observable, of, switchMap, tap, timeout } from 'rxjs';\nimport { readCachedIconSvg, writeCachedIconSvg } from './z-icon-cache';\nimport { Z_ICONS } from './z-icons';\n\n/**\n * Normalizes Sax SVG to use currentColor and CSS variable for stroke-width.\n * This allows the icon to inherit color and strokeWidth from ng-icon props.\n */\nfunction normalizeSaxSvg(svg: string): string {\n const cssVar = 'style=\"stroke-width: var(--ng-icon__stroke-width, 2)\"';\n const normalized = svg.replace(/fill=\"#292D32\"/gi, 'fill=\"currentColor\"');\n return normalized.replace(/stroke-width=\"[^\"]*\"/gi, cssVar);\n}\n\n/**\n * Normalizes Lucide SVG to use CSS variable for stroke-width.\n * This allows ng-icon strokeWidth prop to work correctly.\n * Replaces hardcoded stroke-width with var(--ng-icon__stroke-width, 2).\n */\nfunction normalizeLucideSvg(svg: string): string {\n const cssVar = 'style=\"stroke-width: var(--ng-icon__stroke-width, 2)\"';\n return svg.replace(/stroke-width=\"[^\"]*\"/gi, cssVar);\n}\n\n/**\n * Phosphor SVGs already ship with fill=\"currentColor\" and no stroke-width,\n * so no normalization is required. Kept as an explicit passthrough for parity\n * with the other icon families.\n */\nfunction normalizePhosphorSvg(svg: string): string {\n return svg;\n}\n\n/**\n * theSVG color logos (default/light/dark/wordmark) often declare their brand\n * color as a `fill` on the root `<svg>` element, letting the child paths\n * inherit it. ng-icon, however, sets `fill=\"currentColor\"` on the rendered\n * `<svg>`, which clobbers that root fill and turns the logo the host text color\n * (e.g. the blue Zalo logo rendered black).\n *\n * To keep the brand color we lift the root fill onto the icon's contents:\n * everything inside `<svg …>` is wrapped in a `<g fill=\"…\">`, which ng-icon's\n * root-level currentColor can no longer override. Mono icons declare no root\n * fill, so they pass through untouched and keep inheriting currentColor.\n */\nfunction normalizeBrandSvg(svg: string): string {\n const rootMatch = svg.match(/<svg\\b([^>]*)>/i);\n if (!rootMatch) {\n return svg;\n }\n\n const rootAttrs = rootMatch[1];\n const fillMatch = rootAttrs.match(/\\sfill\\s*=\\s*\"([^\"]*)\"/i);\n const fill = fillMatch?.[1];\n if (!fill || fill === 'none' || fill === 'currentColor') {\n return svg;\n }\n\n const openTag = rootMatch[0];\n const openTagIndex = rootMatch.index ?? svg.indexOf(openTag);\n const strippedOpenTag = openTag.replace(/\\sfill\\s*=\\s*\"[^\"]*\"/i, '');\n const closeIndex = svg.lastIndexOf('</svg>');\n if (closeIndex === -1) {\n return svg;\n }\n\n const inner = svg.slice(openTagIndex + openTag.length, closeIndex);\n return `${strippedOpenTag}<g fill=\"${fill}\">${inner}</g></svg>`;\n}\n\n/**\n * HugeIcons ships each icon as an ESM module exporting a path-array\n * (e.g. `const HeartIcon = [[\"path\", { d: \"...\", stroke: \"currentColor\", strokeWidth: \"1.5\" }]]`),\n * not a ready-made SVG. This converts that module source into an `<svg>` string\n * suitable for ng-icon, mapping camelCase attributes to kebab-case and wiring\n * stroke-width to the ng-icon CSS variable.\n */\nfunction normalizeHugeIconModule(moduleSource: string): string {\n const elements: string[] = [];\n const elementRegex = /\\[\\s*\"([a-zA-Z]+)\"\\s*,\\s*\\{([^}]*)\\}\\s*\\]/g;\n let match: RegExpExecArray | null;\n\n while ((match = elementRegex.exec(moduleSource)) !== null) {\n const tag = match[1];\n const attrsBody = match[2];\n const attrs: string[] = [];\n const attrRegex = /([a-zA-Z]+)\\s*:\\s*\"([^\"]*)\"/g;\n let attrMatch: RegExpExecArray | null;\n\n while ((attrMatch = attrRegex.exec(attrsBody)) !== null) {\n const rawKey = attrMatch[1];\n const value = attrMatch[2];\n if (rawKey === 'key') {\n continue;\n }\n if (rawKey === 'strokeWidth') {\n attrs.push(`style=\"stroke-width:var(--ng-icon__stroke-width, ${value})\"`);\n continue;\n }\n const attrName = rawKey.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n attrs.push(`${attrName}=\"${value}\"`);\n }\n\n elements.push(`<${tag} ${attrs.join(' ')}></${tag}>`);\n }\n\n if (elements.length === 0) {\n return '';\n }\n\n return `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">${elements.join('')}</svg>`;\n}\n\nfunction getFallbackIcon(name: string): string {\n const criticalIcon = CRITICAL_ICON_FALLBACKS[name];\n if (criticalIcon) {\n return criticalIcon;\n }\n\n const icon = Z_ICONS[name as keyof typeof Z_ICONS];\n if (icon) {\n // console.warn(`[ZIcon] Using bundled fallback for \"${name}\"`);\n return icon;\n }\n return '';\n}\n\n/**\n * Converts ng-icons icon name to Lucide CDN format.\n * Examples:\n * - lucideArrowLeft -> arrow-left\n * - lucideAlertCircle -> alert-circle\n * - lucideTrash2 -> trash-2\n * - lucideGrid3x3 -> grid-3-x-3\n */\nfunction convertLucideIconName(name: string): string {\n return name\n .replace(/^lucide/, '')\n .replace(/([A-Z])/g, '-$1')\n .replace(/(\\d+)/g, '-$1')\n .replace(/(\\d)([a-z])/g, '$1-$2')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/--+/g, '-');\n}\n\n/**\n * Converts ng-icons Sax icon name to CDN format.\n * Examples:\n * - saxCloudChangeBold -> bold/cloud-change\n * - saxPauseBold -> bold/pause\n * - saxRefreshBold -> bold/refresh\n * - saxHomeOutline -> outline/home\n * - saxUserLinear -> linear/user\n */\nfunction convertIconSaxIconName(name: string): { style: string; iconName: string } | null {\n let iconPart = name.replace(/^sax/, '');\n // Extract style suffix (Bold, Outline, Linear, Bulk, Broken, TwoTone)\n const styleMatch = iconPart.match(/(Bold|Outline|Linear|Bulk|Broken|TwoTone)$/i);\n if (!styleMatch) {\n return null;\n }\n\n const style = styleMatch[1].toLowerCase();\n const styleFolder = style === 'twotone' ? 'twotone' : style;\n iconPart = iconPart.replace(/(Bold|Outline|Linear|Bulk|Broken|TwoTone)$/i, '');\n const iconName = iconPart\n .replace(/([A-Z])/g, '-$1')\n .replace(/(\\d+)/g, '-$1')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/--+/g, '-');\n\n return { style: styleFolder, iconName };\n}\n\n/**\n * Converts ng-icons Phosphor icon name to CDN format.\n * Phosphor weights map to folders, and every weight except \"regular\" carries a\n * file-name suffix (e.g. heart-bold.svg), while regular is just heart.svg.\n * Examples:\n * - phosphorHeart -> regular/heart\n * - phosphorHeartBold -> bold/heart-bold\n * - phosphorHeartFill -> fill/heart-fill\n * - phosphorHeartDuotone -> duotone/heart-duotone\n * - phosphorAddressBookTabsLight -> light/address-book-tabs-light\n */\nfunction convertPhosphorIconName(name: string): { weight: string; iconName: string } {\n let iconPart = name.replace(/^phosphor/, '');\n const weightMatch = iconPart.match(/(Bold|Fill|Light|Thin|Duotone)$/);\n const weight = weightMatch ? weightMatch[1].toLowerCase() : 'regular';\n if (weightMatch) {\n iconPart = iconPart.replace(/(Bold|Fill|Light|Thin|Duotone)$/, '');\n }\n\n const kebab = iconPart\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/--+/g, '-');\n\n const iconName = weight === 'regular' ? kebab : `${kebab}-${weight}`;\n\n return { weight, iconName };\n}\n\n/**\n * Converts ng-icons-style Huge icon name to the @hugeicons/core-free-icons\n * CDN module name. We expose icons with a `huge` prefix over the original\n * PascalCase export name, so we just strip the prefix and append `Icon`.\n * Examples:\n * - hugeHeart -> HeartIcon\n * - hugeHome01 -> Home01Icon\n * - hugeFirstBracketCircle -> FirstBracketCircleIcon\n */\nfunction convertHugeIconName(name: string): string {\n return `${name.replace(/^huge/, '')}Icon`;\n}\n\n/**\n * Converts an ng-icons-style brand icon name into a theSVG CDN slug and an\n * ordered list of variants to try. Icons live at\n * `https://thesvg.org/icons/{slug}/{variant}.svg`.\n *\n * A trailing variant suffix (Default/Color/Light/Dark/Wordmark/Mono) pins that\n * exact variant. Without a suffix we serve the brand's full-color `default`\n * logo and fall back to `mono` (single-color, inherits currentColor) only for\n * the rare brand that ships no default asset. The remaining name is\n * lower-kebab-cased to form the slug.\n * Examples:\n * - brandGithub -> { slug: 'github', variants: ['default', 'mono'] }\n * - brandZalo -> { slug: 'zalo', variants: ['default', 'mono'] } (renders the blue Zalo logo)\n * - brandGithubMono -> { slug: 'github', variants: ['mono'] }\n * - brandSlackWordmark -> { slug: 'slack', variants: ['wordmark'] }\n * - brandGithubActions -> { slug: 'github-actions', variants: ['default', 'mono'] }\n */\nfunction convertBrandIconName(name: string): { slug: string; variants: string[] } {\n let iconPart = name.replace(/^brand/, '');\n const variantMatch = iconPart.match(/(Default|Color|Light|Dark|Wordmark|Mono)$/);\n const variants = variantMatch ? [variantMatch[1].toLowerCase()] : ['default', 'mono'];\n if (variantMatch) {\n iconPart = iconPart.replace(/(Default|Color|Light|Dark|Wordmark|Mono)$/, '');\n }\n\n const slug = iconPart\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/--+/g, '-');\n\n return { slug, variants };\n}\n\nconst LUCIDE_CDN_URL = 'https://cdn.jsdelivr.net/npm/lucide-static@latest/icons';\nconst SAX_CDN_URL = 'https://cdn.jsdelivr.net/gh/placetopay-org/iconsax-vue@main/src/Base';\nconst PHOSPHOR_CDN_URL = 'https://cdn.jsdelivr.net/npm/@phosphor-icons/core@latest/assets';\nconst HUGE_CDN_URL = 'https://cdn.jsdelivr.net/npm/@hugeicons/core-free-icons@4.2.1/dist/esm';\nconst BRAND_CDN_URL = 'https://thesvg.org/icons';\nconst ICON_CDN_TIMEOUT_MS = 2500;\nconst CRITICAL_ICON_FALLBACKS: Record<string, string> = {\n lucideLoader,\n lucideLoader2,\n lucideLoaderCircle,\n lucideLoaderPinwheel,\n};\n\n/**\n * Provides hybrid icon loading from CDN with fallback to bundled icons:\n * - Primary: Load icons from CDN (Lucide & Iconsax)\n * - Fallback: Use bundled icons from Z_ICONS if CDN fails\n *\n * @example\n * ```typescript\n * // app.config.ts\n * providers: [\n * provideHttpClient(),\n * provideZIconLoader(),\n * ]\n * ```\n */\nfunction loadWithCache(\n name: string,\n url: string,\n http: HttpClient,\n normalizer: (svg: string) => string\n): Observable<string> {\n return from(readCachedIconSvg(name)).pipe(\n switchMap(cached => {\n if (cached) {\n return of(cached);\n }\n\n return http.get(url, { responseType: 'text' }).pipe(\n timeout(ICON_CDN_TIMEOUT_MS),\n map(normalizer),\n tap(svg => writeCachedIconSvg(name, svg)),\n catchError(error => {\n console.error(`[ZIcon] Failed to load \"${name}\" from ${url}`, error);\n return of(getFallbackIcon(name));\n })\n );\n }),\n catchError(() => of(getFallbackIcon(name)))\n );\n}\n\n/**\n * Loads a theSVG brand icon, trying each variant in order until one returns a\n * real SVG. theSVG serves a 404 HTML page for missing variants, so we both let\n * HTTP errors fall through to the next variant AND guard against a 200 that\n * isn't actually SVG markup. The first success is cached under the icon name.\n */\nfunction loadBrandWithCache(name: string, slug: string, variants: string[], http: HttpClient): Observable<string> {\n const tryVariant = (index: number): Observable<string> => {\n if (index >= variants.length) {\n return of(getFallbackIcon(name));\n }\n\n const url = `${BRAND_CDN_URL}/${slug}/${variants[index]}.svg`;\n return http.get(url, { responseType: 'text' }).pipe(\n switchMap(svg => {\n if (!svg.trimStart().startsWith('<svg')) {\n return tryVariant(index + 1);\n }\n const normalized = normalizeBrandSvg(svg);\n writeCachedIconSvg(name, normalized);\n return of(normalized);\n }),\n catchError(() => tryVariant(index + 1))\n );\n };\n\n return from(readCachedIconSvg(name)).pipe(\n switchMap(cached => (cached ? of(cached) : tryVariant(0))),\n catchError(() => of(getFallbackIcon(name)))\n );\n}\n\nexport function provideZIconLoader(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideNgIconLoader(name => {\n const http = inject(HttpClient);\n if (name.startsWith('sax')) {\n const parsed = convertIconSaxIconName(name);\n if (!parsed) {\n console.warn(`[ZIcon] Invalid Sax icon name: \"${name}\"`);\n return of(getFallbackIcon(name));\n }\n\n const url = `${SAX_CDN_URL}/${parsed.style}/${parsed.iconName}.svg`;\n return loadWithCache(name, url, http, normalizeSaxSvg);\n }\n\n if (name.startsWith('lucide')) {\n const iconName = convertLucideIconName(name);\n const url = `${LUCIDE_CDN_URL}/${iconName}.svg`;\n return loadWithCache(name, url, http, normalizeLucideSvg);\n }\n\n if (name.startsWith('phosphor')) {\n const { weight, iconName } = convertPhosphorIconName(name);\n const url = `${PHOSPHOR_CDN_URL}/${weight}/${iconName}.svg`;\n return loadWithCache(name, url, http, normalizePhosphorSvg);\n }\n\n if (name.startsWith('huge')) {\n const moduleName = convertHugeIconName(name);\n const url = `${HUGE_CDN_URL}/${moduleName}.js`;\n return loadWithCache(name, url, http, normalizeHugeIconModule);\n }\n\n if (name.startsWith('brand')) {\n const { slug, variants } = convertBrandIconName(name);\n return loadBrandWithCache(name, slug, variants, http);\n }\n\n // console.warn(`[ZIcon] Unknown icon: \"${name}\"`);\n return of(getFallbackIcon(name));\n }, withCaching()),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NgIcon"],"mappings":";;;;;;;;;;;;AAuBA,MAAM,cAAc,GAAG,aAAsE;AAC7F,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAsB,CAAC,gBAAgB,CAAC,CAAC;AAE9E,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAE9C,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,MAAM,CACnC,CAAC,CAAC,UAAU,CAAC,KACX,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,UAAiC,CAAC,CAExG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;AAG9D,SAAU,yBAAyB,CAAC,QAAuB,EAAA;AAC/D,IAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,IAAI;AAC3C;AAEA,SAAS,eAAe,CAAC,UAAkB,EAAA;IACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU;AAEnF,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,iBAAiB,EAAE,OAAO;AAClC,SAAA,OAAO,CAAC,iBAAiB,EAAE,OAAO;AAClC,SAAA,OAAO,CAAC,oBAAoB,EAAE,OAAO;AACrC,SAAA,WAAW,EAAmB;AACnC;;AC5CO,MAAM,oBAAoB,GAAG,YAAY;AACzC,MAAM,kBAAkB,GAAG,QAAQ;AAE1C;;;;;;;AAOG;AACI,MAAM,mBAAmB,GAAG,CAAC;AAO7B,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC;AAC9C,IAAA,MAAM,EAAE,oBAAoB;AAC5B,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC;AAC7D,IAAA,YAAY,EAAE,kBAAkB;AACjC,CAAA,CAAC;AAEF;;;;AAIG;AACI,eAAe,iBAAiB,CAAC,IAAY,EAAA;AAClD,IAAA,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,CAA2B,IAAI,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AACvG,IAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,KAAK,mBAAmB,EAAE;QACzE,OAAO,KAAK,CAAC,GAAG;IAClB;AACA,IAAA,OAAO,IAAI;AACb;AAEA;AACM,SAAU,kBAAkB,CAAC,IAAY,EAAE,GAAW,EAAA;IAC1D,MAAM,KAAK,GAAoB,EAAE,CAAC,EAAE,mBAAmB,EAAE,GAAG,EAAE;AAC9D,IAAA,KAAK,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AACvE;;AC3CA,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC;AAC/B,IAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAA,CAAE,CAAC;AAC/B,CAAC,CAAC,CACH;AAEM,MAAM,aAAa,GAAG,GAAG,CAAC,EAAE,EAAE;AACnC,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE,iBAAiB;AACzB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA;AACF,CAAA;;MCwBY,cAAc,CAAA;AACT,IAAA,KAAK,GAAG,KAAK,CAAa,EAAE,iDAAC;IAC7B,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAS;IACtB,aAAa,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAiB;AACtC,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;AACvB,IAAA,iBAAiB,GAAG,KAAK,CAAwB,QAAQ,6DAAC;AAC1D,IAAA,KAAK,GAAG,KAAK,CAAyB,IAAI,iDAAC;AAC3C,IAAA,YAAY,GAAG,KAAK,CAAS,CAAC,wDAAC;AAC/B,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;AACrB,IAAA,WAAW,GAAG,MAAM,CAAC,EAAE,uDAAC;AACxB,IAAA,aAAa,GAAG,MAAM,CAAC,KAAK,yDAAC;AAC7B,IAAA,aAAa,GAAG,MAAM,CAAC,KAAK,yDAAC;AAC7B,IAAA,aAAa,GAAG,MAAM,CAAC,KAAK,yDAAC;AAC7B,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;AACzB,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE;AACtD,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,IAAA,CAAC,0DAAC;AAEe,IAAA,cAAc,GAAG,MAAM,CAAS,EAAE,0DAAC;AAEjC,IAAA,QAAQ,GAAG,QAAQ,CAAC,MACrC,aAAa,CACX,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EACtC,IAAI,CAAC,KAAK,EAAE,EACZ,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,aAAa,GAAG,EAAE,EAC9C,sBAAsB,CACvB,oDACF;AAEkB,IAAA,YAAY,GAAG,QAAQ,CAAuB,MAAK;AACpE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;QACzC,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,yBAAyB,CAAC,YAAY,CAAC;AAChD,IAAA,CAAC,wDAAC;AAEiB,IAAA,kBAAkB,GAAG,QAAQ,CAA0B,OAAO;AAC/E,QAAA,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE;AAC7B,QAAA,KAAK,EAAE,cAAc;AACrB,QAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AACnC,QAAA,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,KAAA,CAAC,8DAAC;AAEgB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACxC,IAAI,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC3C,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,OAAO,KAAK,OAAO,EAAE;YACvB,OAAO,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;QACrD;AAEA,QAAA,IAAI,OAAO,KAAK,OAAO,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE;QAC7B;AAEA,QAAA,IAAI,OAAO,KAAK,aAAa,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;QAC7E;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,yDAAC;AAEF,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,SAAS,IAAG;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;YACnC,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B;YACF;AAEA,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACxD,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B;YACF;YAEA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,+BAA+B,CAAC;gBACxD;YACF;AAEA,YAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;YACxC,SAAS,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;AAEnC,YAAA,MAAM,QAAQ,GAAG,CAAA,UAAA,EAAa,QAAQ,EAAE;AACxC,YAAA,KAAK;iBACF,GAAG,CAAS,QAAQ,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE;iBACvD,IAAI,CAAC,SAAS,IAAG;AAChB,gBAAA,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE;AAC7B,oBAAA,OAAO,IAAI;gBACb;AACA,gBAAA,IAAI,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE;AACjD,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACzD,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3B,oBAAA,OAAO,IAAI;gBACb;AAEA,gBAAA,OAAO,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAG;AACpE,oBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,wBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAA,CAAA,CAAG,CAAC;oBAC3D;AACA,oBAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;AACxB,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC;iBACA,IAAI,CAAC,UAAU,IAAG;gBACjB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE;oBAC5C;gBACF;gBAEA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE;AACtC,oBAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,CAAA,CAAA,CAAG,CAAC;gBAClE;gBAEA,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;AAC1D,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC;AACnC,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACxG,YAAA,CAAC;iBACA,KAAK,CAAC,KAAK,IAAG;AACb,gBAAA,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE;oBAC7B;gBACF;AACA,gBAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;AAC1D,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACrD,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,SAAS,CAAC,KAAa,EAAA;AAC7B,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;IACjC;AAEU,IAAA,cAAc,CAAC,QAAiB,EAAA;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;AAEU,IAAA,cAAc,CAAC,QAAiB,EAAA;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;AAEU,IAAA,cAAc,CAAC,QAAiB,EAAA;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;AAEQ,IAAA,UAAU,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;IACtD;AAEQ,IAAA,mBAAmB,CAAC,GAAW,EAAA;AACrC,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE;YAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC;AACxD,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe;YACjC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AACzC,gBAAA,OAAO,GAAG;YACZ;YAEA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC3C,YAAA,IACE,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;gBAC9B,KAAK;gBACL,MAAM;gBACN,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAC7B;gBACA,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAC;YACzD;AAEA,YAAA,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC;AAC9B,YAAA,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC;AAE/B,YAAA,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,YAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAG;gBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACtC,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,cAAc,EAAE;AACtD,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC;gBAC3C;gBAEA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC1C,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,cAAc,EAAE;AAC5D,oBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC;gBAC7C;AAEA,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;AACrC,oBAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;oBACpC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE;AACrD,oBAAA,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,EAAE;oBAC3C,MAAM,gBAAgB,GAAG,+CAA+C;AACxE,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,GAAG,eAAe,CAAA,EAAA,EAAK,gBAAgB,CAAA,CAAE,GAAG,gBAAgB,CAAC;gBAC5G;AACF,YAAA,CAAC,CAAC;YAEF,OAAO,KAAK,CAAC,SAAS;QACxB;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,GAAG;QACZ;IACF;uGAhNW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,2BAAA,EAAA,cAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxC3B,oYAOA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDgBYA,eAAM,6GAAE,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAiBxB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAnB1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,WACnB,CAACA,eAAM,EAAE,iBAAiB,CAAC,EAAA,UAAA,EACxB,IAAI,EAAA,eAAA,EAEC,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,SAAS,EAAE,YAAY;AACvB,wBAAA,eAAe,EAAE,yBAAyB;AAC1C,wBAAA,gBAAgB,EAAE,yBAAyB;AAC3C,wBAAA,cAAc,EAAE,sBAAsB;AACtC,wBAAA,cAAc,EAAE,uBAAuB;AACvC,wBAAA,WAAW,EAAE,sBAAsB;AACnC,wBAAA,YAAY,EAAE,uBAAuB;AACrC,wBAAA,cAAc,EAAE,sBAAsB;AACtC,wBAAA,YAAY,EAAE,uBAAuB;AACtC,qBAAA,EAAA,QAAA,EAAA,oYAAA,EAAA;;;AEOI,MAAM,OAAO,GAAG;;ACrCvB;;;AAGG;AACH,SAAS,eAAe,CAAC,GAAW,EAAA;IAClC,MAAM,MAAM,GAAG,uDAAuD;IACtE,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;IACzE,OAAO,UAAU,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC;AAC7D;AAEA;;;;AAIG;AACH,SAAS,kBAAkB,CAAC,GAAW,EAAA;IACrC,MAAM,MAAM,GAAG,uDAAuD;IACtE,OAAO,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC;AACtD;AAEA;;;;AAIG;AACH,SAAS,oBAAoB,CAAC,GAAW,EAAA;AACvC,IAAA,OAAO,GAAG;AACZ;AAEA;;;;;;;;;;;AAWG;AACH,SAAS,iBAAiB,CAAC,GAAW,EAAA;IACpC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;IAC9C,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,yBAAyB,CAAC;AAC5D,IAAA,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,cAAc,EAAE;AACvD,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;AAC5B,IAAA,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;IAC5D,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC;IACpE,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC5C,IAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACrB,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;AAClE,IAAA,OAAO,GAAG,eAAe,CAAA,SAAA,EAAY,IAAI,CAAA,EAAA,EAAK,KAAK,YAAY;AACjE;AAEA;;;;;;AAMG;AACH,SAAS,uBAAuB,CAAC,YAAoB,EAAA;IACnD,MAAM,QAAQ,GAAa,EAAE;IAC7B,MAAM,YAAY,GAAG,4CAA4C;AACjE,IAAA,IAAI,KAA6B;AAEjC,IAAA,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,EAAE;AACzD,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAa,EAAE;QAC1B,MAAM,SAAS,GAAG,8BAA8B;AAChD,QAAA,IAAI,SAAiC;AAErC,QAAA,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE;AACvD,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAC3B,YAAA,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC;AAC1B,YAAA,IAAI,MAAM,KAAK,KAAK,EAAE;gBACpB;YACF;AACA,YAAA,IAAI,MAAM,KAAK,aAAa,EAAE;AAC5B,gBAAA,KAAK,CAAC,IAAI,CAAC,oDAAoD,KAAK,CAAA,EAAA,CAAI,CAAC;gBACzE;YACF;AACA,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE;YACzE,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAG,CAAC;QACtC;AAEA,QAAA,QAAQ,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,GAAA,EAAM,GAAG,CAAA,CAAA,CAAG,CAAC;IACvD;AAEA,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,QAAA,OAAO,EAAE;IACX;IAEA,OAAO,CAAA,8FAAA,EAAiG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ;AACnI;AAEA,SAAS,eAAe,CAAC,IAAY,EAAA;AACnC,IAAA,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC;IAClD,IAAI,YAAY,EAAE;AAChB,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAA4B,CAAC;IAClD,IAAI,IAAI,EAAE;;AAER,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,EAAE;AACX;AAEA;;;;;;;AAOG;AACH,SAAS,qBAAqB,CAAC,IAAY,EAAA;AACzC,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,SAAS,EAAE,EAAE;AACrB,SAAA,OAAO,CAAC,UAAU,EAAE,KAAK;AACzB,SAAA,OAAO,CAAC,QAAQ,EAAE,KAAK;AACvB,SAAA,OAAO,CAAC,cAAc,EAAE,OAAO;AAC/B,SAAA,WAAW;AACX,SAAA,OAAO,CAAC,IAAI,EAAE,EAAE;AAChB,SAAA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AACzB;AAEA;;;;;;;;AAQG;AACH,SAAS,sBAAsB,CAAC,IAAY,EAAA;IAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;;IAEvC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,6CAA6C,CAAC;IAChF,IAAI,CAAC,UAAU,EAAE;AACf,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACzC,IAAA,MAAM,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,KAAK;IAC3D,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,6CAA6C,EAAE,EAAE,CAAC;IAC9E,MAAM,QAAQ,GAAG;AACd,SAAA,OAAO,CAAC,UAAU,EAAE,KAAK;AACzB,SAAA,OAAO,CAAC,QAAQ,EAAE,KAAK;AACvB,SAAA,WAAW;AACX,SAAA,OAAO,CAAC,IAAI,EAAE,EAAE;AAChB,SAAA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AAEvB,IAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE;AACzC;AAEA;;;;;;;;;;AAUG;AACH,SAAS,uBAAuB,CAAC,IAAY,EAAA;IAC3C,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,iCAAiC,CAAC;AACrE,IAAA,MAAM,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS;IACrE,IAAI,WAAW,EAAE;QACf,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC;IACpE;IAEA,MAAM,KAAK,GAAG;AACX,SAAA,OAAO,CAAC,oBAAoB,EAAE,OAAO;AACrC,SAAA,OAAO,CAAC,sBAAsB,EAAE,OAAO;AACvC,SAAA,WAAW;AACX,SAAA,OAAO,CAAC,IAAI,EAAE,EAAE;AAChB,SAAA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AAEvB,IAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,SAAS,GAAG,KAAK,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,MAAM,EAAE;AAEpE,IAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC7B;AAEA;;;;;;;;AAQG;AACH,SAAS,mBAAmB,CAAC,IAAY,EAAA;IACvC,OAAO,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA,IAAA,CAAM;AAC3C;AAEA;;;;;;;;;;;;;;;;AAgBG;AACH,SAAS,oBAAoB,CAAC,IAAY,EAAA;IACxC,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,2CAA2C,CAAC;IAChF,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;IACrF,IAAI,YAAY,EAAE;QAChB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,2CAA2C,EAAE,EAAE,CAAC;IAC9E;IAEA,MAAM,IAAI,GAAG;AACV,SAAA,OAAO,CAAC,oBAAoB,EAAE,OAAO;AACrC,SAAA,OAAO,CAAC,sBAAsB,EAAE,OAAO;AACvC,SAAA,WAAW;AACX,SAAA,OAAO,CAAC,IAAI,EAAE,EAAE;AAChB,SAAA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AAEvB,IAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC3B;AAEA,MAAM,cAAc,GAAG,yDAAyD;AAChF,MAAM,WAAW,GAAG,sEAAsE;AAC1F,MAAM,gBAAgB,GAAG,iEAAiE;AAC1F,MAAM,YAAY,GAAG,wEAAwE;AAC7F,MAAM,aAAa,GAAG,0BAA0B;AAChD,MAAM,mBAAmB,GAAG,IAAI;AAChC,MAAM,uBAAuB,GAA2B;IACtD,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,oBAAoB;CACrB;AAED;;;;;;;;;;;;;AAaG;AACH,SAAS,aAAa,CACpB,IAAY,EACZ,GAAW,EACX,IAAgB,EAChB,UAAmC,EAAA;AAEnC,IAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACvC,SAAS,CAAC,MAAM,IAAG;QACjB,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,EAAE,CAAC,MAAM,CAAC;QACnB;AAEA,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CACjD,OAAO,CAAC,mBAAmB,CAAC,EAC5B,GAAG,CAAC,UAAU,CAAC,EACf,GAAG,CAAC,GAAG,IAAI,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EACzC,UAAU,CAAC,KAAK,IAAG;YACjB,OAAO,CAAC,KAAK,CAAC,CAAA,wBAAA,EAA2B,IAAI,CAAA,OAAA,EAAU,GAAG,CAAA,CAAE,EAAE,KAAK,CAAC;AACpE,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CACH;AACH,IAAA,CAAC,CAAC,EACF,UAAU,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5C;AACH;AAEA;;;;;AAKG;AACH,SAAS,kBAAkB,CAAC,IAAY,EAAE,IAAY,EAAE,QAAkB,EAAE,IAAgB,EAAA;AAC1F,IAAA,MAAM,UAAU,GAAG,CAAC,KAAa,KAAwB;AACvD,QAAA,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE;AAC5B,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAClC;AAEA,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAC,KAAK,CAAC,CAAA,IAAA,CAAM;AAC7D,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CACjD,SAAS,CAAC,GAAG,IAAG;YACd,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACvC,gBAAA,OAAO,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;YAC9B;AACA,YAAA,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC;AACzC,YAAA,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC;AACpC,YAAA,OAAO,EAAE,CAAC,UAAU,CAAC;AACvB,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CACxC;AACH,IAAA,CAAC;IAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACvC,SAAS,CAAC,MAAM,KAAK,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1D,UAAU,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5C;AACH;SAEgB,kBAAkB,GAAA;AAChC,IAAA,OAAO,wBAAwB,CAAC;QAC9B,mBAAmB,CAAC,IAAI,IAAG;AACzB,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AAC1B,gBAAA,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC;gBAC3C,IAAI,CAAC,MAAM,EAAE;AACX,oBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,IAAI,CAAA,CAAA,CAAG,CAAC;AACxD,oBAAA,OAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBAClC;AAEA,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,MAAM;gBACnE,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,CAAC;YACxD;AAEA,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC7B,gBAAA,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC;AAC5C,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,QAAQ,MAAM;gBAC/C,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,CAAC;YAC3D;AAEA,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;gBAC/B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,uBAAuB,CAAC,IAAI,CAAC;gBAC1D,MAAM,GAAG,GAAG,CAAA,EAAG,gBAAgB,IAAI,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,IAAA,CAAM;gBAC3D,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,oBAAoB,CAAC;YAC7D;AAEA,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC3B,gBAAA,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC;AAC5C,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,UAAU,KAAK;gBAC9C,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,uBAAuB,CAAC;YAChE;AAEA,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;gBAC5B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC;gBACrD,OAAO,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;YACvD;;AAGA,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,EAAE,WAAW,EAAE,CAAC;AAClB,KAAA,CAAC;AACJ;;AClYA;;AAEG;;;;"}