@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.
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs +4 -12
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-icon.mjs +31 -18
- package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-select.mjs +5 -5
- package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-table.mjs +35 -8
- package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-providers.mjs +9 -28
- package/fesm2022/shival99-z-ui-providers.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-services.mjs +27 -70
- package/fesm2022/shival99-z-ui-services.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-utils.mjs +2 -1
- package/fesm2022/shival99-z-ui-utils.mjs.map +1 -1
- package/package.json +1 -1
- package/types/shival99-z-ui-components-z-breadcrumb.d.ts +2 -2
- package/types/shival99-z-ui-components-z-button.d.ts +1 -1
- package/types/shival99-z-ui-components-z-calendar.d.ts +4 -4
- package/types/shival99-z-ui-components-z-dropdown-menu.d.ts +4 -5
- package/types/shival99-z-ui-components-z-empty.d.ts +1 -1
- package/types/shival99-z-ui-components-z-filter.d.ts +1 -1
- package/types/shival99-z-ui-components-z-icon.d.ts +2 -15
- package/types/shival99-z-ui-components-z-input.d.ts +2 -2
- package/types/shival99-z-ui-components-z-modal.d.ts +1 -1
- package/types/shival99-z-ui-components-z-select.d.ts +3 -3
- package/types/shival99-z-ui-components-z-table.d.ts +6 -1
- package/types/shival99-z-ui-components-z-timeline.d.ts +6 -6
- package/types/shival99-z-ui-components-z-upload.d.ts +3 -3
- package/types/shival99-z-ui-providers.d.ts +0 -8
- 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
|
|
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
|
|
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":"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"}
|
|
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 {
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
473
|
+
const parsed = convertIconSaxIconName(name);
|
|
453
474
|
if (!parsed) {
|
|
454
|
-
console.warn(`[ZIcon] Invalid
|
|
475
|
+
console.warn(`[ZIcon] Invalid Sax icon name: "${name}"`);
|
|
455
476
|
return of(getFallbackIcon(name));
|
|
456
477
|
}
|
|
457
|
-
const url = `${
|
|
458
|
-
return
|
|
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
|
|
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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"}
|