@shival99/z-ui 1.2.12 → 1.2.14

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 (30) hide show
  1. package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs +4 -12
  2. package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs.map +1 -1
  3. package/fesm2022/shival99-z-ui-components-z-icon.mjs +31 -18
  4. package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
  5. package/fesm2022/shival99-z-ui-components-z-select.mjs +5 -5
  6. package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -1
  7. package/fesm2022/shival99-z-ui-components-z-table.mjs +35 -8
  8. package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
  9. package/fesm2022/shival99-z-ui-providers.mjs +9 -28
  10. package/fesm2022/shival99-z-ui-providers.mjs.map +1 -1
  11. package/fesm2022/shival99-z-ui-services.mjs +27 -70
  12. package/fesm2022/shival99-z-ui-services.mjs.map +1 -1
  13. package/fesm2022/shival99-z-ui-utils.mjs +2 -1
  14. package/fesm2022/shival99-z-ui-utils.mjs.map +1 -1
  15. package/package.json +1 -1
  16. package/types/shival99-z-ui-components-z-breadcrumb.d.ts +2 -2
  17. package/types/shival99-z-ui-components-z-button.d.ts +1 -1
  18. package/types/shival99-z-ui-components-z-calendar.d.ts +4 -4
  19. package/types/shival99-z-ui-components-z-dropdown-menu.d.ts +4 -5
  20. package/types/shival99-z-ui-components-z-empty.d.ts +1 -1
  21. package/types/shival99-z-ui-components-z-filter.d.ts +1 -1
  22. package/types/shival99-z-ui-components-z-icon.d.ts +2 -15
  23. package/types/shival99-z-ui-components-z-input.d.ts +2 -2
  24. package/types/shival99-z-ui-components-z-modal.d.ts +1 -1
  25. package/types/shival99-z-ui-components-z-select.d.ts +3 -3
  26. package/types/shival99-z-ui-components-z-table.d.ts +6 -1
  27. package/types/shival99-z-ui-components-z-timeline.d.ts +6 -6
  28. package/types/shival99-z-ui-components-z-upload.d.ts +3 -3
  29. package/types/shival99-z-ui-providers.d.ts +0 -8
  30. package/types/shival99-z-ui-services.d.ts +2 -46
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, viewChild, signal, output, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { input, viewChild, signal, output, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { TranslatePipe } from '@ngx-translate/core';
4
4
  import { ZButtonComponent } from '@shival99/z-ui/components/z-button';
5
5
  import { ZIconComponent } from '@shival99/z-ui/components/z-icon';
@@ -21,6 +21,7 @@ class ZDropdownMenuComponent {
21
21
  hasContent = signal(false, ...(ngDevMode ? [{ debugName: "hasContent" }] : []));
22
22
  zOnItemClick = output();
23
23
  popoverControl = signal(null, ...(ngDevMode ? [{ debugName: "popoverControl" }] : []));
24
+ visibleItems = computed(() => this.zItems().filter(item => !item.hidden), ...(ngDevMode ? [{ debugName: "visibleItems" }] : []));
24
25
  ngAfterContentInit() {
25
26
  const wrapper = this.contentWrapper();
26
27
  if (wrapper) {
@@ -39,21 +40,12 @@ class ZDropdownMenuComponent {
39
40
  onControl(control) {
40
41
  this.popoverControl.set(control);
41
42
  }
42
- shouldShowDividerBefore(item, index) {
43
- return item.divide === 'before' && index > 0;
44
- }
45
- shouldShowDividerAfter(item, index) {
46
- return item.divide === 'after' && index < this.zItems().length - 1;
47
- }
48
- getVisibleItems() {
49
- return this.zItems().filter(item => !item.hidden);
50
- }
51
43
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ZDropdownMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
52
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ZDropdownMenuComponent, isStandalone: true, selector: "z-dropdown-menu", inputs: { zItems: { classPropertyName: "zItems", publicName: "zItems", isSignal: true, isRequired: true, transformFunction: null }, zLabel: { classPropertyName: "zLabel", publicName: "zLabel", isSignal: true, isRequired: false, transformFunction: null }, zIcon: { classPropertyName: "zIcon", publicName: "zIcon", isSignal: true, isRequired: false, transformFunction: null }, zButtonType: { classPropertyName: "zButtonType", publicName: "zButtonType", isSignal: true, isRequired: false, transformFunction: null }, zPosition: { classPropertyName: "zPosition", publicName: "zPosition", isSignal: true, isRequired: false, transformFunction: null }, zButtonSize: { classPropertyName: "zButtonSize", publicName: "zButtonSize", isSignal: true, isRequired: false, transformFunction: null }, zOffset: { classPropertyName: "zOffset", publicName: "zOffset", isSignal: true, isRequired: false, transformFunction: null }, zMinWidth: { classPropertyName: "zMinWidth", publicName: "zMinWidth", isSignal: true, isRequired: false, transformFunction: null }, zMaxWidth: { classPropertyName: "zMaxWidth", publicName: "zMaxWidth", isSignal: true, isRequired: false, transformFunction: null }, zDisabled: { classPropertyName: "zDisabled", publicName: "zDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zOnItemClick: "zOnItemClick" }, providers: [TranslatePipe], viewQueries: [{ propertyName: "contentWrapper", first: true, predicate: ["contentWrapper"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Custom trigger via ng-content -->\n<div\n #contentWrapper\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zDisabled]=\"zDisabled()\"\n (zControl)=\"onControl($event)\"\n [class.hidden]=\"!hasContent()\">\n <ng-content />\n</div>\n\n<!-- Default button trigger -->\n@if (!hasContent()) {\n <button\n type=\"button\"\n z-button\n [zType]=\"zButtonType()\"\n [zSize]=\"zButtonSize()\"\n [zDisabled]=\"zDisabled()\"\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zTypeIcon]=\"zIcon()!\"\n (zControl)=\"onControl($event)\">\n @if (zLabel()) {\n {{ zLabel() | translate }}\n }\n </button>\n}\n\n<!-- Menu content template -->\n<ng-template #menuContent let-close=\"close\">\n <div class=\"z-dropdown-menu-content p-1\" [style.min-width.px]=\"zMinWidth()\" [style.max-width.px]=\"zMaxWidth()\">\n @for (item of getVisibleItems(); track $index) {\n <!-- Divider before -->\n @if (shouldShowDividerBefore(item, $index)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <!-- Menu item - check if has submenu -->\n @if (item.submenu && item.submenu.length > 0) {\n <!-- Menu item with nested submenu -->\n <button\n type=\"button\"\n z-popover\n [zPopoverContent]=\"submenuTemplate\"\n [zPosition]=\"item.submenuPosition || 'right'\"\n zTrigger=\"hover\"\n [zShowDelay]=\"200\"\n [zHideDelay]=\"100\"\n [zOffset]=\"6\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent data-[state=open]:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n <z-icon zType=\"lucideChevronRight\" zSize=\"14\" class=\"ml-auto shrink-0\" />\n </button>\n\n <!-- Submenu template -->\n <ng-template #submenuTemplate>\n <div\n class=\"p-1\"\n [style.min-width.px]=\"item.subMinWidth || zMinWidth()\"\n [style.max-width.px]=\"item.subMaxWidth || zMaxWidth()\">\n @for (subItem of item.submenu; track subItem.label) {\n <!-- Nested divider before -->\n @if (subItem.divide === 'before') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n [disabled]=\"subItem.disabled\"\n [class]=\"subItem.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(subItem)\">\n @if (subItem.icon) {\n <z-icon [zType]=\"subItem.icon\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"subItem.label\"\n [zShowDelay]=\"200\"\n zTrigger=\"hover\"\n zPosition=\"top\">\n {{ subItem.label }}\n </span>\n @if (subItem.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ subItem.shortcut }}\n </span>\n }\n </button>\n\n <!-- Nested divider after -->\n @if (subItem.divide === 'after') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n </ng-template>\n } @else {\n <!-- Regular menu item (no submenu) -->\n <button\n type=\"button\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(item)\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">{{ item.shortcut }}</span>\n }\n </button>\n }\n\n <!-- Divider after -->\n @if (shouldShowDividerAfter(item, $index)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n</ng-template>\n", styles: [".z-dropdown-menu-content{min-width:inherit}\n"], dependencies: [{ kind: "directive", type: ZPopoverDirective, selector: "[z-popover]", inputs: ["zPopoverContent", "zPosition", "zTrigger", "zClass", "zShowDelay", "zHideDelay", "zDisabled", "zOffset", "zPopoverWidth", "zManualClose", "zScrollClose", "zShowArrow"], outputs: ["zShow", "zHide", "zHideStart", "zControl"], exportAs: ["zPopover"] }, { kind: "component", type: ZButtonComponent, selector: "z-button, button[z-button], a[z-button]", inputs: ["class", "zType", "zSize", "zShape", "zLabel", "zLoading", "zDisabled", "zTypeIcon", "zSizeIcon", "zStrokeWidthIcon", "zWave"], exportAs: ["zButton"] }, { kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zSize", "zStrokeWidth", "zSvg"] }, { kind: "directive", type: ZTooltipDirective, selector: "[z-tooltip], [zTooltip]", inputs: ["zContent", "zPosition", "zTrigger", "zTooltipType", "zTooltipSize", "zClass", "zShowDelay", "zHideDelay", "zArrow", "zDisabled", "zOffset", "zAutoDetect", "zTriggerElement", "zAlwaysShow", "zMaxWidth"], outputs: ["zShow", "zHide"], exportAs: ["zTooltip"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
44
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ZDropdownMenuComponent, isStandalone: true, selector: "z-dropdown-menu", inputs: { zItems: { classPropertyName: "zItems", publicName: "zItems", isSignal: true, isRequired: true, transformFunction: null }, zLabel: { classPropertyName: "zLabel", publicName: "zLabel", isSignal: true, isRequired: false, transformFunction: null }, zIcon: { classPropertyName: "zIcon", publicName: "zIcon", isSignal: true, isRequired: false, transformFunction: null }, zButtonType: { classPropertyName: "zButtonType", publicName: "zButtonType", isSignal: true, isRequired: false, transformFunction: null }, zPosition: { classPropertyName: "zPosition", publicName: "zPosition", isSignal: true, isRequired: false, transformFunction: null }, zButtonSize: { classPropertyName: "zButtonSize", publicName: "zButtonSize", isSignal: true, isRequired: false, transformFunction: null }, zOffset: { classPropertyName: "zOffset", publicName: "zOffset", isSignal: true, isRequired: false, transformFunction: null }, zMinWidth: { classPropertyName: "zMinWidth", publicName: "zMinWidth", isSignal: true, isRequired: false, transformFunction: null }, zMaxWidth: { classPropertyName: "zMaxWidth", publicName: "zMaxWidth", isSignal: true, isRequired: false, transformFunction: null }, zDisabled: { classPropertyName: "zDisabled", publicName: "zDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zOnItemClick: "zOnItemClick" }, providers: [TranslatePipe], viewQueries: [{ propertyName: "contentWrapper", first: true, predicate: ["contentWrapper"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Custom trigger via ng-content -->\n<div\n #contentWrapper\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zDisabled]=\"zDisabled()\"\n (zControl)=\"onControl($event)\"\n [class.hidden]=\"!hasContent()\">\n <ng-content />\n</div>\n\n<!-- Default button trigger -->\n@if (!hasContent()) {\n <button\n type=\"button\"\n z-button\n [zType]=\"zButtonType()\"\n [zSize]=\"zButtonSize()\"\n [zDisabled]=\"zDisabled()\"\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zTypeIcon]=\"zIcon()!\"\n (zControl)=\"onControl($event)\">\n @if (zLabel()) {\n {{ zLabel() | translate }}\n }\n </button>\n}\n\n<!-- Menu content template -->\n<ng-template #menuContent let-close=\"close\">\n <div class=\"z-dropdown-menu-content p-1\" [style.min-width.px]=\"zMinWidth()\" [style.max-width.px]=\"zMaxWidth()\">\n @for (item of visibleItems(); track $index) {\n @if (item.divide === 'before' && $index > 0) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <!-- Menu item - check if has submenu -->\n @if (item.submenu && item.submenu.length > 0) {\n <!-- Menu item with nested submenu -->\n <button\n type=\"button\"\n z-popover\n [zPopoverContent]=\"submenuTemplate\"\n [zPosition]=\"item.submenuPosition || 'right'\"\n zTrigger=\"hover\"\n [zShowDelay]=\"200\"\n [zHideDelay]=\"100\"\n [zOffset]=\"6\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent data-[state=open]:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n <z-icon zType=\"lucideChevronRight\" zSize=\"14\" class=\"ml-auto shrink-0\" />\n </button>\n\n <!-- Submenu template -->\n <ng-template #submenuTemplate>\n <div\n class=\"p-1\"\n [style.min-width.px]=\"item.subMinWidth || zMinWidth()\"\n [style.max-width.px]=\"item.subMaxWidth || zMaxWidth()\">\n @for (subItem of item.submenu; track subItem.label) {\n <!-- Nested divider before -->\n @if (subItem.divide === 'before') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n [disabled]=\"subItem.disabled\"\n [class]=\"subItem.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(subItem)\">\n @if (subItem.icon) {\n <z-icon\n [zType]=\"subItem.icon\"\n [zSize]=\"subItem.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"subItem.label\"\n [zShowDelay]=\"200\"\n zTrigger=\"hover\"\n zPosition=\"top\">\n {{ subItem.label }}\n </span>\n @if (subItem.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ subItem.shortcut }}\n </span>\n }\n </button>\n\n <!-- Nested divider after -->\n @if (subItem.divide === 'after') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n </ng-template>\n } @else {\n <!-- Regular menu item (no submenu) -->\n <button\n type=\"button\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(item)\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">{{ item.shortcut }}</span>\n }\n </button>\n }\n\n <!-- Divider after -->\n @if (item.divide === 'after' && $index < visibleItems().length - 1) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n</ng-template>\n", styles: [".z-dropdown-menu-content{min-width:inherit}\n"], dependencies: [{ kind: "directive", type: ZPopoverDirective, selector: "[z-popover]", inputs: ["zPopoverContent", "zPosition", "zTrigger", "zClass", "zShowDelay", "zHideDelay", "zDisabled", "zOffset", "zPopoverWidth", "zManualClose", "zScrollClose", "zShowArrow"], outputs: ["zShow", "zHide", "zHideStart", "zControl"], exportAs: ["zPopover"] }, { kind: "component", type: ZButtonComponent, selector: "z-button, button[z-button], a[z-button]", inputs: ["class", "zType", "zSize", "zShape", "zLabel", "zLoading", "zDisabled", "zTypeIcon", "zSizeIcon", "zStrokeWidthIcon", "zWave"], exportAs: ["zButton"] }, { kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zSize", "zStrokeWidth", "zSvg"] }, { kind: "directive", type: ZTooltipDirective, selector: "[z-tooltip], [zTooltip]", inputs: ["zContent", "zPosition", "zTrigger", "zTooltipType", "zTooltipSize", "zClass", "zShowDelay", "zHideDelay", "zArrow", "zDisabled", "zOffset", "zAutoDetect", "zTriggerElement", "zAlwaysShow", "zMaxWidth"], outputs: ["zShow", "zHide"], exportAs: ["zTooltip"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
53
45
  }
54
46
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ZDropdownMenuComponent, decorators: [{
55
47
  type: Component,
56
- args: [{ selector: 'z-dropdown-menu', imports: [ZPopoverDirective, ZButtonComponent, ZIconComponent, ZTooltipDirective, TranslatePipe], standalone: true, providers: [TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Custom trigger via ng-content -->\n<div\n #contentWrapper\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zDisabled]=\"zDisabled()\"\n (zControl)=\"onControl($event)\"\n [class.hidden]=\"!hasContent()\">\n <ng-content />\n</div>\n\n<!-- Default button trigger -->\n@if (!hasContent()) {\n <button\n type=\"button\"\n z-button\n [zType]=\"zButtonType()\"\n [zSize]=\"zButtonSize()\"\n [zDisabled]=\"zDisabled()\"\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zTypeIcon]=\"zIcon()!\"\n (zControl)=\"onControl($event)\">\n @if (zLabel()) {\n {{ zLabel() | translate }}\n }\n </button>\n}\n\n<!-- Menu content template -->\n<ng-template #menuContent let-close=\"close\">\n <div class=\"z-dropdown-menu-content p-1\" [style.min-width.px]=\"zMinWidth()\" [style.max-width.px]=\"zMaxWidth()\">\n @for (item of getVisibleItems(); track $index) {\n <!-- Divider before -->\n @if (shouldShowDividerBefore(item, $index)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <!-- Menu item - check if has submenu -->\n @if (item.submenu && item.submenu.length > 0) {\n <!-- Menu item with nested submenu -->\n <button\n type=\"button\"\n z-popover\n [zPopoverContent]=\"submenuTemplate\"\n [zPosition]=\"item.submenuPosition || 'right'\"\n zTrigger=\"hover\"\n [zShowDelay]=\"200\"\n [zHideDelay]=\"100\"\n [zOffset]=\"6\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent data-[state=open]:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n <z-icon zType=\"lucideChevronRight\" zSize=\"14\" class=\"ml-auto shrink-0\" />\n </button>\n\n <!-- Submenu template -->\n <ng-template #submenuTemplate>\n <div\n class=\"p-1\"\n [style.min-width.px]=\"item.subMinWidth || zMinWidth()\"\n [style.max-width.px]=\"item.subMaxWidth || zMaxWidth()\">\n @for (subItem of item.submenu; track subItem.label) {\n <!-- Nested divider before -->\n @if (subItem.divide === 'before') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n [disabled]=\"subItem.disabled\"\n [class]=\"subItem.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(subItem)\">\n @if (subItem.icon) {\n <z-icon [zType]=\"subItem.icon\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"subItem.label\"\n [zShowDelay]=\"200\"\n zTrigger=\"hover\"\n zPosition=\"top\">\n {{ subItem.label }}\n </span>\n @if (subItem.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ subItem.shortcut }}\n </span>\n }\n </button>\n\n <!-- Nested divider after -->\n @if (subItem.divide === 'after') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n </ng-template>\n } @else {\n <!-- Regular menu item (no submenu) -->\n <button\n type=\"button\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(item)\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">{{ item.shortcut }}</span>\n }\n </button>\n }\n\n <!-- Divider after -->\n @if (shouldShowDividerAfter(item, $index)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n</ng-template>\n", styles: [".z-dropdown-menu-content{min-width:inherit}\n"] }]
48
+ args: [{ selector: 'z-dropdown-menu', imports: [ZPopoverDirective, ZButtonComponent, ZIconComponent, ZTooltipDirective, TranslatePipe], standalone: true, providers: [TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Custom trigger via ng-content -->\n<div\n #contentWrapper\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zDisabled]=\"zDisabled()\"\n (zControl)=\"onControl($event)\"\n [class.hidden]=\"!hasContent()\">\n <ng-content />\n</div>\n\n<!-- Default button trigger -->\n@if (!hasContent()) {\n <button\n type=\"button\"\n z-button\n [zType]=\"zButtonType()\"\n [zSize]=\"zButtonSize()\"\n [zDisabled]=\"zDisabled()\"\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zTypeIcon]=\"zIcon()!\"\n (zControl)=\"onControl($event)\">\n @if (zLabel()) {\n {{ zLabel() | translate }}\n }\n </button>\n}\n\n<!-- Menu content template -->\n<ng-template #menuContent let-close=\"close\">\n <div class=\"z-dropdown-menu-content p-1\" [style.min-width.px]=\"zMinWidth()\" [style.max-width.px]=\"zMaxWidth()\">\n @for (item of visibleItems(); track $index) {\n @if (item.divide === 'before' && $index > 0) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <!-- Menu item - check if has submenu -->\n @if (item.submenu && item.submenu.length > 0) {\n <!-- Menu item with nested submenu -->\n <button\n type=\"button\"\n z-popover\n [zPopoverContent]=\"submenuTemplate\"\n [zPosition]=\"item.submenuPosition || 'right'\"\n zTrigger=\"hover\"\n [zShowDelay]=\"200\"\n [zHideDelay]=\"100\"\n [zOffset]=\"6\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent data-[state=open]:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n <z-icon zType=\"lucideChevronRight\" zSize=\"14\" class=\"ml-auto shrink-0\" />\n </button>\n\n <!-- Submenu template -->\n <ng-template #submenuTemplate>\n <div\n class=\"p-1\"\n [style.min-width.px]=\"item.subMinWidth || zMinWidth()\"\n [style.max-width.px]=\"item.subMaxWidth || zMaxWidth()\">\n @for (subItem of item.submenu; track subItem.label) {\n <!-- Nested divider before -->\n @if (subItem.divide === 'before') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n [disabled]=\"subItem.disabled\"\n [class]=\"subItem.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(subItem)\">\n @if (subItem.icon) {\n <z-icon\n [zType]=\"subItem.icon\"\n [zSize]=\"subItem.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"subItem.label\"\n [zShowDelay]=\"200\"\n zTrigger=\"hover\"\n zPosition=\"top\">\n {{ subItem.label }}\n </span>\n @if (subItem.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ subItem.shortcut }}\n </span>\n }\n </button>\n\n <!-- Nested divider after -->\n @if (subItem.divide === 'after') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n </ng-template>\n } @else {\n <!-- Regular menu item (no submenu) -->\n <button\n type=\"button\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(item)\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">{{ item.shortcut }}</span>\n }\n </button>\n }\n\n <!-- Divider after -->\n @if (item.divide === 'after' && $index < visibleItems().length - 1) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n</ng-template>\n", styles: [".z-dropdown-menu-content{min-width:inherit}\n"] }]
57
49
  }], propDecorators: { zItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "zItems", required: true }] }], zLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLabel", required: false }] }], zIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIcon", required: false }] }], zButtonType: [{ type: i0.Input, args: [{ isSignal: true, alias: "zButtonType", required: false }] }], zPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "zPosition", required: false }] }], zButtonSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zButtonSize", required: false }] }], zOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "zOffset", required: false }] }], zMinWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "zMinWidth", required: false }] }], zMaxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "zMaxWidth", required: false }] }], zDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDisabled", required: false }] }], contentWrapper: [{ type: i0.ViewChild, args: ['contentWrapper', { isSignal: true }] }], zOnItemClick: [{ type: i0.Output, args: ["zOnItemClick"] }] } });
58
50
 
59
51
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"shival99-z-ui-components-z-dropdown-menu.mjs","sources":["../../../../libs/core-ui/components/z-dropdown-menu/z-dropdown-menu.component.ts","../../../../libs/core-ui/components/z-dropdown-menu/z-dropdown-menu.component.html","../../../../libs/core-ui/components/z-dropdown-menu/shival99-z-ui-components-z-dropdown-menu.ts"],"sourcesContent":["import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent, ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport { type ZPopoverPosition } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZDropdownMenuItem } from './z-dropdown-menu.types';\n\n@Component({\n selector: 'z-dropdown-menu',\n imports: [ZPopoverDirective, ZButtonComponent, ZIconComponent, ZTooltipDirective, TranslatePipe],\n standalone: true,\n templateUrl: './z-dropdown-menu.component.html',\n styleUrl: './z-dropdown-menu.component.scss',\n providers: [TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZDropdownMenuComponent implements AfterContentInit {\n public readonly zItems = input.required<ZDropdownMenuItem[]>();\n public readonly zLabel = input<string>();\n public readonly zIcon = input<ZIcon>('lucideMenu');\n public readonly zButtonType = input<'primary' | 'secondary' | 'outline' | 'ghost'>('outline');\n public readonly zPosition = input<ZPopoverPosition>('bottom-right');\n public readonly zButtonSize = input<ZButtonVariants['zSize']>('default');\n public readonly zOffset = input<number>(4);\n public readonly zMinWidth = input<number>(224);\n public readonly zMaxWidth = input<number>(320);\n public readonly zDisabled = input<boolean>(false);\n\n protected readonly contentWrapper = viewChild<ElementRef<HTMLElement>>('contentWrapper');\n protected readonly hasContent = signal(false);\n public readonly zOnItemClick = output<ZDropdownMenuItem>();\n protected readonly popoverControl = signal<{ close: () => void; closeImmediate: () => void } | null>(null);\n\n public ngAfterContentInit(): void {\n const wrapper = this.contentWrapper();\n if (wrapper) {\n const hasProjectedContent = wrapper.nativeElement.children.length > 0;\n this.hasContent.set(hasProjectedContent);\n }\n }\n\n protected onItemClick(item: ZDropdownMenuItem): void {\n if (item.disabled) {\n return;\n }\n\n item.onClick?.();\n this.zOnItemClick.emit(item);\n this.popoverControl()?.closeImmediate();\n }\n\n protected onControl(control: { close: () => void; closeImmediate: () => void }): void {\n this.popoverControl.set(control);\n }\n\n protected shouldShowDividerBefore(item: ZDropdownMenuItem, index: number): boolean {\n return item.divide === 'before' && index > 0;\n }\n\n protected shouldShowDividerAfter(item: ZDropdownMenuItem, index: number): boolean {\n return item.divide === 'after' && index < this.zItems().length - 1;\n }\n\n protected getVisibleItems(): ZDropdownMenuItem[] {\n return this.zItems().filter(item => !item.hidden);\n }\n}\n","<!-- Custom trigger via ng-content -->\n<div\n #contentWrapper\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zDisabled]=\"zDisabled()\"\n (zControl)=\"onControl($event)\"\n [class.hidden]=\"!hasContent()\">\n <ng-content />\n</div>\n\n<!-- Default button trigger -->\n@if (!hasContent()) {\n <button\n type=\"button\"\n z-button\n [zType]=\"zButtonType()\"\n [zSize]=\"zButtonSize()\"\n [zDisabled]=\"zDisabled()\"\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zTypeIcon]=\"zIcon()!\"\n (zControl)=\"onControl($event)\">\n @if (zLabel()) {\n {{ zLabel() | translate }}\n }\n </button>\n}\n\n<!-- Menu content template -->\n<ng-template #menuContent let-close=\"close\">\n <div class=\"z-dropdown-menu-content p-1\" [style.min-width.px]=\"zMinWidth()\" [style.max-width.px]=\"zMaxWidth()\">\n @for (item of getVisibleItems(); track $index) {\n <!-- Divider before -->\n @if (shouldShowDividerBefore(item, $index)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <!-- Menu item - check if has submenu -->\n @if (item.submenu && item.submenu.length > 0) {\n <!-- Menu item with nested submenu -->\n <button\n type=\"button\"\n z-popover\n [zPopoverContent]=\"submenuTemplate\"\n [zPosition]=\"item.submenuPosition || 'right'\"\n zTrigger=\"hover\"\n [zShowDelay]=\"200\"\n [zHideDelay]=\"100\"\n [zOffset]=\"6\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent data-[state=open]:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n <z-icon zType=\"lucideChevronRight\" zSize=\"14\" class=\"ml-auto shrink-0\" />\n </button>\n\n <!-- Submenu template -->\n <ng-template #submenuTemplate>\n <div\n class=\"p-1\"\n [style.min-width.px]=\"item.subMinWidth || zMinWidth()\"\n [style.max-width.px]=\"item.subMaxWidth || zMaxWidth()\">\n @for (subItem of item.submenu; track subItem.label) {\n <!-- Nested divider before -->\n @if (subItem.divide === 'before') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n [disabled]=\"subItem.disabled\"\n [class]=\"subItem.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(subItem)\">\n @if (subItem.icon) {\n <z-icon [zType]=\"subItem.icon\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"subItem.label\"\n [zShowDelay]=\"200\"\n zTrigger=\"hover\"\n zPosition=\"top\">\n {{ subItem.label }}\n </span>\n @if (subItem.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ subItem.shortcut }}\n </span>\n }\n </button>\n\n <!-- Nested divider after -->\n @if (subItem.divide === 'after') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n </ng-template>\n } @else {\n <!-- Regular menu item (no submenu) -->\n <button\n type=\"button\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(item)\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">{{ item.shortcut }}</span>\n }\n </button>\n }\n\n <!-- Divider after -->\n @if (shouldShowDividerAfter(item, $index)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;MA4Ba,sBAAsB,CAAA;AACjB,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAAuB;IAC9C,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AACxB,IAAA,KAAK,GAAG,KAAK,CAAQ,YAAY,iDAAC;AAClC,IAAA,WAAW,GAAG,KAAK,CAAgD,SAAS,uDAAC;AAC7E,IAAA,SAAS,GAAG,KAAK,CAAmB,cAAc,qDAAC;AACnD,IAAA,WAAW,GAAG,KAAK,CAA2B,SAAS,uDAAC;AACxD,IAAA,OAAO,GAAG,KAAK,CAAS,CAAC,mDAAC;AAC1B,IAAA,SAAS,GAAG,KAAK,CAAS,GAAG,qDAAC;AAC9B,IAAA,SAAS,GAAG,KAAK,CAAS,GAAG,qDAAC;AAC9B,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,qDAAC;AAE9B,IAAA,cAAc,GAAG,SAAS,CAA0B,gBAAgB,0DAAC;AACrE,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;IAC7B,YAAY,GAAG,MAAM,EAAqB;AACvC,IAAA,cAAc,GAAG,MAAM,CAA2D,IAAI,0DAAC;IAEnG,kBAAkB,GAAA;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;QACrC,IAAI,OAAO,EAAE;YACX,MAAM,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;AACrE,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC1C;IACF;AAEU,IAAA,WAAW,CAAC,IAAuB,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,IAAI;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,cAAc,EAAE,EAAE,cAAc,EAAE;IACzC;AAEU,IAAA,SAAS,CAAC,OAA0D,EAAA;AAC5E,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;IAClC;IAEU,uBAAuB,CAAC,IAAuB,EAAE,KAAa,EAAA;QACtE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC;IAC9C;IAEU,sBAAsB,CAAC,IAAuB,EAAE,KAAa,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC;IACpE;IAEU,eAAe,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACnD;uGAjDW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAHtB,CAAC,aAAa,CAAC,4JCzB5B,miLAgJA,EAAA,MAAA,EAAA,CAAA,+CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3HY,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,yUAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOpF,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBATlC,SAAS;+BACE,iBAAiB,EAAA,OAAA,EAClB,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,CAAC,EAAA,UAAA,EACpF,IAAI,EAAA,SAAA,EAGL,CAAC,aAAa,CAAC,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,miLAAA,EAAA,MAAA,EAAA,CAAA,+CAAA,CAAA,EAAA;+gCAcwB,gBAAgB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AExCzF;;AAEG;;;;"}
1
+ {"version":3,"file":"shival99-z-ui-components-z-dropdown-menu.mjs","sources":["../../../../libs/core-ui/components/z-dropdown-menu/z-dropdown-menu.component.ts","../../../../libs/core-ui/components/z-dropdown-menu/z-dropdown-menu.component.html","../../../../libs/core-ui/components/z-dropdown-menu/shival99-z-ui-components-z-dropdown-menu.ts"],"sourcesContent":["import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent, ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport { type ZPopoverPosition } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZDropdownMenuItem } from './z-dropdown-menu.types';\n\n@Component({\n selector: 'z-dropdown-menu',\n imports: [ZPopoverDirective, ZButtonComponent, ZIconComponent, ZTooltipDirective, TranslatePipe],\n standalone: true,\n templateUrl: './z-dropdown-menu.component.html',\n styleUrl: './z-dropdown-menu.component.scss',\n providers: [TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZDropdownMenuComponent implements AfterContentInit {\n public readonly zItems = input.required<ZDropdownMenuItem[]>();\n public readonly zLabel = input<string>();\n public readonly zIcon = input<ZIcon>('lucideMenu');\n public readonly zButtonType = input<'primary' | 'secondary' | 'outline' | 'ghost'>('outline');\n public readonly zPosition = input<ZPopoverPosition>('bottom-right');\n public readonly zButtonSize = input<ZButtonVariants['zSize']>('default');\n public readonly zOffset = input<number>(4);\n public readonly zMinWidth = input<number>(224);\n public readonly zMaxWidth = input<number>(320);\n public readonly zDisabled = input<boolean>(false);\n\n protected readonly contentWrapper = viewChild<ElementRef<HTMLElement>>('contentWrapper');\n protected readonly hasContent = signal(false);\n public readonly zOnItemClick = output<ZDropdownMenuItem>();\n protected readonly popoverControl = signal<{ close: () => void; closeImmediate: () => void } | null>(null);\n\n protected readonly visibleItems = computed(() => this.zItems().filter(item => !item.hidden));\n\n ngAfterContentInit(): void {\n const wrapper = this.contentWrapper();\n if (wrapper) {\n const hasProjectedContent = wrapper.nativeElement.children.length > 0;\n this.hasContent.set(hasProjectedContent);\n }\n }\n\n protected onItemClick(item: ZDropdownMenuItem): void {\n if (item.disabled) {\n return;\n }\n\n item.onClick?.();\n this.zOnItemClick.emit(item);\n this.popoverControl()?.closeImmediate();\n }\n\n protected onControl(control: { close: () => void; closeImmediate: () => void }): void {\n this.popoverControl.set(control);\n }\n}\n","<!-- Custom trigger via ng-content -->\n<div\n #contentWrapper\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zDisabled]=\"zDisabled()\"\n (zControl)=\"onControl($event)\"\n [class.hidden]=\"!hasContent()\">\n <ng-content />\n</div>\n\n<!-- Default button trigger -->\n@if (!hasContent()) {\n <button\n type=\"button\"\n z-button\n [zType]=\"zButtonType()\"\n [zSize]=\"zButtonSize()\"\n [zDisabled]=\"zDisabled()\"\n z-popover\n [zPopoverContent]=\"menuContent\"\n zTrigger=\"click\"\n [zPosition]=\"zPosition()\"\n [zOffset]=\"zOffset()\"\n [zTypeIcon]=\"zIcon()!\"\n (zControl)=\"onControl($event)\">\n @if (zLabel()) {\n {{ zLabel() | translate }}\n }\n </button>\n}\n\n<!-- Menu content template -->\n<ng-template #menuContent let-close=\"close\">\n <div class=\"z-dropdown-menu-content p-1\" [style.min-width.px]=\"zMinWidth()\" [style.max-width.px]=\"zMaxWidth()\">\n @for (item of visibleItems(); track $index) {\n @if (item.divide === 'before' && $index > 0) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <!-- Menu item - check if has submenu -->\n @if (item.submenu && item.submenu.length > 0) {\n <!-- Menu item with nested submenu -->\n <button\n type=\"button\"\n z-popover\n [zPopoverContent]=\"submenuTemplate\"\n [zPosition]=\"item.submenuPosition || 'right'\"\n zTrigger=\"hover\"\n [zShowDelay]=\"200\"\n [zHideDelay]=\"100\"\n [zOffset]=\"6\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent data-[state=open]:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label | translate }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ item.shortcut | translate }}\n </span>\n }\n <z-icon zType=\"lucideChevronRight\" zSize=\"14\" class=\"ml-auto shrink-0\" />\n </button>\n\n <!-- Submenu template -->\n <ng-template #submenuTemplate>\n <div\n class=\"p-1\"\n [style.min-width.px]=\"item.subMinWidth || zMinWidth()\"\n [style.max-width.px]=\"item.subMaxWidth || zMaxWidth()\">\n @for (subItem of item.submenu; track subItem.label) {\n <!-- Nested divider before -->\n @if (subItem.divide === 'before') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n [disabled]=\"subItem.disabled\"\n [class]=\"subItem.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(subItem)\">\n @if (subItem.icon) {\n <z-icon\n [zType]=\"subItem.icon\"\n [zSize]=\"subItem.iconSize || '14'\"\n class=\"text-muted-foreground shrink-0\" />\n }\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"subItem.label\"\n [zShowDelay]=\"200\"\n zTrigger=\"hover\"\n zPosition=\"top\">\n {{ subItem.label }}\n </span>\n @if (subItem.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">\n {{ subItem.shortcut }}\n </span>\n }\n </button>\n\n <!-- Nested divider after -->\n @if (subItem.divide === 'after') {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n </ng-template>\n } @else {\n <!-- Regular menu item (no submenu) -->\n <button\n type=\"button\"\n [disabled]=\"item.disabled\"\n [class]=\"item.class\"\n class=\"hover:bg-accent focus:bg-accent flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onItemClick(item)\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" [zSize]=\"item.iconSize || '14'\" class=\"text-muted-foreground shrink-0\" />\n }\n <span class=\"truncate\" z-tooltip [zContent]=\"item.label\" [zShowDelay]=\"500\" zTrigger=\"hover\" zPosition=\"top\">\n {{ item.label }}\n </span>\n @if (item.shortcut) {\n <span class=\"text-muted-foreground ml-auto shrink-0 text-xs tracking-widest\">{{ item.shortcut }}</span>\n }\n </button>\n }\n\n <!-- Divider after -->\n @if (item.divide === 'after' && $index < visibleItems().length - 1) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -4,9 +4,11 @@ import { NgIconComponent, provideNgIconLoader, withCaching } from '@ng-icons/cor
4
4
  import { zMergeClasses } from '@shival99/z-ui/utils';
5
5
  import { cva } from 'class-variance-authority';
6
6
  import { saxRefreshBold, saxCloudChangeBold, saxPauseBold } from '@ng-icons/iconsax/bold';
7
+ import { saxEditOutline } from '@ng-icons/iconsax/outline';
7
8
  import { lucideEllipsisVertical, lucideSquarePlay, lucidePlay, lucideAudioLines, lucideMic, lucideMessageSquareText, lucideWandSparkles, lucideSparkle, lucideDumbbell, lucideCpu, lucideBrainCog, lucideBrainCircuit, lucideBrain, lucideBotOff, lucideBotMessageSquare, lucidePlug2, lucidePlug, lucideRecycle, lucideIdCard, lucideContact, lucideClipboardCopy, lucideBadge, lucideZoomOut, lucideZoomIn, lucideWand2, lucideTicket, lucideTags, lucideTag, lucideShoppingBag, lucidePackageCheck, lucideClipboardPen, lucideReceipt, lucidePercent, lucideType, lucideBuilding, lucideBan, lucideFunnelX, lucideFilter, lucideAlertTriangle, lucideGitBranch, lucideMoreVertical, lucideSearchX, lucidePin, lucideGripVertical, lucideTable2, lucideFileArchive, lucideFileJson, lucideFileCode, lucideMusic, lucideFile, lucideDownload, lucideUploadCloud, lucideUpload, lucideToggleLeft, lucideCircleDot, lucideSquareCheck, lucideSparkles, lucideFolders, lucideUserSearch, lucidePieChart, lucideTextCursor, lucideListFilter, lucideNavigation, lucideFileEdit, lucideSliders, lucideCheckCircle, lucideFolderTree, lucideGrid3x3, lucideUsers2, lucideBarChart3, lucideRocket, lucideSquare, lucidePenTool, lucideMegaphone, lucideHash, lucideList, lucideImage, lucideGripHorizontal, lucideCircleHelp, lucideFileOutput, lucideLayoutTemplate, lucideSquarePen, lucideFolderOpen, lucideHome, lucideBarChart, lucideCloud, lucideLifeBuoy, lucideGithub, lucideLoader2, lucidePanelRightOpen, lucideComponent, lucideMessageCircleQuestion, lucideCircleAlert, lucideMessageCircle, lucideAlertOctagon, lucideLoader, lucideMoon, lucideSun, lucideListChevronsUpDown, lucideListChevronsDownUp, lucideFileCheck, lucideDatabaseBackup, lucideLink, lucideXCircle, lucideAlertCircle, lucideCheckCircle2, lucideBell, lucideChartColumnIncreasing, lucideBrushCleaning, lucideFastForward, lucideListChecks, lucideRefreshCwOff, lucideFileClock, lucideBookUp2, lucideFilePlus2, lucideFilePlus, lucideListPlus, lucideScanLine, lucideQrCode, lucideScanQrCode, lucideCode, lucideBarcode, lucideHardDriveDownload, lucideMailPlus, lucideCloudCheck, lucideWifiZero, lucideFileSymlink, lucideLockKeyholeOpen, lucideBadgeX, lucideCircleCheckBig, lucideShieldCheck, lucideBadgeCheck, lucideCheckLine, lucideCircleX, lucideArrowDownUp, lucideFilePenLine, lucideUserRoundPen, lucideCopy, lucidePaperclip, lucidePause, lucideSend, lucideBot, lucideTableOfContents, lucideFileUp, lucideNotepadText, lucideCalendarCheck, lucideCalendar1, lucideCalendarRange, lucideChartLine, lucideChartPie, lucideChartBar, lucideHouse, lucideCircleCheck, lucideUserLock, lucideArrowUp, lucideArrowDown, lucideLockKeyhole, lucideRefreshCcw, lucideWifi, lucideTruck, lucideTerminal, lucideTablet, lucideSmartphone, lucideServer, lucideRadio, lucidePrinter, lucidePhoneCall, lucidePalette, lucideNetwork, lucideMailCheck, lucideLightbulb, lucideKey, lucideHeadphones, lucideGlobe, lucideFileSpreadsheet, lucideCreditCard, lucideCar, lucideBuilding2, lucideWrench, lucideWallet, lucideVideo, lucideUserPlus, lucideTrendingDown, lucideTimer, lucideStethoscope, lucideStar, lucideShield, lucidePhone, lucideMonitor, lucideMapPin, lucideHospital, lucideHeart, lucideGraduationCap, lucideFileText, lucideDollarSign, lucideDatabase, lucideClipboardList, lucideCalculator, lucideCalendar, lucideBookOpen, lucideClock, lucideInbox, lucidePackageOpen, lucideBellMinus, lucideCog, lucideBox, lucideMinus, lucideBadgeInfo, lucideCrown, lucideFiles, lucideX, lucideAlignJustify, lucideFunnel, lucideFileDown, lucideTrash2, lucideSlidersHorizontal, lucideBellRing, lucideChevronsRight, lucideChevronsLeft, lucideLoaderCircle, lucideWarehouse, lucideWorkflow, lucideTarget, lucideBriefcase, lucideLayers, lucideInfo, lucideMousePointer, lucideZap, lucideActivity, lucideUserCheck, lucideShoppingCart, lucidePackage, lucideTrendingUp, lucideChevronUp, lucideLogs, lucideUsersRound, lucideChartColumn, lucideLayoutDashboard, lucidePanelLeftOpen, lucidePanelLeftClose, lucideEllipsis, lucideEyeOff, lucideEye, lucideUsers, lucideSearch, lucidePlus, lucideChevronDown, lucideChevronRight, lucideChevronLeft, lucideSettings2, lucideCalendarFold, lucidePill, lucideSettings, lucideUser, lucideLogOut, lucideLock, lucideMenu, lucideArrowRight, lucideArrowLeft, lucideLayoutGrid, lucideMail, lucidePencil, lucideCheck, lucideMessageSquareWarning, lucideTriangleAlert, lucideCheckCheck, lucideMessageSquareDot, lucideFlagTriangleRight, lucideFlag, lucideSaveAll, lucideSave, lucideClipboardPlus, lucideAlarmClock, lucideBookCheck, lucideChartBarStacked, lucideStore, lucideLayers2 } from '@ng-icons/lucide';
8
9
  import { HttpClient } from '@angular/common/http';
9
- import { of, map, catchError } from 'rxjs';
10
+ import { ZIndexDbService } from '@shival99/z-ui/services';
11
+ import { from, switchMap, of, map, tap, catchError } from 'rxjs';
10
12
 
11
13
  const zIconVariants = cva('', {
12
14
  variants: {
@@ -349,8 +351,15 @@ const Z_ICONS = {
349
351
  lucidePlay,
350
352
  lucideSquarePlay,
351
353
  lucideEllipsisVertical,
354
+ saxEditOutline,
352
355
  };
353
356
 
357
+ const iconCacheDb = new ZIndexDbService({
358
+ dbName: 'ZIconCache',
359
+ version: 1,
360
+ stores: [{ name: 'icons', encrypt: true }],
361
+ defaultStore: 'icons',
362
+ });
354
363
  /**
355
364
  * Normalizes Sax SVG to use currentColor and CSS variable for stroke-width.
356
365
  * This allows the icon to inherit color and strokeWidth from ng-icon props.
@@ -399,7 +408,7 @@ function convertLucideIconName(name) {
399
408
  .replace(/--+/g, '-');
400
409
  }
401
410
  /**
402
- * Converts ng-icons Iconsax icon name to CDN format.
411
+ * Converts ng-icons Sax icon name to CDN format.
403
412
  * Examples:
404
413
  * - saxCloudChangeBold -> bold/cloud-change
405
414
  * - saxPauseBold -> bold/pause
@@ -407,7 +416,7 @@ function convertLucideIconName(name) {
407
416
  * - saxHomeOutline -> outline/home
408
417
  * - saxUserLinear -> linear/user
409
418
  */
410
- function convertIconsaxIconName(name) {
419
+ function convertIconSaxIconName(name) {
411
420
  let iconPart = name.replace(/^sax/, '');
412
421
  // Extract style suffix (Bold, Outline, Linear, Bulk, Broken, TwoTone)
413
422
  const styleMatch = iconPart.match(/(Bold|Outline|Linear|Bulk|Broken|TwoTone)$/i);
@@ -428,7 +437,7 @@ function convertIconsaxIconName(name) {
428
437
  return { style: styleFolder, iconName };
429
438
  }
430
439
  const LUCIDE_CDN_URL = 'https://cdn.jsdelivr.net/npm/lucide-static@latest/icons';
431
- const ICONSAX_CDN_URL = 'https://cdn.jsdelivr.net/gh/placetopay-org/iconsax-vue@main/src/Base';
440
+ const SAX_CDN_URL = 'https://cdn.jsdelivr.net/gh/placetopay-org/iconsax-vue@main/src/Base';
432
441
  /**
433
442
  * Provides hybrid icon loading from CDN with fallback to bundled icons:
434
443
  * - Primary: Load icons from CDN (Lucide & Iconsax)
@@ -443,32 +452,36 @@ const ICONSAX_CDN_URL = 'https://cdn.jsdelivr.net/gh/placetopay-org/iconsax-vue@
443
452
  * ]
444
453
  * ```
445
454
  */
455
+ function loadWithCache(name, url, http, normalizer) {
456
+ return from(iconCacheDb.get(name)).pipe(switchMap(cached => {
457
+ if (cached) {
458
+ return of(cached);
459
+ }
460
+ return http.get(url, { responseType: 'text' }).pipe(map(normalizer), tap(svg => {
461
+ void iconCacheDb.set(name, svg);
462
+ }), catchError(error => {
463
+ console.error(`[ZIcon] Failed to load "${name}" from ${url}`, error);
464
+ return of(getFallbackIcon(name));
465
+ }));
466
+ }), catchError(() => of(getFallbackIcon(name))));
467
+ }
446
468
  function provideZIconLoader() {
447
469
  return makeEnvironmentProviders([
448
470
  provideNgIconLoader(name => {
449
471
  const http = inject(HttpClient);
450
- // Load Iconsax icons from CDN
451
472
  if (name.startsWith('sax')) {
452
- const parsed = convertIconsaxIconName(name);
473
+ const parsed = convertIconSaxIconName(name);
453
474
  if (!parsed) {
454
- console.warn(`[ZIcon] Invalid Iconsax icon name: "${name}"`);
475
+ console.warn(`[ZIcon] Invalid Sax icon name: "${name}"`);
455
476
  return of(getFallbackIcon(name));
456
477
  }
457
- const url = `${ICONSAX_CDN_URL}/${parsed.style}/${parsed.iconName}.svg`;
458
- return http.get(url, { responseType: 'text' }).pipe(map(normalizeSaxSvg), catchError(error => {
459
- console.error(`[ZIcon] Failed to load Iconsax icon "${name}" from ${url}`, error);
460
- return of(getFallbackIcon(name));
461
- }));
478
+ const url = `${SAX_CDN_URL}/${parsed.style}/${parsed.iconName}.svg`;
479
+ return loadWithCache(name, url, http, normalizeSaxSvg);
462
480
  }
463
- // Load Lucide icons from CDN
464
481
  if (name.startsWith('lucide')) {
465
482
  const iconName = convertLucideIconName(name);
466
483
  const url = `${LUCIDE_CDN_URL}/${iconName}.svg`;
467
- return http.get(url, { responseType: 'text' }).pipe(map(normalizeLucideSvg), catchError(error => {
468
- const msg = `[ZIcon] Failed to load Lucide icon "${name}"`;
469
- console.error(msg, url, error);
470
- return of(getFallbackIcon(name));
471
- }));
484
+ return loadWithCache(name, url, http, normalizeLucideSvg);
472
485
  }
473
486
  console.warn(`[ZIcon] Unknown icon: "${name}"`);
474
487
  return of(getFallbackIcon(name));
@@ -1 +1 @@
1
- {"version":3,"file":"shival99-z-ui-components-z-icon.mjs","sources":["../../../../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 { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zIconVariants = cva('', {\n variants: {\n zSize: {\n '10': 'size-10',\n '11': 'size-11',\n '12': 'size-12',\n '13': 'size-13',\n '14': 'size-14',\n '15': 'size-15',\n '16': 'size-16',\n '17': 'size-17',\n '18': 'size-18',\n '19': 'size-19',\n '20': 'size-20',\n '21': 'size-21',\n '22': 'size-22',\n '23': 'size-23',\n '24': 'size-24',\n '25': 'size-25',\n '26': 'size-26',\n '27': 'size-27',\n '28': 'size-28',\n '29': 'size-29',\n '30': 'size-30',\n '31': 'size-31',\n '32': 'size-32',\n '33': 'size-33',\n '34': 'size-34',\n '35': 'size-35',\n '36': 'size-36',\n '37': 'size-37',\n '38': 'size-38',\n '39': 'size-39',\n '40': 'size-40',\n },\n },\n defaultVariants: {\n zSize: '16',\n },\n});\n\nexport type ZIconVariants = VariantProps<typeof zIconVariants>;\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { NgIconComponent as NgIcon } from '@ng-icons/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { zIconVariants, 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]': 'zSize() + \"px\"',\n '[style.height]': 'zSize() + \"px\"',\n },\n})\nexport class ZIconComponent {\n public readonly class = input<ClassValue>('');\n public readonly zType = input<ZIcon>();\n public readonly zSize = input<ZIconVariants['zSize']>('16');\n public readonly zStrokeWidth = input<number>(2);\n public readonly zSvg = input<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","@if (zSvg()) {\n <ng-icon [svg]=\"zSvg()\" [size]=\"zSize() || '16'\" [strokeWidth]=\"zStrokeWidth()\" />\n} @else {\n <ng-icon [name]=\"zType()\" [size]=\"zSize() || '16'\" [strokeWidth]=\"zStrokeWidth()\" />\n}\n","import { type IconType } from '@ng-icons/core';\nimport { saxCloudChangeBold, saxPauseBold, saxRefreshBold } from '@ng-icons/iconsax/bold';\nimport {\n lucideMoreVertical,\n lucideSearchX,\n lucidePin,\n lucideGripVertical,\n lucideSparkles,\n lucideList,\n lucideHash,\n lucideImage,\n lucideGripHorizontal,\n lucideHome,\n lucideFolderOpen,\n lucideGithub,\n lucideLifeBuoy,\n lucideCloud,\n lucideActivity,\n lucideAlarmClock,\n lucideAlertCircle,\n lucideAlertOctagon,\n lucideAlignJustify,\n lucideArrowDown,\n lucideArrowDownUp,\n lucideArrowLeft,\n lucideArrowRight,\n lucideArrowUp,\n lucideBadgeCheck,\n lucideBadgeInfo,\n lucideBadgeX,\n lucideBarcode,\n lucideBell,\n lucideBellMinus,\n lucideBellRing,\n lucideBookCheck,\n lucideBookOpen,\n lucideBookUp2,\n lucideBot,\n lucideBotMessageSquare,\n lucideBotOff,\n lucideBrain,\n lucideBrainCircuit,\n lucideBrainCog,\n lucideBox,\n lucideBriefcase,\n lucideBrushCleaning,\n lucideBuilding2,\n lucideCalculator,\n lucideCalendar,\n lucideCalendar1,\n lucideCalendarCheck,\n lucideCalendarFold,\n lucideCalendarRange,\n lucideCar,\n lucideChartBar,\n lucideChartBarStacked,\n lucideChartColumn,\n lucideChartColumnIncreasing,\n lucideChartLine,\n lucideChartPie,\n lucideCheck,\n lucideEllipsisVertical,\n lucideCheckCheck,\n lucideCheckCircle2,\n lucideCheckLine,\n lucideChevronDown,\n lucideChevronLeft,\n lucideChevronRight,\n lucideChevronsLeft,\n lucideChevronsRight,\n lucideChevronUp,\n lucideCircleAlert,\n lucideCircleCheck,\n lucideCircleCheckBig,\n lucideCircleX,\n lucideClipboardList,\n lucideClipboardPlus,\n lucideClock,\n lucideCloudCheck,\n lucideCode,\n lucideCog,\n lucideComponent,\n lucideCopy,\n lucideCreditCard,\n lucideCrown,\n lucideDatabase,\n lucideDatabaseBackup,\n lucideDollarSign,\n lucideEllipsis,\n lucideEye,\n lucideEyeOff,\n lucideFastForward,\n lucideFileCheck,\n lucideFileClock,\n lucideFileDown,\n lucideFilePenLine,\n lucideFilePlus,\n lucideFilePlus2,\n lucideFiles,\n lucideFileSpreadsheet,\n lucideFileSymlink,\n lucideFileText,\n lucideFileUp,\n lucideFlag,\n lucideFlagTriangleRight,\n lucideFilter,\n lucideFunnel,\n lucideFunnelX,\n lucideGlobe,\n lucideGraduationCap,\n lucideHardDriveDownload,\n lucideHeadphones,\n lucideHeart,\n lucideHospital,\n lucideHouse,\n lucideInbox,\n lucideInfo,\n lucideKey,\n lucideLayers,\n lucideLayers2,\n lucideLayoutDashboard,\n lucideLayoutGrid,\n lucideLightbulb,\n lucideLink,\n lucideListChecks,\n lucideListChevronsDownUp,\n lucideListChevronsUpDown,\n lucideListPlus,\n lucideLoader,\n lucideLoader2,\n lucideLoaderCircle,\n lucideLock,\n lucideLockKeyhole,\n lucideLockKeyholeOpen,\n lucideLogOut,\n lucideLogs,\n lucideMail,\n lucideMailCheck,\n lucideMailPlus,\n lucideMapPin,\n lucideMenu,\n lucideMessageCircle,\n lucideMessageCircleQuestion,\n lucideMessageSquareDot,\n lucideMessageSquareWarning,\n lucideMinus,\n lucideMonitor,\n lucideMoon,\n lucideMousePointer,\n lucideNetwork,\n lucideNotepadText,\n lucidePackage,\n lucidePackageOpen,\n lucidePalette,\n lucidePanelLeftClose,\n lucidePanelLeftOpen,\n lucidePanelRightOpen,\n lucidePaperclip,\n lucidePause,\n lucidePencil,\n lucidePhone,\n lucidePhoneCall,\n lucidePill,\n lucidePlus,\n lucidePrinter,\n lucideQrCode,\n lucideRadio,\n lucideRefreshCcw,\n lucideRefreshCwOff,\n lucideSave,\n lucideSaveAll,\n lucideScanLine,\n lucideScanQrCode,\n lucideSearch,\n lucideSend,\n lucideServer,\n lucideSettings,\n lucideSettings2,\n lucideShield,\n lucideShieldCheck,\n lucideShoppingCart,\n lucideSlidersHorizontal,\n lucideSmartphone,\n lucideStar,\n lucideStethoscope,\n lucideStore,\n lucideSun,\n lucideTableOfContents,\n lucideTablet,\n lucideTarget,\n lucideTerminal,\n lucideTimer,\n lucideTrash2,\n lucideTrendingDown,\n lucideTrendingUp,\n lucideTriangleAlert,\n lucideTruck,\n lucideUser,\n lucideUserCheck,\n lucideUserLock,\n lucideUserPlus,\n lucideUserRoundPen,\n lucideUsers,\n lucideUsersRound,\n lucideVideo,\n lucideWallet,\n lucideWarehouse,\n lucideWifi,\n lucideWifiZero,\n lucideWorkflow,\n lucideWrench,\n lucideX,\n lucideXCircle,\n lucideZap,\n lucideBarChart,\n lucideFileOutput,\n lucideLayoutTemplate,\n lucideSquarePen,\n lucideCircleHelp,\n lucideMegaphone,\n lucideSquare,\n lucidePenTool,\n lucideRocket,\n lucideBarChart3,\n lucideCheckCircle,\n lucideFolderTree,\n lucideGrid3x3,\n lucideSliders,\n lucideUsers2,\n lucideFileEdit,\n lucideNavigation,\n lucideListFilter,\n lucideTextCursor,\n lucidePieChart,\n lucideFolders,\n lucideUserSearch,\n lucideSquareCheck,\n lucideCircleDot,\n lucideToggleLeft,\n lucideUpload,\n lucideUploadCloud,\n lucideDownload,\n lucideFile,\n lucideMusic,\n lucideFileCode,\n lucideFileJson,\n lucideFileArchive,\n lucideTable2,\n lucideGitBranch,\n lucideAlertTriangle,\n lucideBan,\n lucideBuilding,\n lucideType,\n lucidePercent,\n lucideReceipt,\n lucideClipboardPen,\n lucidePackageCheck,\n lucideShoppingBag,\n lucideTag,\n lucideTags,\n lucideTicket,\n lucideWand2,\n lucideZoomIn,\n lucideZoomOut,\n lucideBadge,\n lucideClipboardCopy,\n lucideContact,\n lucideIdCard,\n lucideRecycle,\n lucidePlug2,\n lucidePlug,\n lucideCpu,\n lucideDumbbell,\n lucideSparkle,\n lucideWandSparkles,\n lucideMessageSquareText,\n lucideMic,\n lucideAudioLines,\n lucidePlay,\n lucideSquarePlay,\n} from '@ng-icons/lucide';\n\nexport const Z_ICONS = {\n lucideLayers2,\n lucideStore,\n lucideChartBarStacked,\n lucideBookCheck,\n lucideAlarmClock,\n lucideClipboardPlus,\n lucideSave,\n lucideSaveAll,\n lucideFlag,\n lucideFlagTriangleRight,\n lucideMessageSquareDot,\n lucideCheckCheck,\n lucideTriangleAlert,\n lucideMessageSquareWarning,\n lucideCheck,\n lucidePencil,\n lucideMail,\n lucideLayoutGrid,\n lucideArrowLeft,\n lucideArrowRight,\n lucideMenu,\n lucideLock,\n lucideLogOut,\n lucideUser,\n lucideSettings,\n lucidePill,\n lucideCalendarFold,\n lucideSettings2,\n lucideChevronLeft,\n lucideChevronRight,\n lucideChevronDown,\n lucidePlus,\n lucideSearch,\n lucideUsers,\n lucideEye,\n lucideEyeOff,\n lucideEllipsis,\n lucidePanelLeftClose,\n lucidePanelLeftOpen,\n lucideLayoutDashboard,\n lucideChartColumn,\n lucideUsersRound,\n lucideLogs,\n lucideChevronUp,\n lucideTrendingUp,\n lucidePackage,\n lucideShoppingCart,\n lucideUserCheck,\n lucideActivity,\n lucideZap,\n lucideMousePointer,\n lucideInfo,\n lucideLayers,\n lucideBriefcase,\n lucideTarget,\n lucideWorkflow,\n lucideWarehouse,\n lucideLoaderCircle,\n lucideChevronsLeft,\n lucideChevronsRight,\n lucideBellRing,\n lucideSlidersHorizontal,\n lucideTrash2,\n lucideFileDown,\n lucideFunnel,\n lucideAlignJustify,\n lucideX,\n lucideFiles,\n lucideCrown,\n lucideBadgeInfo,\n lucideMinus,\n lucideBox,\n lucideCog,\n lucideBellMinus,\n lucidePackageOpen,\n lucideInbox,\n lucideClock,\n lucideBookOpen,\n lucideCalendar,\n lucideCalculator,\n lucideClipboardList,\n lucideDatabase,\n lucideDollarSign,\n lucideFileText,\n lucideGraduationCap,\n lucideHeart,\n lucideHospital,\n lucideMapPin,\n lucideMonitor,\n lucidePhone,\n lucideShield,\n lucideStar,\n lucideStethoscope,\n lucideTimer,\n lucideTrendingDown,\n lucideUserPlus,\n lucideVideo,\n lucideWallet,\n lucideWrench,\n lucideBuilding2,\n lucideCar,\n lucideCreditCard,\n lucideFileSpreadsheet,\n lucideGlobe,\n lucideHeadphones,\n lucideKey,\n lucideLightbulb,\n lucideMailCheck,\n lucideNetwork,\n lucidePalette,\n lucidePhoneCall,\n lucidePrinter,\n lucideRadio,\n lucideServer,\n lucideSmartphone,\n lucideTablet,\n lucideTerminal,\n lucideTruck,\n lucideWifi,\n lucideRefreshCcw,\n lucideLockKeyhole,\n lucideArrowDown,\n lucideArrowUp,\n lucideUserLock,\n lucideCircleCheck,\n lucideHouse,\n lucideChartBar,\n lucideChartPie,\n lucideChartLine,\n lucideCalendarRange,\n lucideCalendar1,\n lucideCalendarCheck,\n lucideNotepadText,\n lucideFileUp,\n lucideTableOfContents,\n lucideBot,\n lucideSend,\n lucidePause,\n lucidePaperclip,\n saxPauseBold,\n lucideCopy,\n lucideUserRoundPen,\n lucideFilePenLine,\n lucideArrowDownUp,\n lucideCircleX,\n lucideCheckLine,\n lucideBadgeCheck,\n lucideShieldCheck,\n lucideCircleCheckBig,\n lucideBadgeX,\n lucideLockKeyholeOpen,\n lucideFileSymlink,\n lucideWifiZero,\n lucideCloudCheck,\n lucideMailPlus,\n lucideHardDriveDownload,\n saxCloudChangeBold,\n saxRefreshBold,\n lucideBarcode,\n lucideCode,\n lucideScanQrCode,\n lucideQrCode,\n lucideScanLine,\n lucideListPlus,\n lucideFilePlus,\n lucideFilePlus2,\n lucideBookUp2,\n lucideFileClock,\n lucideRefreshCwOff,\n lucideListChecks,\n lucideFastForward,\n lucideBrushCleaning,\n lucideChartColumnIncreasing,\n lucideBell,\n lucideCheckCircle2,\n lucideAlertCircle,\n lucideXCircle,\n lucideLink,\n lucideDatabaseBackup,\n lucideFileCheck,\n lucideListChevronsDownUp,\n lucideListChevronsUpDown,\n lucideSun,\n lucideMoon,\n lucideLoader,\n lucideAlertOctagon,\n lucideMessageCircle,\n lucideCircleAlert,\n lucideMessageCircleQuestion,\n lucideComponent,\n lucidePanelRightOpen,\n lucideLoader2,\n lucideGithub,\n lucideLifeBuoy,\n lucideCloud,\n lucideBarChart,\n lucideHome,\n lucideFolderOpen,\n lucideSquarePen,\n lucideLayoutTemplate,\n lucideFileOutput,\n lucideCircleHelp,\n lucideGripHorizontal,\n lucideImage,\n lucideList,\n lucideHash,\n lucideMegaphone,\n lucidePenTool,\n lucideSquare,\n lucideRocket,\n lucideBarChart3,\n lucideUsers2,\n lucideGrid3x3,\n lucideFolderTree,\n lucideCheckCircle,\n lucideSliders,\n lucideFileEdit,\n lucideNavigation,\n lucideListFilter,\n lucideTextCursor,\n lucidePieChart,\n lucideUserSearch,\n lucideFolders,\n lucideSparkles,\n lucideSquareCheck,\n lucideCircleDot,\n lucideToggleLeft,\n lucideUpload,\n lucideUploadCloud,\n lucideDownload,\n lucideFile,\n lucideMusic,\n lucideFileCode,\n lucideFileJson,\n lucideFileArchive,\n lucideTable2,\n lucideGripVertical,\n lucidePin,\n lucideSearchX,\n lucideMoreVertical,\n lucideGitBranch,\n lucideAlertTriangle,\n lucideFilter,\n lucideFunnelX,\n lucideBan,\n lucideBuilding,\n lucideType,\n lucidePercent,\n lucideReceipt,\n lucideClipboardPen,\n lucidePackageCheck,\n lucideShoppingBag,\n lucideTag,\n lucideTags,\n lucideTicket,\n lucideWand2,\n lucideZoomIn,\n lucideZoomOut,\n lucideBadge,\n lucideClipboardCopy,\n lucideContact,\n lucideIdCard,\n lucideRecycle,\n lucidePlug,\n lucidePlug2,\n lucideBotMessageSquare,\n lucideBotOff,\n lucideBrain,\n lucideBrainCircuit,\n lucideBrainCog,\n lucideCpu,\n lucideDumbbell,\n lucideSparkle,\n lucideWandSparkles,\n lucideMessageSquareText,\n lucideMic,\n lucideAudioLines,\n lucidePlay,\n lucideSquarePlay,\n lucideEllipsisVertical,\n} as const satisfies Record<string, IconType>;\n\nexport declare type ZIcon = keyof typeof Z_ICONS;\n","import { HttpClient } from '@angular/common/http';\nimport { type EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { provideNgIconLoader, withCaching } from '@ng-icons/core';\nimport { catchError, map, of } from 'rxjs';\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 * Gets fallback icon from bundled Z_ICONS if available.\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 Iconsax 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 // Remove style suffix from icon name\n iconPart = iconPart.replace(/(Bold|Outline|Linear|Bulk|Broken|TwoTone)$/i, '');\n\n // Convert PascalCase to kebab-case\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\nconst LUCIDE_CDN_URL = 'https://cdn.jsdelivr.net/npm/lucide-static@latest/icons';\nconst ICONSAX_CDN_URL = 'https://cdn.jsdelivr.net/gh/placetopay-org/iconsax-vue@main/src/Base';\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 */\nexport function provideZIconLoader(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideNgIconLoader(name => {\n const http = inject(HttpClient);\n\n // Load Iconsax icons from CDN\n if (name.startsWith('sax')) {\n const parsed = convertIconsaxIconName(name);\n if (!parsed) {\n console.warn(`[ZIcon] Invalid Iconsax icon name: \"${name}\"`);\n return of(getFallbackIcon(name));\n }\n\n const url = `${ICONSAX_CDN_URL}/${parsed.style}/${parsed.iconName}.svg`;\n\n return http.get(url, { responseType: 'text' }).pipe(\n map(normalizeSaxSvg),\n catchError(error => {\n console.error(`[ZIcon] Failed to load Iconsax icon \"${name}\" from ${url}`, error);\n return of(getFallbackIcon(name));\n })\n );\n }\n\n // Load Lucide icons from CDN\n if (name.startsWith('lucide')) {\n const iconName = convertLucideIconName(name);\n const url = `${LUCIDE_CDN_URL}/${iconName}.svg`;\n\n return http.get(url, { responseType: 'text' }).pipe(\n map(normalizeLucideSvg),\n catchError(error => {\n const msg = `[ZIcon] Failed to load Lucide icon \"${name}\"`;\n console.error(msg, url, error);\n return of(getFallbackIcon(name));\n })\n );\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-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 { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zIconVariants = cva('', {\n variants: {\n zSize: {\n '10': 'size-10',\n '11': 'size-11',\n '12': 'size-12',\n '13': 'size-13',\n '14': 'size-14',\n '15': 'size-15',\n '16': 'size-16',\n '17': 'size-17',\n '18': 'size-18',\n '19': 'size-19',\n '20': 'size-20',\n '21': 'size-21',\n '22': 'size-22',\n '23': 'size-23',\n '24': 'size-24',\n '25': 'size-25',\n '26': 'size-26',\n '27': 'size-27',\n '28': 'size-28',\n '29': 'size-29',\n '30': 'size-30',\n '31': 'size-31',\n '32': 'size-32',\n '33': 'size-33',\n '34': 'size-34',\n '35': 'size-35',\n '36': 'size-36',\n '37': 'size-37',\n '38': 'size-38',\n '39': 'size-39',\n '40': 'size-40',\n },\n },\n defaultVariants: {\n zSize: '16',\n },\n});\n\nexport type ZIconVariants = VariantProps<typeof zIconVariants>;\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { NgIconComponent as NgIcon } from '@ng-icons/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { zIconVariants, 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]': 'zSize() + \"px\"',\n '[style.height]': 'zSize() + \"px\"',\n },\n})\nexport class ZIconComponent {\n public readonly class = input<ClassValue>('');\n public readonly zType = input<ZIcon>();\n public readonly zSize = input<ZIconVariants['zSize']>('16');\n public readonly zStrokeWidth = input<number>(2);\n public readonly zSvg = input<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","@if (zSvg()) {\n <ng-icon [svg]=\"zSvg()\" [size]=\"zSize() || '16'\" [strokeWidth]=\"zStrokeWidth()\" />\n} @else {\n <ng-icon [name]=\"zType()\" [size]=\"zSize() || '16'\" [strokeWidth]=\"zStrokeWidth()\" />\n}\n","import { type IconType } from '@ng-icons/core';\nimport { saxCloudChangeBold, saxPauseBold, saxRefreshBold } from '@ng-icons/iconsax/bold';\nimport { saxEditOutline } from '@ng-icons/iconsax/outline';\nimport {\n lucideMoreVertical,\n lucideSearchX,\n lucidePin,\n lucideGripVertical,\n lucideSparkles,\n lucideList,\n lucideHash,\n lucideImage,\n lucideGripHorizontal,\n lucideHome,\n lucideFolderOpen,\n lucideGithub,\n lucideLifeBuoy,\n lucideCloud,\n lucideActivity,\n lucideAlarmClock,\n lucideAlertCircle,\n lucideAlertOctagon,\n lucideAlignJustify,\n lucideArrowDown,\n lucideArrowDownUp,\n lucideArrowLeft,\n lucideArrowRight,\n lucideArrowUp,\n lucideBadgeCheck,\n lucideBadgeInfo,\n lucideBadgeX,\n lucideBarcode,\n lucideBell,\n lucideBellMinus,\n lucideBellRing,\n lucideBookCheck,\n lucideBookOpen,\n lucideBookUp2,\n lucideBot,\n lucideBotMessageSquare,\n lucideBotOff,\n lucideBrain,\n lucideBrainCircuit,\n lucideBrainCog,\n lucideBox,\n lucideBriefcase,\n lucideBrushCleaning,\n lucideBuilding2,\n lucideCalculator,\n lucideCalendar,\n lucideCalendar1,\n lucideCalendarCheck,\n lucideCalendarFold,\n lucideCalendarRange,\n lucideCar,\n lucideChartBar,\n lucideChartBarStacked,\n lucideChartColumn,\n lucideChartColumnIncreasing,\n lucideChartLine,\n lucideChartPie,\n lucideCheck,\n lucideEllipsisVertical,\n lucideCheckCheck,\n lucideCheckCircle2,\n lucideCheckLine,\n lucideChevronDown,\n lucideChevronLeft,\n lucideChevronRight,\n lucideChevronsLeft,\n lucideChevronsRight,\n lucideChevronUp,\n lucideCircleAlert,\n lucideCircleCheck,\n lucideCircleCheckBig,\n lucideCircleX,\n lucideClipboardList,\n lucideClipboardPlus,\n lucideClock,\n lucideCloudCheck,\n lucideCode,\n lucideCog,\n lucideComponent,\n lucideCopy,\n lucideCreditCard,\n lucideCrown,\n lucideDatabase,\n lucideDatabaseBackup,\n lucideDollarSign,\n lucideEllipsis,\n lucideEye,\n lucideEyeOff,\n lucideFastForward,\n lucideFileCheck,\n lucideFileClock,\n lucideFileDown,\n lucideFilePenLine,\n lucideFilePlus,\n lucideFilePlus2,\n lucideFiles,\n lucideFileSpreadsheet,\n lucideFileSymlink,\n lucideFileText,\n lucideFileUp,\n lucideFlag,\n lucideFlagTriangleRight,\n lucideFilter,\n lucideFunnel,\n lucideFunnelX,\n lucideGlobe,\n lucideGraduationCap,\n lucideHardDriveDownload,\n lucideHeadphones,\n lucideHeart,\n lucideHospital,\n lucideHouse,\n lucideInbox,\n lucideInfo,\n lucideKey,\n lucideLayers,\n lucideLayers2,\n lucideLayoutDashboard,\n lucideLayoutGrid,\n lucideLightbulb,\n lucideLink,\n lucideListChecks,\n lucideListChevronsDownUp,\n lucideListChevronsUpDown,\n lucideListPlus,\n lucideLoader,\n lucideLoader2,\n lucideLoaderCircle,\n lucideLock,\n lucideLockKeyhole,\n lucideLockKeyholeOpen,\n lucideLogOut,\n lucideLogs,\n lucideMail,\n lucideMailCheck,\n lucideMailPlus,\n lucideMapPin,\n lucideMenu,\n lucideMessageCircle,\n lucideMessageCircleQuestion,\n lucideMessageSquareDot,\n lucideMessageSquareWarning,\n lucideMinus,\n lucideMonitor,\n lucideMoon,\n lucideMousePointer,\n lucideNetwork,\n lucideNotepadText,\n lucidePackage,\n lucidePackageOpen,\n lucidePalette,\n lucidePanelLeftClose,\n lucidePanelLeftOpen,\n lucidePanelRightOpen,\n lucidePaperclip,\n lucidePause,\n lucidePencil,\n lucidePhone,\n lucidePhoneCall,\n lucidePill,\n lucidePlus,\n lucidePrinter,\n lucideQrCode,\n lucideRadio,\n lucideRefreshCcw,\n lucideRefreshCwOff,\n lucideSave,\n lucideSaveAll,\n lucideScanLine,\n lucideScanQrCode,\n lucideSearch,\n lucideSend,\n lucideServer,\n lucideSettings,\n lucideSettings2,\n lucideShield,\n lucideShieldCheck,\n lucideShoppingCart,\n lucideSlidersHorizontal,\n lucideSmartphone,\n lucideStar,\n lucideStethoscope,\n lucideStore,\n lucideSun,\n lucideTableOfContents,\n lucideTablet,\n lucideTarget,\n lucideTerminal,\n lucideTimer,\n lucideTrash2,\n lucideTrendingDown,\n lucideTrendingUp,\n lucideTriangleAlert,\n lucideTruck,\n lucideUser,\n lucideUserCheck,\n lucideUserLock,\n lucideUserPlus,\n lucideUserRoundPen,\n lucideUsers,\n lucideUsersRound,\n lucideVideo,\n lucideWallet,\n lucideWarehouse,\n lucideWifi,\n lucideWifiZero,\n lucideWorkflow,\n lucideWrench,\n lucideX,\n lucideXCircle,\n lucideZap,\n lucideBarChart,\n lucideFileOutput,\n lucideLayoutTemplate,\n lucideSquarePen,\n lucideCircleHelp,\n lucideMegaphone,\n lucideSquare,\n lucidePenTool,\n lucideRocket,\n lucideBarChart3,\n lucideCheckCircle,\n lucideFolderTree,\n lucideGrid3x3,\n lucideSliders,\n lucideUsers2,\n lucideFileEdit,\n lucideNavigation,\n lucideListFilter,\n lucideTextCursor,\n lucidePieChart,\n lucideFolders,\n lucideUserSearch,\n lucideSquareCheck,\n lucideCircleDot,\n lucideToggleLeft,\n lucideUpload,\n lucideUploadCloud,\n lucideDownload,\n lucideFile,\n lucideMusic,\n lucideFileCode,\n lucideFileJson,\n lucideFileArchive,\n lucideTable2,\n lucideGitBranch,\n lucideAlertTriangle,\n lucideBan,\n lucideBuilding,\n lucideType,\n lucidePercent,\n lucideReceipt,\n lucideClipboardPen,\n lucidePackageCheck,\n lucideShoppingBag,\n lucideTag,\n lucideTags,\n lucideTicket,\n lucideWand2,\n lucideZoomIn,\n lucideZoomOut,\n lucideBadge,\n lucideClipboardCopy,\n lucideContact,\n lucideIdCard,\n lucideRecycle,\n lucidePlug2,\n lucidePlug,\n lucideCpu,\n lucideDumbbell,\n lucideSparkle,\n lucideWandSparkles,\n lucideMessageSquareText,\n lucideMic,\n lucideAudioLines,\n lucidePlay,\n lucideSquarePlay,\n} from '@ng-icons/lucide';\n\nexport const Z_ICONS = {\n lucideLayers2,\n lucideStore,\n lucideChartBarStacked,\n lucideBookCheck,\n lucideAlarmClock,\n lucideClipboardPlus,\n lucideSave,\n lucideSaveAll,\n lucideFlag,\n lucideFlagTriangleRight,\n lucideMessageSquareDot,\n lucideCheckCheck,\n lucideTriangleAlert,\n lucideMessageSquareWarning,\n lucideCheck,\n lucidePencil,\n lucideMail,\n lucideLayoutGrid,\n lucideArrowLeft,\n lucideArrowRight,\n lucideMenu,\n lucideLock,\n lucideLogOut,\n lucideUser,\n lucideSettings,\n lucidePill,\n lucideCalendarFold,\n lucideSettings2,\n lucideChevronLeft,\n lucideChevronRight,\n lucideChevronDown,\n lucidePlus,\n lucideSearch,\n lucideUsers,\n lucideEye,\n lucideEyeOff,\n lucideEllipsis,\n lucidePanelLeftClose,\n lucidePanelLeftOpen,\n lucideLayoutDashboard,\n lucideChartColumn,\n lucideUsersRound,\n lucideLogs,\n lucideChevronUp,\n lucideTrendingUp,\n lucidePackage,\n lucideShoppingCart,\n lucideUserCheck,\n lucideActivity,\n lucideZap,\n lucideMousePointer,\n lucideInfo,\n lucideLayers,\n lucideBriefcase,\n lucideTarget,\n lucideWorkflow,\n lucideWarehouse,\n lucideLoaderCircle,\n lucideChevronsLeft,\n lucideChevronsRight,\n lucideBellRing,\n lucideSlidersHorizontal,\n lucideTrash2,\n lucideFileDown,\n lucideFunnel,\n lucideAlignJustify,\n lucideX,\n lucideFiles,\n lucideCrown,\n lucideBadgeInfo,\n lucideMinus,\n lucideBox,\n lucideCog,\n lucideBellMinus,\n lucidePackageOpen,\n lucideInbox,\n lucideClock,\n lucideBookOpen,\n lucideCalendar,\n lucideCalculator,\n lucideClipboardList,\n lucideDatabase,\n lucideDollarSign,\n lucideFileText,\n lucideGraduationCap,\n lucideHeart,\n lucideHospital,\n lucideMapPin,\n lucideMonitor,\n lucidePhone,\n lucideShield,\n lucideStar,\n lucideStethoscope,\n lucideTimer,\n lucideTrendingDown,\n lucideUserPlus,\n lucideVideo,\n lucideWallet,\n lucideWrench,\n lucideBuilding2,\n lucideCar,\n lucideCreditCard,\n lucideFileSpreadsheet,\n lucideGlobe,\n lucideHeadphones,\n lucideKey,\n lucideLightbulb,\n lucideMailCheck,\n lucideNetwork,\n lucidePalette,\n lucidePhoneCall,\n lucidePrinter,\n lucideRadio,\n lucideServer,\n lucideSmartphone,\n lucideTablet,\n lucideTerminal,\n lucideTruck,\n lucideWifi,\n lucideRefreshCcw,\n lucideLockKeyhole,\n lucideArrowDown,\n lucideArrowUp,\n lucideUserLock,\n lucideCircleCheck,\n lucideHouse,\n lucideChartBar,\n lucideChartPie,\n lucideChartLine,\n lucideCalendarRange,\n lucideCalendar1,\n lucideCalendarCheck,\n lucideNotepadText,\n lucideFileUp,\n lucideTableOfContents,\n lucideBot,\n lucideSend,\n lucidePause,\n lucidePaperclip,\n saxPauseBold,\n lucideCopy,\n lucideUserRoundPen,\n lucideFilePenLine,\n lucideArrowDownUp,\n lucideCircleX,\n lucideCheckLine,\n lucideBadgeCheck,\n lucideShieldCheck,\n lucideCircleCheckBig,\n lucideBadgeX,\n lucideLockKeyholeOpen,\n lucideFileSymlink,\n lucideWifiZero,\n lucideCloudCheck,\n lucideMailPlus,\n lucideHardDriveDownload,\n saxCloudChangeBold,\n saxRefreshBold,\n lucideBarcode,\n lucideCode,\n lucideScanQrCode,\n lucideQrCode,\n lucideScanLine,\n lucideListPlus,\n lucideFilePlus,\n lucideFilePlus2,\n lucideBookUp2,\n lucideFileClock,\n lucideRefreshCwOff,\n lucideListChecks,\n lucideFastForward,\n lucideBrushCleaning,\n lucideChartColumnIncreasing,\n lucideBell,\n lucideCheckCircle2,\n lucideAlertCircle,\n lucideXCircle,\n lucideLink,\n lucideDatabaseBackup,\n lucideFileCheck,\n lucideListChevronsDownUp,\n lucideListChevronsUpDown,\n lucideSun,\n lucideMoon,\n lucideLoader,\n lucideAlertOctagon,\n lucideMessageCircle,\n lucideCircleAlert,\n lucideMessageCircleQuestion,\n lucideComponent,\n lucidePanelRightOpen,\n lucideLoader2,\n lucideGithub,\n lucideLifeBuoy,\n lucideCloud,\n lucideBarChart,\n lucideHome,\n lucideFolderOpen,\n lucideSquarePen,\n lucideLayoutTemplate,\n lucideFileOutput,\n lucideCircleHelp,\n lucideGripHorizontal,\n lucideImage,\n lucideList,\n lucideHash,\n lucideMegaphone,\n lucidePenTool,\n lucideSquare,\n lucideRocket,\n lucideBarChart3,\n lucideUsers2,\n lucideGrid3x3,\n lucideFolderTree,\n lucideCheckCircle,\n lucideSliders,\n lucideFileEdit,\n lucideNavigation,\n lucideListFilter,\n lucideTextCursor,\n lucidePieChart,\n lucideUserSearch,\n lucideFolders,\n lucideSparkles,\n lucideSquareCheck,\n lucideCircleDot,\n lucideToggleLeft,\n lucideUpload,\n lucideUploadCloud,\n lucideDownload,\n lucideFile,\n lucideMusic,\n lucideFileCode,\n lucideFileJson,\n lucideFileArchive,\n lucideTable2,\n lucideGripVertical,\n lucidePin,\n lucideSearchX,\n lucideMoreVertical,\n lucideGitBranch,\n lucideAlertTriangle,\n lucideFilter,\n lucideFunnelX,\n lucideBan,\n lucideBuilding,\n lucideType,\n lucidePercent,\n lucideReceipt,\n lucideClipboardPen,\n lucidePackageCheck,\n lucideShoppingBag,\n lucideTag,\n lucideTags,\n lucideTicket,\n lucideWand2,\n lucideZoomIn,\n lucideZoomOut,\n lucideBadge,\n lucideClipboardCopy,\n lucideContact,\n lucideIdCard,\n lucideRecycle,\n lucidePlug,\n lucidePlug2,\n lucideBotMessageSquare,\n lucideBotOff,\n lucideBrain,\n lucideBrainCircuit,\n lucideBrainCog,\n lucideCpu,\n lucideDumbbell,\n lucideSparkle,\n lucideWandSparkles,\n lucideMessageSquareText,\n lucideMic,\n lucideAudioLines,\n lucidePlay,\n lucideSquarePlay,\n lucideEllipsisVertical,\n saxEditOutline,\n} as const satisfies Record<string, IconType>;\n\nexport declare type ZIcon = keyof typeof Z_ICONS;\n","import { HttpClient } from '@angular/common/http';\nimport { type EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { provideNgIconLoader, withCaching } from '@ng-icons/core';\nimport { ZIndexDbService } from '@shival99/z-ui/services';\nimport { catchError, from, map, type Observable, of, switchMap, tap } from 'rxjs';\nimport { Z_ICONS } from './z-icons';\n\nconst iconCacheDb = new ZIndexDbService({\n dbName: 'ZIconCache',\n version: 1,\n stores: [{ name: 'icons', encrypt: true }],\n defaultStore: 'icons',\n});\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 * Gets fallback icon from bundled Z_ICONS if available.\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 // Remove style suffix from icon name\n iconPart = iconPart.replace(/(Bold|Outline|Linear|Bulk|Broken|TwoTone)$/i, '');\n\n // Convert PascalCase to kebab-case\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\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';\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(iconCacheDb.get<string>(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 => {\n void iconCacheDb.set(name, svg);\n }),\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\nexport function provideZIconLoader(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideNgIconLoader(name => {\n const http = inject(HttpClient);\n\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 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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"}