@shival99/z-ui 1.1.8 → 1.1.10
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-menu.mjs +4 -0
- package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-select.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -1
- package/package.json +1 -1
- package/types/shival99-z-ui-components-z-menu.d.ts +2 -0
- package/types/shival99-z-ui-components-z-modal.d.ts +1 -1
|
@@ -156,6 +156,7 @@ class ZMenuComponent {
|
|
|
156
156
|
closeMobileMenu: () => this.closeMobileMenu(),
|
|
157
157
|
toggleMobileMenu: () => this.toggleMobileMenu(),
|
|
158
158
|
setSelectedMenuItem: (id) => this.setSelectedMenuItem(id),
|
|
159
|
+
clearActiveItem: () => this.clearActiveItem(),
|
|
159
160
|
toggleSidebar: () => this.toggleSidebar(),
|
|
160
161
|
openMobileTemplateDrawer: (id) => this.openMobileTemplateDrawer(id),
|
|
161
162
|
closeMobileTemplateDrawer: () => this.closeMobileTemplateDrawer(),
|
|
@@ -210,6 +211,9 @@ class ZMenuComponent {
|
|
|
210
211
|
}
|
|
211
212
|
}
|
|
212
213
|
}
|
|
214
|
+
clearActiveItem() {
|
|
215
|
+
this.selectedMenuItem.set(null);
|
|
216
|
+
}
|
|
213
217
|
selectParent(item) {
|
|
214
218
|
this.selectedParent.set(item);
|
|
215
219
|
const hasNoChildren = !item.children || item.children.length === 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-menu.mjs","sources":["../../../../libs/core-ui/components/z-menu/z-menu.component.ts","../../../../libs/core-ui/components/z-menu/z-menu.component.html","../../../../libs/core-ui/components/z-menu/shival99-z-ui-components-z-menu.ts"],"sourcesContent":["import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n PLATFORM_ID,\n signal,\n TemplateRef,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZCacheService } from '@shival99/z-ui/services';\nimport { zDetectBrowser } from '@shival99/z-ui/utils';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport { filter, map, startWith } from 'rxjs';\nimport { ZMenuControl, ZMenuItem, ZMenuOverlayType, ZMenuProcessed, ZMenuUser, ZMenuUserAction } from './z-menu.types';\n\n@Component({\n selector: 'z-menu',\n imports: [\n NgTemplateOutlet,\n ZButtonComponent,\n ZIconComponent,\n ZTooltipDirective,\n ZPopoverDirective,\n NgScrollbar,\n TranslatePipe,\n ],\n standalone: true,\n templateUrl: './z-menu.component.html',\n styleUrl: './z-menu.component.scss',\n providers: [TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-menu block',\n '[class.z-menu-collapsed]': 'sidebarCollapsed()',\n '[class.z-menu-no-child]': 'selectedParentHasNoChild()',\n '[class.z-menu-mobile]': 'isMobile()',\n '[class.z-menu-mobile-open]': 'mobileMenuOpen()',\n },\n})\nexport class ZMenuComponent {\n private readonly _breakpointObserver = inject(BreakpointObserver);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _router = inject(Router);\n\n public readonly zLogo = input<string>('assets/images/avatar.svg');\n public readonly zLogoMobile = input<string>('');\n public readonly zMenus = input<ZMenuItem[]>([]);\n public readonly zUser = input<ZMenuUser | null>(null);\n public readonly zUserActions = input<ZMenuUserAction[]>([]);\n public readonly zActionsTemplate = input<TemplateRef<{ close: () => void }> | null>(null);\n public readonly zCurrentPath = input<string>('');\n public readonly zKey = input<string>('z-menu');\n\n public readonly zOnSelect = output<ZMenuItem>();\n public readonly zOnMenuAction = output<ZMenuUserAction>();\n public readonly zControl = output<ZMenuControl>();\n\n public readonly selectedParent = signal<ZMenuItem | null>(null);\n public readonly selectedMenuItem = signal<ZMenuItem | null>(null);\n public readonly mobileMenuOpen = signal(false);\n public readonly mobileTemplateDrawerOpen = signal(false);\n public readonly sidebarCollapsed = signal(this._getStateMenuCollapsed());\n private readonly _templateDrawerParentId = signal<string | null>(null);\n\n protected readonly closeSidebarFn = (): void => this.sidebarCollapsed.set(true);\n protected readonly closeMobileDrawerFn = (): void => {\n this.mobileTemplateDrawerOpen.set(false);\n this._templateDrawerParentId.set(null);\n };\n\n private readonly _isMobile$ = this._breakpointObserver.observe([Breakpoints.XSmall, Breakpoints.Small]).pipe(\n map(result => result.matches),\n takeUntilDestroyed(this._destroyRef)\n );\n\n public readonly isMobile = toSignal(this._isMobile$, { initialValue: false });\n protected readonly mobileLogo = computed(() => this.zLogoMobile() || this.zLogo());\n\n private readonly _routerPath = toSignal(\n this._router.events.pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n map(e => e.urlAfterRedirects),\n startWith(this._router.url)\n ),\n { initialValue: this._router.url }\n );\n\n private readonly _currentPath = computed(() => this.zCurrentPath() || this._routerPath());\n protected readonly overlayType = computed((): ZMenuOverlayType => {\n if (!isPlatformBrowser(this._platformId)) {\n return 'dark';\n }\n\n const browser = zDetectBrowser();\n return browser.name === 'Chrome' ? 'dark' : 'blur';\n });\n\n protected readonly menuProcessed = computed((): ZMenuProcessed => this._processMenus(this.zMenus()));\n\n protected readonly menuParents = computed(() =>\n this.menuProcessed().tree.filter((item: ZMenuItem) => !item.parent || item.parent.length === 0)\n );\n\n protected readonly menuChildren = computed(() => {\n const selected = this.selectedParent();\n if (!selected) {\n return [];\n }\n return selected.children ?? [];\n });\n\n protected readonly selectedParentHasNoChild = computed(() => {\n const parent = this.selectedParent();\n if (!parent) {\n return false;\n }\n const hasNoChildren = !parent.children || parent.children.length === 0;\n return !parent.menuTemplate && hasNoChildren;\n });\n\n protected readonly parentWithActiveChild = computed(() => {\n const activeItem = this.selectedMenuItem();\n if (!activeItem) {\n return null;\n }\n\n for (const parent of this.menuParents()) {\n if (this._isChildOf(activeItem.id, parent)) {\n return parent;\n }\n\n const hasNoChildren = !parent.children || parent.children.length === 0;\n if ((parent.menuTemplate || hasNoChildren) && activeItem.id === parent.id) {\n return parent;\n }\n }\n return null;\n });\n\n protected isParentOfActiveItem(item: ZMenuItem): boolean {\n const activeItem = this.selectedMenuItem();\n if (!activeItem) {\n return false;\n }\n\n if (activeItem.parent && activeItem.parent.length > 0) {\n return activeItem.parent.includes(item.id);\n }\n\n return false;\n }\n\n protected readonly avatarSrc = computed(() => this.zUser()?.avatar || this.zLogo());\n\n protected readonly customDrawerParent = computed(() => {\n const parentId = this._templateDrawerParentId();\n if (!parentId) {\n return null;\n }\n return this.menuParents().find((p: ZMenuItem) => p.id === parentId) ?? null;\n });\n\n private readonly _defaultSidebarChildWidth = 230;\n private readonly _defaultMobileDrawerWidth = 280;\n\n protected readonly sidebarChildWidth = computed(() => {\n const parent = this.selectedParent();\n if (parent?.menuTemplate && parent.menuTemplateWidth) {\n return parent.menuTemplateWidth;\n }\n return this._defaultSidebarChildWidth;\n });\n\n protected readonly mobileCustomDrawerWidth = computed(() => {\n const parent = this.customDrawerParent();\n if (parent?.menuTemplateWidth) {\n return parent.menuTemplateWidth;\n }\n return this._defaultMobileDrawerWidth;\n });\n\n constructor() {\n effect(() => {\n const parents = this.menuParents();\n if (parents.length > 0 && !untracked(() => this.selectedParent())) {\n this.selectedParent.set(parents[0]);\n }\n });\n\n effect(() => {\n const currentPath = this._currentPath();\n const processedMenus = this.menuProcessed();\n if (!currentPath || processedMenus.flat.size === 0) {\n return;\n }\n\n const matchingItem = this._findMenuItemByPath(currentPath, processedMenus);\n const currentSelectedId = untracked(() => this.selectedMenuItem()?.id);\n if (matchingItem && matchingItem.id !== currentSelectedId) {\n this.setSelectedMenuItem(matchingItem.id);\n }\n });\n\n effect(() => {\n if (!this.isMobile() && this.mobileMenuOpen()) {\n this.mobileMenuOpen.set(false);\n }\n });\n\n effect(() => {\n const collapsed = this.sidebarCollapsed();\n ZCacheService.set(this.zKey(), collapsed);\n });\n\n setTimeout(() => this._emitControl());\n }\n\n private _emitControl(): void {\n this.zControl.emit({\n openMobileMenu: () => this.openMobileMenu(),\n closeMobileMenu: () => this.closeMobileMenu(),\n toggleMobileMenu: () => this.toggleMobileMenu(),\n setSelectedMenuItem: (id: string) => this.setSelectedMenuItem(id),\n toggleSidebar: () => this.toggleSidebar(),\n openMobileTemplateDrawer: (id: string) => this.openMobileTemplateDrawer(id),\n closeMobileTemplateDrawer: () => this.closeMobileTemplateDrawer(),\n sidebarCollapsed: this.sidebarCollapsed.asReadonly(),\n mobileMenuOpen: this.mobileMenuOpen.asReadonly(),\n mobileTemplateDrawerOpen: this.mobileTemplateDrawerOpen.asReadonly(),\n selectedMenuItem: this.selectedMenuItem.asReadonly(),\n selectedParent: this.selectedParent.asReadonly(),\n menuProcessed: this.menuProcessed,\n });\n }\n\n public openMobileMenu(): void {\n this.mobileMenuOpen.set(true);\n }\n\n public closeMobileMenu(): void {\n this.mobileMenuOpen.set(false);\n }\n\n public toggleMobileMenu(): void {\n this.mobileMenuOpen.set(!this.mobileMenuOpen());\n }\n\n public openMobileTemplateDrawer(parentId: string): void {\n this._templateDrawerParentId.set(parentId);\n this.mobileMenuOpen.set(false);\n requestAnimationFrame(() => {\n this.mobileTemplateDrawerOpen.set(true);\n });\n }\n\n public closeMobileTemplateDrawer(): void {\n this.mobileTemplateDrawerOpen.set(false);\n this.mobileMenuOpen.set(true);\n setTimeout(() => {\n this._templateDrawerParentId.set(null);\n }, 300);\n }\n\n public setSelectedMenuItem(menuId: string): void {\n const item = this._findMenuItemById(menuId);\n if (!item) {\n return;\n }\n\n this.selectedMenuItem.set(item);\n\n const parent = this._findParentOfMenuItem(menuId);\n if (!parent) {\n return;\n }\n\n this.selectedParent.set(parent);\n parent.expanded = true;\n\n if (item.parent && item.parent.length > 1) {\n const level2ParentId = item.parent[item.parent.length - 1];\n const level2Parent = this._findMenuItemById(level2ParentId);\n if (level2Parent) {\n level2Parent.expanded = true;\n }\n }\n }\n\n protected selectParent(item: ZMenuItem): void {\n this.selectedParent.set(item);\n const hasNoChildren = !item.children || item.children.length === 0;\n\n if (item.menuTemplate || hasNoChildren) {\n this.selectedMenuItem.set(item);\n }\n\n const processedItem = this.menuProcessed().flat.get(item.id);\n if (processedItem) {\n this.zOnSelect.emit(processedItem);\n }\n }\n\n protected onDesktopParentClick(item: ZMenuItem): void {\n this.selectParent(item);\n const hasChildrenOrTemplate = item.menuTemplate || (item.children && item.children.length > 0);\n\n if (this.sidebarCollapsed() && hasChildrenOrTemplate) {\n this.toggleSidebar();\n }\n }\n\n protected onMenuItemClick(item: ZMenuItem): void {\n if (item.children && item.children.length > 0) {\n item.expanded = !item.expanded;\n return;\n }\n\n this.selectedMenuItem.set(item);\n this._expandParentsOfItem(item);\n\n const processedItem = this.menuProcessed().flat.get(item.id);\n if (processedItem) {\n this.zOnSelect.emit(processedItem);\n }\n\n if (this.isMobile()) {\n this.closeMobileMenu();\n this.mobileTemplateDrawerOpen.set(false);\n }\n }\n\n protected onMobileParentClick(item: ZMenuItem): void {\n if (item.menuTemplate) {\n this.selectParent(item);\n this.openMobileTemplateDrawer(item.id);\n return;\n }\n\n const hasNoChildren = !item.children || item.children.length === 0;\n if (hasNoChildren) {\n this.selectParent(item);\n this.closeMobileMenu();\n return;\n }\n\n if (this.selectedParent()?.id === item.id) {\n item.expanded = !item.expanded;\n this.selectedParent.set({ ...item });\n return;\n }\n\n this.selectParent(item);\n item.expanded = true;\n }\n\n protected toggleSidebar(): void {\n if (!this.selectedParent()?.children?.length) {\n return;\n }\n\n this.sidebarCollapsed.set(!this.sidebarCollapsed());\n }\n\n protected closeSidebar(): void {\n this.sidebarCollapsed.set(true);\n }\n\n protected onUserActionClick(action: ZMenuUserAction): void {\n if (action.disabled) {\n return;\n }\n this.zOnMenuAction.emit(action);\n }\n\n protected getVisibleUserActions(): ZMenuUserAction[] {\n return this.zUserActions().filter(action => !action.hidden);\n }\n\n protected shouldShowDividerBefore(action: ZMenuUserAction, index: number): boolean {\n return action.divide === 'before' && index > 0;\n }\n\n protected shouldShowDividerAfter(action: ZMenuUserAction, index: number): boolean {\n return action.divide === 'after' && index < this.getVisibleUserActions().length - 1;\n }\n\n protected onBackdropClick(): void {\n if (this.mobileTemplateDrawerOpen()) {\n this.mobileTemplateDrawerOpen.set(false);\n this._templateDrawerParentId.set(null);\n }\n this.closeMobileMenu();\n }\n\n private _findMenuItemById(id: string): ZMenuItem | null {\n return this.menuProcessed().flat.get(id) ?? null;\n }\n\n private _findParentOfMenuItem(id: string): ZMenuItem | null {\n const item = this.menuProcessed().flat.get(id);\n if (!item?.parent?.length) {\n return null;\n }\n\n const parentId = item.parent[item.parent.length - 1];\n return this.menuProcessed().flat.get(parentId) ?? null;\n }\n\n private _isChildOf(childId: string, parent: ZMenuItem): boolean {\n const child = this.menuProcessed().flat.get(childId);\n if (!child?.parent?.length) {\n return false;\n }\n\n return child.parent.includes(parent.id);\n }\n\n private _expandParentsOfItem(item: ZMenuItem): void {\n if (!item.parent || item.parent.length === 0) {\n return;\n }\n\n for (const parentId of item.parent) {\n const parentItem = this.menuProcessed().flat.get(parentId);\n if (parentItem) {\n parentItem.expanded = true;\n }\n }\n }\n\n private _processMenus(menus: ZMenuItem[]): ZMenuProcessed {\n const flat = new Map<string, ZMenuItem>();\n const processItem = (item: ZMenuItem, parentIds: string[], level: number): ZMenuItem => {\n item.parent = [...parentIds];\n item.level = level;\n flat.set(item.id, item);\n\n if (item.children && item.children.length > 0) {\n const newParentIds = [...parentIds, item.id];\n item.children = item.children.map(child => processItem(child, newParentIds, level + 1));\n }\n\n return item;\n };\n\n const tree = menus.map(item => processItem(item, [], 0));\n return { tree, flat };\n }\n\n private _findMenuItemByPath(path: string, processed: ZMenuProcessed): ZMenuItem | null {\n const normalizedPath = path.split('?')[0].replace(/\\/$/, '') || '/';\n for (const item of processed.flat.values()) {\n const itemPath = item.path?.replace(/\\/$/, '') || '';\n if (itemPath === normalizedPath) {\n return item;\n }\n }\n\n for (const item of processed.flat.values()) {\n if (item.subPaths && item.subPaths.length > 0) {\n for (const subPath of item.subPaths) {\n const normalizedSubPath = subPath.replace(/\\/$/, '');\n if (normalizedPath.startsWith(normalizedSubPath)) {\n return item;\n }\n }\n }\n }\n\n for (const item of processed.flat.values()) {\n const itemPath = item.path?.replace(/\\/$/, '') || '';\n if (itemPath && normalizedPath.startsWith(itemPath + '/')) {\n return item;\n }\n }\n\n return null;\n }\n\n private _getStateMenuCollapsed(): boolean {\n return ZCacheService.get<boolean>(this.zKey(), false) ?? false;\n }\n}\n","<!-- DESKTOP LAYOUT - Hidden on mobile -->\n<div class=\"z-menu-desktop relative z-200 hidden h-full py-1 pl-1 md:block\" [class.collapsed]=\"sidebarCollapsed()\">\n <main class=\"z-menu-main relative flex h-full\">\n <div class=\"z-sidebar-main h-full w-[50px]\">\n <div\n class=\"z-shadow-menu bg-sidebar border-border/40 dark:border-sidebar-border relative flex h-full w-full flex-col items-center gap-1.5 rounded-[6px] border\"></div>\n\n <div class=\"bg-sidebar text-sidebar-foreground absolute inset-px z-20 flex flex-col rounded-[6px]\">\n @if (zLogo()) {\n <div class=\"border-sidebar-border flex h-[52px] items-center justify-center border-b px-2\">\n <img [src]=\"zLogo()\" alt=\"Logo\" class=\"h-8 w-auto object-contain\" />\n </div>\n }\n\n <!-- Expand Button - Only show when collapsed -->\n @if (sidebarCollapsed() && selectedParent()) {\n <div\n class=\"z-expand-btn hover:bg-sidebar-accent mx-auto mt-2 flex h-9 w-9 cursor-pointer items-center justify-center rounded-[6px]\"\n (click)=\"toggleSidebar()\">\n <z-icon zType=\"lucideChevronsRight\" zSize=\"20\" class=\"opacity-70\" />\n </div>\n }\n\n <div class=\"flex flex-1 flex-col items-center gap-2 p-2\">\n @for (item of menuParents(); track item.id) {\n @let hasActiveChild = parentWithActiveChild()?.id === item.id;\n @let isCurrentlySelected = selectedParent()?.id === item.id;\n @let showActiveIndicator = hasActiveChild && !isCurrentlySelected;\n <div\n zTooltip\n [zContent]=\"item.name | translate\"\n zPosition=\"right\"\n [zArrow]=\"false\"\n [zAlwaysShow]=\"true\"\n class=\"relative flex h-9 w-9 cursor-pointer items-center justify-center rounded-[6px] select-none\"\n [class.bg-sidebar-primary]=\"selectedParent()?.id === item.id\"\n [class.text-sidebar-primary-foreground]=\"selectedParent()?.id === item.id\"\n [class.hover:bg-sidebar-accent]=\"selectedParent()?.id !== item.id\"\n (click)=\"onDesktopParentClick(item)\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" zSize=\"20\" />\n } @else {\n <z-icon [zSvg]=\"item.iconSvg || ''\" zSize=\"20\" />\n }\n @if (showActiveIndicator) {\n <div\n class=\"bg-sidebar-primary absolute top-1/2 -left-[5px] h-4 w-1 -translate-y-1/2 rounded-full\"></div>\n }\n </div>\n }\n </div>\n\n <div class=\"border-sidebar-border flex items-center justify-center border-t p-2\">\n <div\n z-popover\n [zOffset]=\"11\"\n [zPopoverContent]=\"userPopoverTpl\"\n zPosition=\"right-bottom\"\n class=\"aspect-square h-9 w-9 shrink-0 cursor-pointer overflow-hidden rounded-full\">\n <img [src]=\"avatarSrc()\" alt=\"User Avatar\" class=\"h-full w-full object-cover\" />\n </div>\n </div>\n </div>\n </div>\n\n <ng-template #userPopoverTpl let-close=\"close\">\n <div class=\"min-w-56 p-1\">\n <!-- User Info Header - Always shown -->\n <div class=\"p-0 text-sm font-normal\">\n <div class=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n <div class=\"h-8 w-8 shrink-0 overflow-hidden rounded-full\">\n <img [src]=\"avatarSrc()\" alt=\"User Avatar\" class=\"aspect-square size-full object-cover\" />\n </div>\n <div class=\"grid flex-1 text-left text-sm leading-tight\">\n <span class=\"truncate font-medium\">{{ zUser()?.name || 'User Name' }}</span>\n <span class=\"text-muted-foreground mt-0.5 truncate text-xs\">\n {{ zUser()?.email || 'user@example.com' }}\n </span>\n </div>\n </div>\n </div>\n\n @if (getVisibleUserActions().length > 0 || zActionsTemplate()) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <!-- Actions - Custom or from zUserActions -->\n @if (zActionsTemplate()) {\n <ng-container *ngTemplateOutlet=\"zActionsTemplate(); context: { close: close }\" />\n } @else if (getVisibleUserActions().length > 0) {\n @for (action of getVisibleUserActions(); track action.id; let idx = $index) {\n @if (shouldShowDividerBefore(action, idx)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n [disabled]=\"action.disabled\"\n [class]=\"action.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 outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onUserActionClick(action); close()\">\n @if (action.icon) {\n <z-icon [zType]=\"action.icon\" zSize=\"14\" class=\"text-muted-foreground\" />\n }\n <span>{{ action.label | translate }}</span>\n </button>\n\n @if (shouldShowDividerAfter(action, idx)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n }\n </div>\n </ng-template>\n\n @if (selectedParent(); as parent) {\n @let hasChildrenOrTemplate = parent.menuTemplate || (parent.children && parent.children.length > 0);\n @if (hasChildrenOrTemplate) {\n <div\n class=\"z-sidebar-child-wrapper\"\n [class.collapsed]=\"sidebarCollapsed()\"\n [style.--sidebar-child-width.px]=\"sidebarChildWidth()\">\n <div\n class=\"z-sidebar-child z-shadow-menu bg-card text-card-foreground border-border/40 dark:border-sidebar-border flex h-full shrink-0 flex-col items-start rounded-[6px] border\"\n [style.width.px]=\"sidebarChildWidth()\"\n [class.collapsed]=\"sidebarCollapsed()\">\n <div class=\"border-border flex h-[52px] w-full shrink-0 items-center border-b px-3\">\n @if (selectedParent()?.icon) {\n <z-icon [zType]=\"selectedParent()!.icon\" zSize=\"20\" class=\"mr-2 shrink-0\" />\n }\n <div\n class=\"mr-4 min-w-0 flex-1 truncate text-base font-semibold\"\n zTooltip\n zPosition=\"top-left\"\n [zContent]=\"selectedParent()?.name || '' | translate\"\n [zArrow]=\"false\">\n {{ selectedParent()?.name | translate }}\n </div>\n\n <z-icon\n zType=\"lucidePanelRightOpen\"\n zSize=\"20\"\n class=\"shrink-0 cursor-pointer opacity-60 hover:opacity-100\"\n (click)=\"toggleSidebar()\" />\n </div>\n\n <!-- Show menuTemplate if available, otherwise show children -->\n @if (selectedParent()?.menuTemplate) {\n <ng-scrollbar class=\"z-menu-scrollbar min-h-0 w-full flex-1\" track=\"vertical\">\n <div class=\"flex w-full flex-col p-3 pr-2\">\n <ng-container\n *ngTemplateOutlet=\"\n selectedParent()!.menuTemplate!;\n context: { $implicit: selectedParent()!, close: closeSidebarFn }\n \" />\n </div>\n </ng-scrollbar>\n } @else {\n <ng-scrollbar class=\"z-menu-scrollbar min-h-0 w-full flex-1\" track=\"vertical\">\n <div class=\"flex w-full flex-col gap-1 py-1 pr-2 pl-2\">\n <ng-container *ngTemplateOutlet=\"menuChildrenTpl; context: { $implicit: menuChildren() }\" />\n </div>\n </ng-scrollbar>\n }\n </div>\n </div>\n }\n }\n </main>\n</div>\n\n<!-- MOBILE LAYOUT - Visible only on mobile -->\n<div class=\"z-menu-mobile-wrapper hidden max-md:block\">\n <!-- Mobile Backdrop -->\n @if (mobileMenuOpen() || mobileTemplateDrawerOpen()) {\n <div\n class=\"z-menu-backdrop fixed inset-0 z-9998\"\n [class.z-menu-backdrop-dark]=\"overlayType() === 'dark'\"\n [class.z-menu-backdrop-blur]=\"overlayType() === 'blur'\"\n (click)=\"onBackdropClick()\"></div>\n }\n\n <!-- Mobile Drawer -->\n <aside\n class=\"z-menu-drawer bg-background border-border fixed top-0 left-0 z-9999 flex h-full w-70 flex-col rounded-r-lg border-r\"\n [class.open]=\"mobileMenuOpen()\">\n <!-- Drawer Header -->\n <div class=\"border-border flex h-14 shrink-0 items-center justify-between border-b px-4\">\n @if (mobileLogo()) {\n <img [src]=\"mobileLogo()\" alt=\"Logo\" class=\"h-8 w-auto object-contain\" />\n }\n <button z-button zType=\"ghost\" [zWave]=\"false\" class=\"bg-accent h-9 w-9 shrink-0\" (click)=\"closeMobileMenu()\">\n <z-icon zType=\"lucideX\" zSize=\"20\" />\n </button>\n </div>\n\n <!-- Drawer Content - Accordion Menu -->\n <ng-scrollbar class=\"z-menu-scrollbar flex-1\" track=\"vertical\">\n <div class=\"p-3\">\n @for (parent of menuParents(); track parent.id) {\n <div class=\"mb-1\">\n <!-- Parent Item -->\n @let isParentActive =\n selectedMenuItem()?.id === parent.id && (!parent.children || parent.children.length === 0);\n @let hasActiveChild = parentWithActiveChild()?.id === parent.id && !isParentActive;\n @let isCurrentlyViewing = selectedParent()?.id === parent.id;\n <div\n class=\"relative flex cursor-pointer items-center gap-3 rounded-[6px] p-2\"\n [class.bg-primary/20]=\"isParentActive\"\n [class.text-primary]=\"isParentActive || hasActiveChild\"\n [class.hover:bg-accent]=\"!isParentActive\"\n (click)=\"onMobileParentClick(parent)\">\n @if (parent.icon) {\n <z-icon [zType]=\"parent.icon\" zSize=\"18\" class=\"shrink-0\" />\n } @else if (parent.iconSvg) {\n <z-icon [zSvg]=\"parent.iconSvg\" zSize=\"18\" class=\"shrink-0\" />\n }\n <span class=\"min-w-0 flex-1 truncate text-[13px] font-[450]\">{{ parent.name | translate }}</span>\n @if ((parent.children && parent.children.length > 0) || parent.menuTemplate) {\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"16\"\n class=\"z-menu-arrow shrink-0 opacity-60 transition-transform\"\n [class.expanded]=\"parent.expanded && isCurrentlyViewing\" />\n }\n </div>\n\n <!-- Children (Accordion) - Only render if NO menuTemplate -->\n @if (parent.children && parent.children.length > 0 && !parent.menuTemplate) {\n <div class=\"z-menu-submenu\" [class.expanded]=\"parent.expanded && isCurrentlyViewing\">\n <div class=\"z-menu-submenu-inner\">\n <div class=\"z-menu-tree relative ml-4 flex flex-col gap-1 pt-1 pl-3\">\n <div class=\"absolute top-0 bottom-2 left-0 w-px bg-gray-300 dark:bg-gray-600\"></div>\n\n @for (child of parent.children; track child.id) {\n @let isChildActive =\n selectedMenuItem()?.id === child.id && (!child.children || child.children.length === 0);\n @let isChildParentOfActive = isParentOfActiveItem(child);\n @let hasChildren = child.children && child.children.length > 0;\n\n <div>\n <div\n class=\"relative flex cursor-pointer items-center gap-2 rounded-[6px] p-2\"\n [class.bg-primary]=\"isChildActive\"\n [class.text-primary-foreground]=\"isChildActive\"\n [class.text-primary]=\"isChildParentOfActive && !isChildActive\"\n [class.hover:bg-accent]=\"!isChildActive\"\n (click)=\"onMenuItemClick(child)\">\n <div class=\"absolute top-1/2 -left-3 h-px w-3 bg-gray-300 dark:bg-gray-600\"></div>\n @if (child.icon) {\n <z-icon [zType]=\"child.icon\" zSize=\"16\" class=\"shrink-0\" />\n } @else if (child.iconSvg) {\n <z-icon [zSvg]=\"child.iconSvg\" zSize=\"16\" class=\"shrink-0\" />\n } @else {\n <div\n class=\"h-1.5 w-1.5 shrink-0 rounded-full\"\n [class.bg-primary-foreground]=\"isChildActive\"\n [class.bg-gray-400]=\"!isChildActive\"></div>\n }\n <span class=\"min-w-0 flex-1 truncate text-[13px] font-[450]\">\n {{ child.name | translate }}\n </span>\n @if (hasChildren) {\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"z-menu-arrow shrink-0 opacity-60 transition-transform\"\n [class.expanded]=\"child.expanded\" />\n }\n </div>\n\n <!-- Level 3 -->\n @if (hasChildren) {\n <div class=\"z-menu-submenu\" [class.expanded]=\"child.expanded\">\n <div class=\"z-menu-submenu-inner\">\n <div class=\"relative ml-4 flex flex-col gap-1 pt-1 pl-3\">\n <div class=\"absolute top-0 bottom-2 left-0 w-px bg-gray-300 dark:bg-gray-600\"></div>\n\n @for (subChild of child.children; track subChild.id) {\n @let isSubChildActive = selectedMenuItem()?.id === subChild.id;\n\n <div class=\"relative\">\n <div class=\"absolute top-1/2 -left-3 h-px w-3 bg-gray-300 dark:bg-gray-600\"></div>\n\n <div\n class=\"flex cursor-pointer items-center gap-2 rounded-[6px] p-2\"\n [class.bg-primary]=\"isSubChildActive\"\n [class.text-primary-foreground]=\"isSubChildActive\"\n [class.hover:bg-accent]=\"!isSubChildActive\"\n (click)=\"onMenuItemClick(subChild)\">\n <div\n class=\"h-1 w-1 shrink-0 rounded-full\"\n [class.bg-primary-foreground]=\"isSubChildActive\"\n [class.bg-gray-400]=\"!isSubChildActive\"></div>\n <span class=\"min-w-0 flex-1 truncate text-[13px] font-[450]\">\n {{ subChild.name | translate }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </ng-scrollbar>\n\n <!-- Drawer Footer - User Info -->\n <div class=\"border-border shrink-0 border-t p-3\">\n <div\n z-popover\n [zOffset]=\"8\"\n [zPopoverContent]=\"mobileActionsPopoverTpl\"\n zPosition=\"top-right\"\n zTrigger=\"click\"\n class=\"hover:bg-accent flex cursor-pointer items-center gap-3 rounded-[6px] p-2\">\n <div class=\"h-10 w-10 shrink-0 overflow-hidden rounded-full\">\n <img [src]=\"avatarSrc()\" alt=\"User Avatar\" class=\"h-full w-full object-cover\" />\n </div>\n <div class=\"min-w-0 flex-1\">\n <div class=\"truncate text-sm font-medium\">{{ zUser()?.name || 'User Name' }}</div>\n <div class=\"text-muted-foreground truncate text-xs\">{{ zUser()?.email || 'user@example.com' }}</div>\n </div>\n <div class=\"text-muted-foreground flex shrink-0 flex-col\">\n <z-icon zType=\"lucideChevronUp\" zSize=\"14\" />\n <z-icon zType=\"lucideChevronDown\" zSize=\"14\" class=\"-mt-1\" />\n </div>\n </div>\n </div>\n </aside>\n\n <!-- Mobile Custom Template Drawer -->\n <aside\n class=\"z-menu-custom-drawer bg-background border-border fixed top-0 left-0 z-9999 flex h-full max-w-[calc(100vw-16px)] flex-col rounded-r-lg border-r\"\n [style.width.px]=\"mobileCustomDrawerWidth()\"\n [class.open]=\"mobileTemplateDrawerOpen() && customDrawerParent()?.menuTemplate\">\n @if (customDrawerParent()?.menuTemplate) {\n <!-- Custom Drawer Header -->\n <div class=\"border-border flex h-14 shrink-0 items-center gap-3 border-b px-4\">\n <button\n z-button\n zType=\"ghost\"\n [zWave]=\"false\"\n class=\"bg-accent h-9 w-9 shrink-0\"\n (click)=\"closeMobileTemplateDrawer()\">\n <z-icon zType=\"lucideChevronLeft\" zSize=\"20\" />\n </button>\n <span class=\"min-w-0 flex-1 truncate text-base font-semibold\">\n {{ customDrawerParent()?.name | translate }}\n </span>\n </div>\n\n <!-- Custom Template Content -->\n <ng-scrollbar class=\"z-menu-scrollbar flex-1\" track=\"vertical\">\n <div class=\"p-4\">\n <ng-container\n *ngTemplateOutlet=\"\n customDrawerParent()!.menuTemplate!;\n context: { $implicit: customDrawerParent()!, close: closeMobileDrawerFn }\n \" />\n </div>\n </ng-scrollbar>\n }\n </aside>\n\n <ng-template #mobileActionsPopoverTpl let-close=\"close\">\n <div class=\"min-w-48 p-1\">\n @if (zActionsTemplate()) {\n <ng-container *ngTemplateOutlet=\"zActionsTemplate(); context: { close: close }\" />\n } @else if (getVisibleUserActions().length > 0) {\n @for (action of getVisibleUserActions(); track action.id; let idx = $index) {\n @if (shouldShowDividerBefore(action, idx)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n [disabled]=\"action.disabled\"\n [class]=\"action.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 outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onUserActionClick(action); close()\">\n @if (action.icon) {\n <z-icon [zType]=\"action.icon\" zSize=\"14\" class=\"text-muted-foreground\" />\n }\n <span>{{ action.label | translate }}</span>\n </button>\n\n @if (shouldShowDividerAfter(action, idx)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n }\n </div>\n </ng-template>\n</div>\n\n<!-- Shared Template for Menu Children -->\n<ng-template #menuChildrenTpl let-children>\n @for (child of children; track child.id) {\n @let isChildActive = selectedMenuItem()?.id === child.id && (!child.children || child.children.length === 0);\n @let isChildParentOfActive = isParentOfActiveItem(child);\n @let hasChildren = child.children && child.children.length > 0;\n <div>\n <div\n #divLevel1\n class=\"z-menu-item flex w-full cursor-pointer items-center gap-2 rounded-[6px] p-2\"\n [class.bg-primary]=\"isChildActive\"\n [class.text-primary-foreground]=\"isChildActive\"\n [class.text-primary]=\"isChildParentOfActive && !isChildActive\"\n [class.hover:bg-gray-200]=\"!isChildActive\"\n [class.dark:hover:bg-input/50]=\"!isChildActive\"\n (click)=\"onMenuItemClick(child)\">\n @if (child.icon) {\n <z-icon [zType]=\"child.icon\" zSize=\"18\" class=\"shrink-0\" />\n } @else if (child.iconSvg) {\n <z-icon [zSvg]=\"child.iconSvg\" zSize=\"18\" class=\"shrink-0\" />\n }\n <span\n class=\"min-w-0 flex-1 truncate text-[13px] font-[450]\"\n zTooltip\n [zContent]=\"child.name | translate\"\n [zArrow]=\"false\"\n [zOffset]=\"10\"\n zMaxWidth=\"200px\"\n zPosition=\"right\"\n [zTriggerElement]=\"divLevel1\">\n {{ child.name | translate }}\n </span>\n @if (hasChildren) {\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"z-menu-arrow shrink-0 opacity-60 transition-transform\"\n [class.expanded]=\"child.expanded\" />\n }\n </div>\n\n @if (hasChildren) {\n <div class=\"z-menu-submenu\" [class.expanded]=\"child.expanded\">\n <div class=\"z-menu-submenu-inner\">\n <div class=\"z-menu-tree relative ml-4 flex flex-col gap-1 pt-1 pl-3\">\n <div class=\"absolute top-0 bottom-2 left-0 w-px bg-gray-300 dark:bg-gray-600\"></div>\n\n @for (subChild of child.children; track subChild.id; let isLast = $last) {\n @let isSubChildActive = selectedMenuItem()?.id === subChild.id;\n <div class=\"relative\">\n <div class=\"absolute top-1/2 -left-3 h-px w-3 bg-gray-300 dark:bg-gray-600\"></div>\n\n <div\n #divLevel2\n class=\"z-menu-item flex w-full cursor-pointer items-center gap-2 rounded-[6px] p-2\"\n [class.bg-primary]=\"isSubChildActive\"\n [class.text-primary-foreground]=\"isSubChildActive\"\n [class.hover:bg-gray-200]=\"!isSubChildActive\"\n [class.dark:hover:bg-input/50]=\"!isSubChildActive\"\n (click)=\"onMenuItemClick(subChild)\">\n @if (subChild.icon) {\n <z-icon [zType]=\"subChild.icon\" zSize=\"16\" class=\"shrink-0\" />\n } @else if (subChild.iconSvg) {\n <z-icon [zSvg]=\"subChild.iconSvg\" zSize=\"16\" class=\"shrink-0\" />\n } @else {\n <div\n class=\"h-1 w-1 shrink-0 rounded-full\"\n [class.bg-primary-foreground]=\"isSubChildActive\"\n [class.bg-gray-400]=\"!isSubChildActive\"></div>\n }\n <span\n class=\"min-w-0 flex-1 truncate text-[13px] font-[450]\"\n zTooltip\n [zContent]=\"subChild.name | translate\"\n [zArrow]=\"false\"\n [zOffset]=\"10\"\n zMaxWidth=\"200px\"\n zPosition=\"right\"\n [zTriggerElement]=\"divLevel2\">\n {{ subChild.name | translate }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\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-menu.mjs","sources":["../../../../libs/core-ui/components/z-menu/z-menu.component.ts","../../../../libs/core-ui/components/z-menu/z-menu.component.html","../../../../libs/core-ui/components/z-menu/shival99-z-ui-components-z-menu.ts"],"sourcesContent":["import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n PLATFORM_ID,\n signal,\n TemplateRef,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZCacheService } from '@shival99/z-ui/services';\nimport { zDetectBrowser } from '@shival99/z-ui/utils';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport { filter, map, startWith } from 'rxjs';\nimport { ZMenuControl, ZMenuItem, ZMenuOverlayType, ZMenuProcessed, ZMenuUser, ZMenuUserAction } from './z-menu.types';\n\n@Component({\n selector: 'z-menu',\n imports: [\n NgTemplateOutlet,\n ZButtonComponent,\n ZIconComponent,\n ZTooltipDirective,\n ZPopoverDirective,\n NgScrollbar,\n TranslatePipe,\n ],\n standalone: true,\n templateUrl: './z-menu.component.html',\n styleUrl: './z-menu.component.scss',\n providers: [TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-menu block',\n '[class.z-menu-collapsed]': 'sidebarCollapsed()',\n '[class.z-menu-no-child]': 'selectedParentHasNoChild()',\n '[class.z-menu-mobile]': 'isMobile()',\n '[class.z-menu-mobile-open]': 'mobileMenuOpen()',\n },\n})\nexport class ZMenuComponent {\n private readonly _breakpointObserver = inject(BreakpointObserver);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _router = inject(Router);\n\n public readonly zLogo = input<string>('assets/images/avatar.svg');\n public readonly zLogoMobile = input<string>('');\n public readonly zMenus = input<ZMenuItem[]>([]);\n public readonly zUser = input<ZMenuUser | null>(null);\n public readonly zUserActions = input<ZMenuUserAction[]>([]);\n public readonly zActionsTemplate = input<TemplateRef<{ close: () => void }> | null>(null);\n public readonly zCurrentPath = input<string>('');\n public readonly zKey = input<string>('z-menu');\n\n public readonly zOnSelect = output<ZMenuItem>();\n public readonly zOnMenuAction = output<ZMenuUserAction>();\n public readonly zControl = output<ZMenuControl>();\n\n public readonly selectedParent = signal<ZMenuItem | null>(null);\n public readonly selectedMenuItem = signal<ZMenuItem | null>(null);\n public readonly mobileMenuOpen = signal(false);\n public readonly mobileTemplateDrawerOpen = signal(false);\n public readonly sidebarCollapsed = signal(this._getStateMenuCollapsed());\n private readonly _templateDrawerParentId = signal<string | null>(null);\n\n protected readonly closeSidebarFn = (): void => this.sidebarCollapsed.set(true);\n protected readonly closeMobileDrawerFn = (): void => {\n this.mobileTemplateDrawerOpen.set(false);\n this._templateDrawerParentId.set(null);\n };\n\n private readonly _isMobile$ = this._breakpointObserver.observe([Breakpoints.XSmall, Breakpoints.Small]).pipe(\n map(result => result.matches),\n takeUntilDestroyed(this._destroyRef)\n );\n\n public readonly isMobile = toSignal(this._isMobile$, { initialValue: false });\n protected readonly mobileLogo = computed(() => this.zLogoMobile() || this.zLogo());\n\n private readonly _routerPath = toSignal(\n this._router.events.pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n map(e => e.urlAfterRedirects),\n startWith(this._router.url)\n ),\n { initialValue: this._router.url }\n );\n\n private readonly _currentPath = computed(() => this.zCurrentPath() || this._routerPath());\n protected readonly overlayType = computed((): ZMenuOverlayType => {\n if (!isPlatformBrowser(this._platformId)) {\n return 'dark';\n }\n\n const browser = zDetectBrowser();\n return browser.name === 'Chrome' ? 'dark' : 'blur';\n });\n\n protected readonly menuProcessed = computed((): ZMenuProcessed => this._processMenus(this.zMenus()));\n\n protected readonly menuParents = computed(() =>\n this.menuProcessed().tree.filter((item: ZMenuItem) => !item.parent || item.parent.length === 0)\n );\n\n protected readonly menuChildren = computed(() => {\n const selected = this.selectedParent();\n if (!selected) {\n return [];\n }\n return selected.children ?? [];\n });\n\n protected readonly selectedParentHasNoChild = computed(() => {\n const parent = this.selectedParent();\n if (!parent) {\n return false;\n }\n const hasNoChildren = !parent.children || parent.children.length === 0;\n return !parent.menuTemplate && hasNoChildren;\n });\n\n protected readonly parentWithActiveChild = computed(() => {\n const activeItem = this.selectedMenuItem();\n if (!activeItem) {\n return null;\n }\n\n for (const parent of this.menuParents()) {\n if (this._isChildOf(activeItem.id, parent)) {\n return parent;\n }\n\n const hasNoChildren = !parent.children || parent.children.length === 0;\n if ((parent.menuTemplate || hasNoChildren) && activeItem.id === parent.id) {\n return parent;\n }\n }\n return null;\n });\n\n protected isParentOfActiveItem(item: ZMenuItem): boolean {\n const activeItem = this.selectedMenuItem();\n if (!activeItem) {\n return false;\n }\n\n if (activeItem.parent && activeItem.parent.length > 0) {\n return activeItem.parent.includes(item.id);\n }\n\n return false;\n }\n\n protected readonly avatarSrc = computed(() => this.zUser()?.avatar || this.zLogo());\n\n protected readonly customDrawerParent = computed(() => {\n const parentId = this._templateDrawerParentId();\n if (!parentId) {\n return null;\n }\n return this.menuParents().find((p: ZMenuItem) => p.id === parentId) ?? null;\n });\n\n private readonly _defaultSidebarChildWidth = 230;\n private readonly _defaultMobileDrawerWidth = 280;\n\n protected readonly sidebarChildWidth = computed(() => {\n const parent = this.selectedParent();\n if (parent?.menuTemplate && parent.menuTemplateWidth) {\n return parent.menuTemplateWidth;\n }\n return this._defaultSidebarChildWidth;\n });\n\n protected readonly mobileCustomDrawerWidth = computed(() => {\n const parent = this.customDrawerParent();\n if (parent?.menuTemplateWidth) {\n return parent.menuTemplateWidth;\n }\n return this._defaultMobileDrawerWidth;\n });\n\n constructor() {\n effect(() => {\n const parents = this.menuParents();\n if (parents.length > 0 && !untracked(() => this.selectedParent())) {\n this.selectedParent.set(parents[0]);\n }\n });\n\n effect(() => {\n const currentPath = this._currentPath();\n const processedMenus = this.menuProcessed();\n if (!currentPath || processedMenus.flat.size === 0) {\n return;\n }\n\n const matchingItem = this._findMenuItemByPath(currentPath, processedMenus);\n const currentSelectedId = untracked(() => this.selectedMenuItem()?.id);\n if (matchingItem && matchingItem.id !== currentSelectedId) {\n this.setSelectedMenuItem(matchingItem.id);\n }\n });\n\n effect(() => {\n if (!this.isMobile() && this.mobileMenuOpen()) {\n this.mobileMenuOpen.set(false);\n }\n });\n\n effect(() => {\n const collapsed = this.sidebarCollapsed();\n ZCacheService.set(this.zKey(), collapsed);\n });\n\n setTimeout(() => this._emitControl());\n }\n\n private _emitControl(): void {\n this.zControl.emit({\n openMobileMenu: () => this.openMobileMenu(),\n closeMobileMenu: () => this.closeMobileMenu(),\n toggleMobileMenu: () => this.toggleMobileMenu(),\n setSelectedMenuItem: (id: string) => this.setSelectedMenuItem(id),\n clearActiveItem: () => this.clearActiveItem(),\n toggleSidebar: () => this.toggleSidebar(),\n openMobileTemplateDrawer: (id: string) => this.openMobileTemplateDrawer(id),\n closeMobileTemplateDrawer: () => this.closeMobileTemplateDrawer(),\n sidebarCollapsed: this.sidebarCollapsed.asReadonly(),\n mobileMenuOpen: this.mobileMenuOpen.asReadonly(),\n mobileTemplateDrawerOpen: this.mobileTemplateDrawerOpen.asReadonly(),\n selectedMenuItem: this.selectedMenuItem.asReadonly(),\n selectedParent: this.selectedParent.asReadonly(),\n menuProcessed: this.menuProcessed,\n });\n }\n\n public openMobileMenu(): void {\n this.mobileMenuOpen.set(true);\n }\n\n public closeMobileMenu(): void {\n this.mobileMenuOpen.set(false);\n }\n\n public toggleMobileMenu(): void {\n this.mobileMenuOpen.set(!this.mobileMenuOpen());\n }\n\n public openMobileTemplateDrawer(parentId: string): void {\n this._templateDrawerParentId.set(parentId);\n this.mobileMenuOpen.set(false);\n requestAnimationFrame(() => {\n this.mobileTemplateDrawerOpen.set(true);\n });\n }\n\n public closeMobileTemplateDrawer(): void {\n this.mobileTemplateDrawerOpen.set(false);\n this.mobileMenuOpen.set(true);\n setTimeout(() => {\n this._templateDrawerParentId.set(null);\n }, 300);\n }\n\n public setSelectedMenuItem(menuId: string): void {\n const item = this._findMenuItemById(menuId);\n if (!item) {\n return;\n }\n\n this.selectedMenuItem.set(item);\n\n const parent = this._findParentOfMenuItem(menuId);\n if (!parent) {\n return;\n }\n\n this.selectedParent.set(parent);\n parent.expanded = true;\n\n if (item.parent && item.parent.length > 1) {\n const level2ParentId = item.parent[item.parent.length - 1];\n const level2Parent = this._findMenuItemById(level2ParentId);\n if (level2Parent) {\n level2Parent.expanded = true;\n }\n }\n }\n\n public clearActiveItem(): void {\n this.selectedMenuItem.set(null);\n }\n\n protected selectParent(item: ZMenuItem): void {\n this.selectedParent.set(item);\n const hasNoChildren = !item.children || item.children.length === 0;\n\n if (item.menuTemplate || hasNoChildren) {\n this.selectedMenuItem.set(item);\n }\n\n const processedItem = this.menuProcessed().flat.get(item.id);\n if (processedItem) {\n this.zOnSelect.emit(processedItem);\n }\n }\n\n protected onDesktopParentClick(item: ZMenuItem): void {\n this.selectParent(item);\n const hasChildrenOrTemplate = item.menuTemplate || (item.children && item.children.length > 0);\n\n if (this.sidebarCollapsed() && hasChildrenOrTemplate) {\n this.toggleSidebar();\n }\n }\n\n protected onMenuItemClick(item: ZMenuItem): void {\n if (item.children && item.children.length > 0) {\n item.expanded = !item.expanded;\n return;\n }\n\n this.selectedMenuItem.set(item);\n this._expandParentsOfItem(item);\n\n const processedItem = this.menuProcessed().flat.get(item.id);\n if (processedItem) {\n this.zOnSelect.emit(processedItem);\n }\n\n if (this.isMobile()) {\n this.closeMobileMenu();\n this.mobileTemplateDrawerOpen.set(false);\n }\n }\n\n protected onMobileParentClick(item: ZMenuItem): void {\n if (item.menuTemplate) {\n this.selectParent(item);\n this.openMobileTemplateDrawer(item.id);\n return;\n }\n\n const hasNoChildren = !item.children || item.children.length === 0;\n if (hasNoChildren) {\n this.selectParent(item);\n this.closeMobileMenu();\n return;\n }\n\n if (this.selectedParent()?.id === item.id) {\n item.expanded = !item.expanded;\n this.selectedParent.set({ ...item });\n return;\n }\n\n this.selectParent(item);\n item.expanded = true;\n }\n\n protected toggleSidebar(): void {\n if (!this.selectedParent()?.children?.length) {\n return;\n }\n\n this.sidebarCollapsed.set(!this.sidebarCollapsed());\n }\n\n protected closeSidebar(): void {\n this.sidebarCollapsed.set(true);\n }\n\n protected onUserActionClick(action: ZMenuUserAction): void {\n if (action.disabled) {\n return;\n }\n this.zOnMenuAction.emit(action);\n }\n\n protected getVisibleUserActions(): ZMenuUserAction[] {\n return this.zUserActions().filter(action => !action.hidden);\n }\n\n protected shouldShowDividerBefore(action: ZMenuUserAction, index: number): boolean {\n return action.divide === 'before' && index > 0;\n }\n\n protected shouldShowDividerAfter(action: ZMenuUserAction, index: number): boolean {\n return action.divide === 'after' && index < this.getVisibleUserActions().length - 1;\n }\n\n protected onBackdropClick(): void {\n if (this.mobileTemplateDrawerOpen()) {\n this.mobileTemplateDrawerOpen.set(false);\n this._templateDrawerParentId.set(null);\n }\n this.closeMobileMenu();\n }\n\n private _findMenuItemById(id: string): ZMenuItem | null {\n return this.menuProcessed().flat.get(id) ?? null;\n }\n\n private _findParentOfMenuItem(id: string): ZMenuItem | null {\n const item = this.menuProcessed().flat.get(id);\n if (!item?.parent?.length) {\n return null;\n }\n\n const parentId = item.parent[item.parent.length - 1];\n return this.menuProcessed().flat.get(parentId) ?? null;\n }\n\n private _isChildOf(childId: string, parent: ZMenuItem): boolean {\n const child = this.menuProcessed().flat.get(childId);\n if (!child?.parent?.length) {\n return false;\n }\n\n return child.parent.includes(parent.id);\n }\n\n private _expandParentsOfItem(item: ZMenuItem): void {\n if (!item.parent || item.parent.length === 0) {\n return;\n }\n\n for (const parentId of item.parent) {\n const parentItem = this.menuProcessed().flat.get(parentId);\n if (parentItem) {\n parentItem.expanded = true;\n }\n }\n }\n\n private _processMenus(menus: ZMenuItem[]): ZMenuProcessed {\n const flat = new Map<string, ZMenuItem>();\n const processItem = (item: ZMenuItem, parentIds: string[], level: number): ZMenuItem => {\n item.parent = [...parentIds];\n item.level = level;\n flat.set(item.id, item);\n\n if (item.children && item.children.length > 0) {\n const newParentIds = [...parentIds, item.id];\n item.children = item.children.map(child => processItem(child, newParentIds, level + 1));\n }\n\n return item;\n };\n\n const tree = menus.map(item => processItem(item, [], 0));\n return { tree, flat };\n }\n\n private _findMenuItemByPath(path: string, processed: ZMenuProcessed): ZMenuItem | null {\n const normalizedPath = path.split('?')[0].replace(/\\/$/, '') || '/';\n for (const item of processed.flat.values()) {\n const itemPath = item.path?.replace(/\\/$/, '') || '';\n if (itemPath === normalizedPath) {\n return item;\n }\n }\n\n for (const item of processed.flat.values()) {\n if (item.subPaths && item.subPaths.length > 0) {\n for (const subPath of item.subPaths) {\n const normalizedSubPath = subPath.replace(/\\/$/, '');\n if (normalizedPath.startsWith(normalizedSubPath)) {\n return item;\n }\n }\n }\n }\n\n for (const item of processed.flat.values()) {\n const itemPath = item.path?.replace(/\\/$/, '') || '';\n if (itemPath && normalizedPath.startsWith(itemPath + '/')) {\n return item;\n }\n }\n\n return null;\n }\n\n private _getStateMenuCollapsed(): boolean {\n return ZCacheService.get<boolean>(this.zKey(), false) ?? false;\n }\n}\n","<!-- DESKTOP LAYOUT - Hidden on mobile -->\n<div class=\"z-menu-desktop relative z-200 hidden h-full py-1 pl-1 md:block\" [class.collapsed]=\"sidebarCollapsed()\">\n <main class=\"z-menu-main relative flex h-full\">\n <div class=\"z-sidebar-main h-full w-[50px]\">\n <div\n class=\"z-shadow-menu bg-sidebar border-border/40 dark:border-sidebar-border relative flex h-full w-full flex-col items-center gap-1.5 rounded-[6px] border\"></div>\n\n <div class=\"bg-sidebar text-sidebar-foreground absolute inset-px z-20 flex flex-col rounded-[6px]\">\n @if (zLogo()) {\n <div class=\"border-sidebar-border flex h-[52px] items-center justify-center border-b px-2\">\n <img [src]=\"zLogo()\" alt=\"Logo\" class=\"h-8 w-auto object-contain\" />\n </div>\n }\n\n <!-- Expand Button - Only show when collapsed -->\n @if (sidebarCollapsed() && selectedParent()) {\n <div\n class=\"z-expand-btn hover:bg-sidebar-accent mx-auto mt-2 flex h-9 w-9 cursor-pointer items-center justify-center rounded-[6px]\"\n (click)=\"toggleSidebar()\">\n <z-icon zType=\"lucideChevronsRight\" zSize=\"20\" class=\"opacity-70\" />\n </div>\n }\n\n <div class=\"flex flex-1 flex-col items-center gap-2 p-2\">\n @for (item of menuParents(); track item.id) {\n @let hasActiveChild = parentWithActiveChild()?.id === item.id;\n @let isCurrentlySelected = selectedParent()?.id === item.id;\n @let showActiveIndicator = hasActiveChild && !isCurrentlySelected;\n <div\n zTooltip\n [zContent]=\"item.name | translate\"\n zPosition=\"right\"\n [zArrow]=\"false\"\n [zAlwaysShow]=\"true\"\n class=\"relative flex h-9 w-9 cursor-pointer items-center justify-center rounded-[6px] select-none\"\n [class.bg-sidebar-primary]=\"selectedParent()?.id === item.id\"\n [class.text-sidebar-primary-foreground]=\"selectedParent()?.id === item.id\"\n [class.hover:bg-sidebar-accent]=\"selectedParent()?.id !== item.id\"\n (click)=\"onDesktopParentClick(item)\">\n @if (item.icon) {\n <z-icon [zType]=\"item.icon\" zSize=\"20\" />\n } @else {\n <z-icon [zSvg]=\"item.iconSvg || ''\" zSize=\"20\" />\n }\n @if (showActiveIndicator) {\n <div\n class=\"bg-sidebar-primary absolute top-1/2 -left-[5px] h-4 w-1 -translate-y-1/2 rounded-full\"></div>\n }\n </div>\n }\n </div>\n\n <div class=\"border-sidebar-border flex items-center justify-center border-t p-2\">\n <div\n z-popover\n [zOffset]=\"11\"\n [zPopoverContent]=\"userPopoverTpl\"\n zPosition=\"right-bottom\"\n class=\"aspect-square h-9 w-9 shrink-0 cursor-pointer overflow-hidden rounded-full\">\n <img [src]=\"avatarSrc()\" alt=\"User Avatar\" class=\"h-full w-full object-cover\" />\n </div>\n </div>\n </div>\n </div>\n\n <ng-template #userPopoverTpl let-close=\"close\">\n <div class=\"min-w-56 p-1\">\n <!-- User Info Header - Always shown -->\n <div class=\"p-0 text-sm font-normal\">\n <div class=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n <div class=\"h-8 w-8 shrink-0 overflow-hidden rounded-full\">\n <img [src]=\"avatarSrc()\" alt=\"User Avatar\" class=\"aspect-square size-full object-cover\" />\n </div>\n <div class=\"grid flex-1 text-left text-sm leading-tight\">\n <span class=\"truncate font-medium\">{{ zUser()?.name || 'User Name' }}</span>\n <span class=\"text-muted-foreground mt-0.5 truncate text-xs\">\n {{ zUser()?.email || 'user@example.com' }}\n </span>\n </div>\n </div>\n </div>\n\n @if (getVisibleUserActions().length > 0 || zActionsTemplate()) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <!-- Actions - Custom or from zUserActions -->\n @if (zActionsTemplate()) {\n <ng-container *ngTemplateOutlet=\"zActionsTemplate(); context: { close: close }\" />\n } @else if (getVisibleUserActions().length > 0) {\n @for (action of getVisibleUserActions(); track action.id; let idx = $index) {\n @if (shouldShowDividerBefore(action, idx)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n [disabled]=\"action.disabled\"\n [class]=\"action.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 outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onUserActionClick(action); close()\">\n @if (action.icon) {\n <z-icon [zType]=\"action.icon\" zSize=\"14\" class=\"text-muted-foreground\" />\n }\n <span>{{ action.label | translate }}</span>\n </button>\n\n @if (shouldShowDividerAfter(action, idx)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n }\n </div>\n </ng-template>\n\n @if (selectedParent(); as parent) {\n @let hasChildrenOrTemplate = parent.menuTemplate || (parent.children && parent.children.length > 0);\n @if (hasChildrenOrTemplate) {\n <div\n class=\"z-sidebar-child-wrapper\"\n [class.collapsed]=\"sidebarCollapsed()\"\n [style.--sidebar-child-width.px]=\"sidebarChildWidth()\">\n <div\n class=\"z-sidebar-child z-shadow-menu bg-card text-card-foreground border-border/40 dark:border-sidebar-border flex h-full shrink-0 flex-col items-start rounded-[6px] border\"\n [style.width.px]=\"sidebarChildWidth()\"\n [class.collapsed]=\"sidebarCollapsed()\">\n <div class=\"border-border flex h-[52px] w-full shrink-0 items-center border-b px-3\">\n @if (selectedParent()?.icon) {\n <z-icon [zType]=\"selectedParent()!.icon\" zSize=\"20\" class=\"mr-2 shrink-0\" />\n }\n <div\n class=\"mr-4 min-w-0 flex-1 truncate text-base font-semibold\"\n zTooltip\n zPosition=\"top-left\"\n [zContent]=\"selectedParent()?.name || '' | translate\"\n [zArrow]=\"false\">\n {{ selectedParent()?.name | translate }}\n </div>\n\n <z-icon\n zType=\"lucidePanelRightOpen\"\n zSize=\"20\"\n class=\"shrink-0 cursor-pointer opacity-60 hover:opacity-100\"\n (click)=\"toggleSidebar()\" />\n </div>\n\n <!-- Show menuTemplate if available, otherwise show children -->\n @if (selectedParent()?.menuTemplate) {\n <ng-scrollbar class=\"z-menu-scrollbar min-h-0 w-full flex-1\" track=\"vertical\">\n <div class=\"flex w-full flex-col p-3 pr-2\">\n <ng-container\n *ngTemplateOutlet=\"\n selectedParent()!.menuTemplate!;\n context: { $implicit: selectedParent()!, close: closeSidebarFn }\n \" />\n </div>\n </ng-scrollbar>\n } @else {\n <ng-scrollbar class=\"z-menu-scrollbar min-h-0 w-full flex-1\" track=\"vertical\">\n <div class=\"flex w-full flex-col gap-1 py-1 pr-2 pl-2\">\n <ng-container *ngTemplateOutlet=\"menuChildrenTpl; context: { $implicit: menuChildren() }\" />\n </div>\n </ng-scrollbar>\n }\n </div>\n </div>\n }\n }\n </main>\n</div>\n\n<!-- MOBILE LAYOUT - Visible only on mobile -->\n<div class=\"z-menu-mobile-wrapper hidden max-md:block\">\n <!-- Mobile Backdrop -->\n @if (mobileMenuOpen() || mobileTemplateDrawerOpen()) {\n <div\n class=\"z-menu-backdrop fixed inset-0 z-9998\"\n [class.z-menu-backdrop-dark]=\"overlayType() === 'dark'\"\n [class.z-menu-backdrop-blur]=\"overlayType() === 'blur'\"\n (click)=\"onBackdropClick()\"></div>\n }\n\n <!-- Mobile Drawer -->\n <aside\n class=\"z-menu-drawer bg-background border-border fixed top-0 left-0 z-9999 flex h-full w-70 flex-col rounded-r-lg border-r\"\n [class.open]=\"mobileMenuOpen()\">\n <!-- Drawer Header -->\n <div class=\"border-border flex h-14 shrink-0 items-center justify-between border-b px-4\">\n @if (mobileLogo()) {\n <img [src]=\"mobileLogo()\" alt=\"Logo\" class=\"h-8 w-auto object-contain\" />\n }\n <button z-button zType=\"ghost\" [zWave]=\"false\" class=\"bg-accent h-9 w-9 shrink-0\" (click)=\"closeMobileMenu()\">\n <z-icon zType=\"lucideX\" zSize=\"20\" />\n </button>\n </div>\n\n <!-- Drawer Content - Accordion Menu -->\n <ng-scrollbar class=\"z-menu-scrollbar flex-1\" track=\"vertical\">\n <div class=\"p-3\">\n @for (parent of menuParents(); track parent.id) {\n <div class=\"mb-1\">\n <!-- Parent Item -->\n @let isParentActive =\n selectedMenuItem()?.id === parent.id && (!parent.children || parent.children.length === 0);\n @let hasActiveChild = parentWithActiveChild()?.id === parent.id && !isParentActive;\n @let isCurrentlyViewing = selectedParent()?.id === parent.id;\n <div\n class=\"relative flex cursor-pointer items-center gap-3 rounded-[6px] p-2\"\n [class.bg-primary/20]=\"isParentActive\"\n [class.text-primary]=\"isParentActive || hasActiveChild\"\n [class.hover:bg-accent]=\"!isParentActive\"\n (click)=\"onMobileParentClick(parent)\">\n @if (parent.icon) {\n <z-icon [zType]=\"parent.icon\" zSize=\"18\" class=\"shrink-0\" />\n } @else if (parent.iconSvg) {\n <z-icon [zSvg]=\"parent.iconSvg\" zSize=\"18\" class=\"shrink-0\" />\n }\n <span class=\"min-w-0 flex-1 truncate text-[13px] font-[450]\">{{ parent.name | translate }}</span>\n @if ((parent.children && parent.children.length > 0) || parent.menuTemplate) {\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"16\"\n class=\"z-menu-arrow shrink-0 opacity-60 transition-transform\"\n [class.expanded]=\"parent.expanded && isCurrentlyViewing\" />\n }\n </div>\n\n <!-- Children (Accordion) - Only render if NO menuTemplate -->\n @if (parent.children && parent.children.length > 0 && !parent.menuTemplate) {\n <div class=\"z-menu-submenu\" [class.expanded]=\"parent.expanded && isCurrentlyViewing\">\n <div class=\"z-menu-submenu-inner\">\n <div class=\"z-menu-tree relative ml-4 flex flex-col gap-1 pt-1 pl-3\">\n <div class=\"absolute top-0 bottom-2 left-0 w-px bg-gray-300 dark:bg-gray-600\"></div>\n\n @for (child of parent.children; track child.id) {\n @let isChildActive =\n selectedMenuItem()?.id === child.id && (!child.children || child.children.length === 0);\n @let isChildParentOfActive = isParentOfActiveItem(child);\n @let hasChildren = child.children && child.children.length > 0;\n\n <div>\n <div\n class=\"relative flex cursor-pointer items-center gap-2 rounded-[6px] p-2\"\n [class.bg-primary]=\"isChildActive\"\n [class.text-primary-foreground]=\"isChildActive\"\n [class.text-primary]=\"isChildParentOfActive && !isChildActive\"\n [class.hover:bg-accent]=\"!isChildActive\"\n (click)=\"onMenuItemClick(child)\">\n <div class=\"absolute top-1/2 -left-3 h-px w-3 bg-gray-300 dark:bg-gray-600\"></div>\n @if (child.icon) {\n <z-icon [zType]=\"child.icon\" zSize=\"16\" class=\"shrink-0\" />\n } @else if (child.iconSvg) {\n <z-icon [zSvg]=\"child.iconSvg\" zSize=\"16\" class=\"shrink-0\" />\n } @else {\n <div\n class=\"h-1.5 w-1.5 shrink-0 rounded-full\"\n [class.bg-primary-foreground]=\"isChildActive\"\n [class.bg-gray-400]=\"!isChildActive\"></div>\n }\n <span class=\"min-w-0 flex-1 truncate text-[13px] font-[450]\">\n {{ child.name | translate }}\n </span>\n @if (hasChildren) {\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"z-menu-arrow shrink-0 opacity-60 transition-transform\"\n [class.expanded]=\"child.expanded\" />\n }\n </div>\n\n <!-- Level 3 -->\n @if (hasChildren) {\n <div class=\"z-menu-submenu\" [class.expanded]=\"child.expanded\">\n <div class=\"z-menu-submenu-inner\">\n <div class=\"relative ml-4 flex flex-col gap-1 pt-1 pl-3\">\n <div class=\"absolute top-0 bottom-2 left-0 w-px bg-gray-300 dark:bg-gray-600\"></div>\n\n @for (subChild of child.children; track subChild.id) {\n @let isSubChildActive = selectedMenuItem()?.id === subChild.id;\n\n <div class=\"relative\">\n <div class=\"absolute top-1/2 -left-3 h-px w-3 bg-gray-300 dark:bg-gray-600\"></div>\n\n <div\n class=\"flex cursor-pointer items-center gap-2 rounded-[6px] p-2\"\n [class.bg-primary]=\"isSubChildActive\"\n [class.text-primary-foreground]=\"isSubChildActive\"\n [class.hover:bg-accent]=\"!isSubChildActive\"\n (click)=\"onMenuItemClick(subChild)\">\n <div\n class=\"h-1 w-1 shrink-0 rounded-full\"\n [class.bg-primary-foreground]=\"isSubChildActive\"\n [class.bg-gray-400]=\"!isSubChildActive\"></div>\n <span class=\"min-w-0 flex-1 truncate text-[13px] font-[450]\">\n {{ subChild.name | translate }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </ng-scrollbar>\n\n <!-- Drawer Footer - User Info -->\n <div class=\"border-border shrink-0 border-t p-3\">\n <div\n z-popover\n [zOffset]=\"8\"\n [zPopoverContent]=\"mobileActionsPopoverTpl\"\n zPosition=\"top-right\"\n zTrigger=\"click\"\n class=\"hover:bg-accent flex cursor-pointer items-center gap-3 rounded-[6px] p-2\">\n <div class=\"h-10 w-10 shrink-0 overflow-hidden rounded-full\">\n <img [src]=\"avatarSrc()\" alt=\"User Avatar\" class=\"h-full w-full object-cover\" />\n </div>\n <div class=\"min-w-0 flex-1\">\n <div class=\"truncate text-sm font-medium\">{{ zUser()?.name || 'User Name' }}</div>\n <div class=\"text-muted-foreground truncate text-xs\">{{ zUser()?.email || 'user@example.com' }}</div>\n </div>\n <div class=\"text-muted-foreground flex shrink-0 flex-col\">\n <z-icon zType=\"lucideChevronUp\" zSize=\"14\" />\n <z-icon zType=\"lucideChevronDown\" zSize=\"14\" class=\"-mt-1\" />\n </div>\n </div>\n </div>\n </aside>\n\n <!-- Mobile Custom Template Drawer -->\n <aside\n class=\"z-menu-custom-drawer bg-background border-border fixed top-0 left-0 z-9999 flex h-full max-w-[calc(100vw-16px)] flex-col rounded-r-lg border-r\"\n [style.width.px]=\"mobileCustomDrawerWidth()\"\n [class.open]=\"mobileTemplateDrawerOpen() && customDrawerParent()?.menuTemplate\">\n @if (customDrawerParent()?.menuTemplate) {\n <!-- Custom Drawer Header -->\n <div class=\"border-border flex h-14 shrink-0 items-center gap-3 border-b px-4\">\n <button\n z-button\n zType=\"ghost\"\n [zWave]=\"false\"\n class=\"bg-accent h-9 w-9 shrink-0\"\n (click)=\"closeMobileTemplateDrawer()\">\n <z-icon zType=\"lucideChevronLeft\" zSize=\"20\" />\n </button>\n <span class=\"min-w-0 flex-1 truncate text-base font-semibold\">\n {{ customDrawerParent()?.name | translate }}\n </span>\n </div>\n\n <!-- Custom Template Content -->\n <ng-scrollbar class=\"z-menu-scrollbar flex-1\" track=\"vertical\">\n <div class=\"p-4\">\n <ng-container\n *ngTemplateOutlet=\"\n customDrawerParent()!.menuTemplate!;\n context: { $implicit: customDrawerParent()!, close: closeMobileDrawerFn }\n \" />\n </div>\n </ng-scrollbar>\n }\n </aside>\n\n <ng-template #mobileActionsPopoverTpl let-close=\"close\">\n <div class=\"min-w-48 p-1\">\n @if (zActionsTemplate()) {\n <ng-container *ngTemplateOutlet=\"zActionsTemplate(); context: { close: close }\" />\n } @else if (getVisibleUserActions().length > 0) {\n @for (action of getVisibleUserActions(); track action.id; let idx = $index) {\n @if (shouldShowDividerBefore(action, idx)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n\n <button\n type=\"button\"\n [disabled]=\"action.disabled\"\n [class]=\"action.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 outline-none disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"onUserActionClick(action); close()\">\n @if (action.icon) {\n <z-icon [zType]=\"action.icon\" zSize=\"14\" class=\"text-muted-foreground\" />\n }\n <span>{{ action.label | translate }}</span>\n </button>\n\n @if (shouldShowDividerAfter(action, idx)) {\n <div class=\"bg-border -mx-1 my-1 h-px\"></div>\n }\n }\n }\n </div>\n </ng-template>\n</div>\n\n<!-- Shared Template for Menu Children -->\n<ng-template #menuChildrenTpl let-children>\n @for (child of children; track child.id) {\n @let isChildActive = selectedMenuItem()?.id === child.id && (!child.children || child.children.length === 0);\n @let isChildParentOfActive = isParentOfActiveItem(child);\n @let hasChildren = child.children && child.children.length > 0;\n <div>\n <div\n #divLevel1\n class=\"z-menu-item flex w-full cursor-pointer items-center gap-2 rounded-[6px] p-2\"\n [class.bg-primary]=\"isChildActive\"\n [class.text-primary-foreground]=\"isChildActive\"\n [class.text-primary]=\"isChildParentOfActive && !isChildActive\"\n [class.hover:bg-gray-200]=\"!isChildActive\"\n [class.dark:hover:bg-input/50]=\"!isChildActive\"\n (click)=\"onMenuItemClick(child)\">\n @if (child.icon) {\n <z-icon [zType]=\"child.icon\" zSize=\"18\" class=\"shrink-0\" />\n } @else if (child.iconSvg) {\n <z-icon [zSvg]=\"child.iconSvg\" zSize=\"18\" class=\"shrink-0\" />\n }\n <span\n class=\"min-w-0 flex-1 truncate text-[13px] font-[450]\"\n zTooltip\n [zContent]=\"child.name | translate\"\n [zArrow]=\"false\"\n [zOffset]=\"10\"\n zMaxWidth=\"200px\"\n zPosition=\"right\"\n [zTriggerElement]=\"divLevel1\">\n {{ child.name | translate }}\n </span>\n @if (hasChildren) {\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"z-menu-arrow shrink-0 opacity-60 transition-transform\"\n [class.expanded]=\"child.expanded\" />\n }\n </div>\n\n @if (hasChildren) {\n <div class=\"z-menu-submenu\" [class.expanded]=\"child.expanded\">\n <div class=\"z-menu-submenu-inner\">\n <div class=\"z-menu-tree relative ml-4 flex flex-col gap-1 pt-1 pl-3\">\n <div class=\"absolute top-0 bottom-2 left-0 w-px bg-gray-300 dark:bg-gray-600\"></div>\n\n @for (subChild of child.children; track subChild.id; let isLast = $last) {\n @let isSubChildActive = selectedMenuItem()?.id === subChild.id;\n <div class=\"relative\">\n <div class=\"absolute top-1/2 -left-3 h-px w-3 bg-gray-300 dark:bg-gray-600\"></div>\n\n <div\n #divLevel2\n class=\"z-menu-item flex w-full cursor-pointer items-center gap-2 rounded-[6px] p-2\"\n [class.bg-primary]=\"isSubChildActive\"\n [class.text-primary-foreground]=\"isSubChildActive\"\n [class.hover:bg-gray-200]=\"!isSubChildActive\"\n [class.dark:hover:bg-input/50]=\"!isSubChildActive\"\n (click)=\"onMenuItemClick(subChild)\">\n @if (subChild.icon) {\n <z-icon [zType]=\"subChild.icon\" zSize=\"16\" class=\"shrink-0\" />\n } @else if (subChild.iconSvg) {\n <z-icon [zSvg]=\"subChild.iconSvg\" zSize=\"16\" class=\"shrink-0\" />\n } @else {\n <div\n class=\"h-1 w-1 shrink-0 rounded-full\"\n [class.bg-primary-foreground]=\"isSubChildActive\"\n [class.bg-gray-400]=\"!isSubChildActive\"></div>\n }\n <span\n class=\"min-w-0 flex-1 truncate text-[13px] font-[450]\"\n zTooltip\n [zContent]=\"subChild.name | translate\"\n [zArrow]=\"false\"\n [zOffset]=\"10\"\n zMaxWidth=\"200px\"\n zPosition=\"right\"\n [zTriggerElement]=\"divLevel2\">\n {{ subChild.name | translate }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1056,7 +1056,7 @@ class ZSelectComponent {
|
|
|
1056
1056
|
useExisting: forwardRef(() => ZSelectComponent),
|
|
1057
1057
|
multi: true,
|
|
1058
1058
|
},
|
|
1059
|
-
], queries: [{ propertyName: "customSelectedDirective", first: true, predicate: (ZSelectSelectedDirective), descendants: true, isSignal: true }, { propertyName: "customOptionDirective", first: true, predicate: (ZSelectOptionDirective), descendants: true, isSignal: true }], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true, isSignal: true }, { propertyName: "searchInputRef", first: true, predicate: ["dropdownSearchInput"], descendants: true, isSignal: true }, { propertyName: "dropdownTpl", first: true, predicate: ["dropdownTpl"], descendants: true, isSignal: true }, { propertyName: "optionsContainerRef", first: true, predicate: ["optionsContainer"], descendants: true, isSignal: true }, { propertyName: "virtualScrollRef", first: true, predicate: ["virtualScrollElement"], descendants: true, isSignal: true }, { propertyName: "loadMoreSentinelRef", first: true, predicate: ["loadMoreSentinel"], descendants: true, isSignal: true }], exportAs: ["zSelect"], ngImport: i0, template: "<div class=\"z-select-wrapper relative flex w-full flex-col gap-2\">\n @if (zLabel()) {\n <label [for]=\"selectId\" class=\"text-xs leading-none font-medium\" [class]=\"zLabelClass()\">\n {{ zLabel() }}\n @if (zRequired()) {\n <span class=\"text-destructive! ml-0.5\">*</span>\n }\n </label>\n }\n\n <div\n #triggerEl\n [id]=\"selectId\"\n z-popover\n [zPopoverContent]=\"dropdownTpl\"\n [zOffset]=\"6\"\n [zDisabled]=\"isInteractionDisabled()\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n zClass=\"border-0 shadow-none bg-transparent p-0\"\n (zControl)=\"onPopoverControl($event)\"\n (zShow)=\"onPopoverShow()\"\n (zHideStart)=\"onPopoverHideStart()\"\n (zHide)=\"onPopoverHideEnd()\"\n class=\"z-select-trigger cursor-pointer\"\n [class]=\"selectClasses()\"\n [class.z-select-open]=\"isOpen()\"\n (mousedown)=\"onTriggerMousedown()\"\n (keydown)=\"onTriggerKeydown($event)\"\n tabindex=\"0\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"dropdownId\">\n @if (zPrefix()) {\n <z-icon [zType]=\"zPrefix() || 'lucideChevronDown'\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n\n <div\n class=\"z-select-tags-wrapper flex min-w-0 flex-1 items-center gap-1\"\n [class.flex-wrap]=\"zWrap()\"\n [class.overflow-hidden]=\"!zWrap()\">\n @if (isMultipleMode()) {\n @if (selectedOptions().length === 0) {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n } @else {\n @for (opt of displayedTags(); track opt.value) {\n <span #tagEl [class]=\"opt | zTagClasses: zSize() : isTagsMode()\" class=\"z-select-tag\">\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: opt }\" />\n } @else {\n <span\n class=\"max-w-25 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"6\"\n [zTriggerElement]=\"tagEl\">\n {{ opt.label }}\n </span>\n }\n @if (zAllowClear() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"-mr-0.5 flex size-3.5 items-center justify-center rounded-[3px] transition-colors hover:bg-black/10\"\n (click)=\"removeOption($event, opt)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"10\" />\n </button>\n }\n </span>\n }\n @if (remainingCount() > 0) {\n <span class=\"z-select-remaining text-muted-foreground bg-muted rounded px-1.5 py-0.5 text-xs font-medium\">\n +{{ remainingCount() }}\n </span>\n }\n }\n } @else {\n @if (selectedOption()) {\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: selectedOption() }\" />\n } @else {\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"selectedOption()!.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"10\">\n {{ selectedOption()!.label }}\n </span>\n }\n } @else {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n }\n }\n </div>\n\n @if (zLoading() || zLoadingMore()) {\n <z-icon zType=\"lucideLoaderCircle\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n @if (!zLoading() && zAllowClear() && hasValue() && !isDisabled() && !isReadonly()) {\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-foreground flex shrink-0 items-center justify-center transition-colors\"\n (click)=\"clearAll($event)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n </button>\n }\n\n @if (isValidating()) {\n <z-icon zType=\"lucideLoader2\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n <z-icon\n zType=\"lucideChevronDown\"\n zSize=\"16\"\n class=\"text-muted-foreground shrink-0 transition-transform duration-200\"\n [class.rotate-180]=\"isOpen()\" />\n </div>\n\n @if (showError()) {\n <p class=\"text-destructive animate-in fade-in slide-in-from-top-1 m-0 text-xs duration-200\">\n {{ errorMessage() }}\n </p>\n }\n</div>\n\n<ng-template #dropdownTpl let-close=\"close\">\n <div\n [id]=\"dropdownId\"\n class=\"z-select-dropdown bg-popover border-border rounded-[6px] border shadow-lg\"\n [style.width.px]=\"dropdownWidth()\">\n @if (zShowSearch()) {\n <div class=\"border-border flex items-center border-b px-3\">\n <z-icon zType=\"lucideSearch\" zSize=\"16\" class=\"text-muted-foreground/50 mr-2 shrink-0\" />\n <input\n #dropdownSearchInput\n type=\"text\"\n class=\"placeholder:text-muted-foreground text-foreground flex h-10 w-full bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50\"\n [placeholder]=\"effectivePlaceholderSearch()\"\n [ngModel]=\"searchText()\"\n (ngModelChange)=\"onSearchChange($event)\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\" />\n </div>\n }\n\n @if (zLoading()) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n <z-loading [zLoading]=\"true\" zSize=\"default\" />\n </div>\n } @else {\n @if (shouldUseVirtualScroll()) {\n <div\n #virtualScrollElement\n class=\"z-select-options z-select-virtual-scroll overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.height.px]=\"optionsMaxHeight()\">\n <div class=\"z-select-virtual-inner relative\" [style.height.px]=\"virtualizer.getTotalSize()\">\n @for (virtualItem of virtualizer.getVirtualItems(); track virtualItem.index) {\n @let opt = filteredOptions()[virtualItem.index];\n <div\n #optionEl\n class=\"z-select-option absolute right-0 left-0 min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.height.px]=\"zOptionHeight()\"\n [style.transform]=\"'translateY(' + virtualItem.start + 'px)'\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"optionEl\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n </div>\n @if (zLoadingMore()) {\n <div\n class=\"bg-popover/80 absolute right-0 bottom-0 left-0 flex items-center justify-center py-2\"\n [style.transform]=\"'translateY(' + virtualizer.getTotalSize() + 'px)'\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n </div>\n } @else {\n <div\n #optionsContainer\n class=\"z-select-options flex flex-col gap-0.75 overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.maxHeight.px]=\"optionsMaxHeight()\">\n @for (opt of filteredOptions(); track opt.value) {\n <div\n #optionEl2\n class=\"z-select-option relative min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.minHeight.px]=\"zOptionHeight()\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zArrow]=\"false\"\n [zOffset]=\"5\"\n [zHideDelay]=\"0\"\n [zTriggerElement]=\"optionEl2\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n <div #loadMoreSentinel class=\"h-px w-full shrink-0\"></div>\n </div>\n }\n\n @if (filteredOptions().length === 0) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n @if (isEmptyData()) {\n <z-icon [zType]=\"zEmptyIcon()\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveEmptyText() }}\n </span>\n } @else {\n <z-icon zType=\"lucideSearch\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveNotFoundText() }}\n </span>\n }\n </div>\n }\n\n @if (zLoadingMore()) {\n <div class=\"z-select-loading-more border-border/50 flex items-center justify-center border-t py-1.5\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n }\n\n @if (zShowAction() && isMultipleMode()) {\n <div class=\"border-border flex items-center gap-2 border-t px-2 py-1.5\">\n @if (zActionTemplate()) {\n <ng-container *ngTemplateOutlet=\"zActionTemplate()!\" />\n } @else {\n <z-button zSize=\"xs\" zType=\"ghost-info\" class=\"flex-1\" (click)=\"selectAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideCheckCheck\" zSize=\"14\" />\n {{ effectiveSelectAllText() }}\n </z-button>\n <z-button zSize=\"xs\" zType=\"ghost-error\" class=\"flex-1\" (click)=\"removeAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n {{ effectiveClearAllText() }}\n </z-button>\n }\n </div>\n }\n </div>\n</ng-template>\n", styles: [".z-select-trigger{-webkit-user-select:none;user-select:none}.z-select-trigger:focus{outline:none}.z-select-trigger *{cursor:inherit}.z-select-tag{-webkit-user-select:none;user-select:none;animation:z-select-tag-enter .2s cubic-bezier(.4,0,.2,1);transition:transform .15s ease}.z-select-tag:hover{transform:translateY(-1px)}.z-select-tag:active{transform:scale(.95)}@keyframes z-select-tag-enter{0%{opacity:0;transform:scale(.8) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}.z-select-remaining{animation:z-select-remaining-enter .25s cubic-bezier(.4,0,.2,1)}@keyframes z-select-remaining-enter{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.z-select-dropdown{animation:z-select-dropdown-enter .15s ease-out;contain:layout style;will-change:transform,opacity}@keyframes z-select-dropdown-enter{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.z-select-options{overflow-x:hidden!important}.z-select-virtual-scroll .z-select-virtual-inner{width:100%}.z-select-loading-more{animation:z-select-loading-enter .2s ease-out}@keyframes z-select-loading-enter{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zSize", "zStrokeWidth", "zSvg"] }, { 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: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "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: "component", type: ZLoadingComponent, selector: "z-loading", inputs: ["class", "zSpinner", "zSize", "zColor", "zText", "zOverlay", "zOverlayType", "zFullscreen", "zLoading"] }, { kind: "pipe", type: ZIsSelectedPipe, name: "zIsSelected" }, { kind: "pipe", type: ZOptionClassesPipe, name: "zOptionClasses" }, { kind: "pipe", type: ZTagClassesPipe, name: "zTagClasses" }, { kind: "pipe", type: ZHighlightPipe, name: "zHighlight" }, { kind: "pipe", type: ZSafeHtmlPipe, name: "zSafeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1059
|
+
], queries: [{ propertyName: "customSelectedDirective", first: true, predicate: (ZSelectSelectedDirective), descendants: true, isSignal: true }, { propertyName: "customOptionDirective", first: true, predicate: (ZSelectOptionDirective), descendants: true, isSignal: true }], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true, isSignal: true }, { propertyName: "searchInputRef", first: true, predicate: ["dropdownSearchInput"], descendants: true, isSignal: true }, { propertyName: "dropdownTpl", first: true, predicate: ["dropdownTpl"], descendants: true, isSignal: true }, { propertyName: "optionsContainerRef", first: true, predicate: ["optionsContainer"], descendants: true, isSignal: true }, { propertyName: "virtualScrollRef", first: true, predicate: ["virtualScrollElement"], descendants: true, isSignal: true }, { propertyName: "loadMoreSentinelRef", first: true, predicate: ["loadMoreSentinel"], descendants: true, isSignal: true }], exportAs: ["zSelect"], ngImport: i0, template: "<div class=\"z-select-wrapper relative flex w-full flex-col gap-2\">\n @if (zLabel()) {\n <label [for]=\"selectId\" class=\"text-xs leading-none font-medium\" [class]=\"zLabelClass()\">\n {{ zLabel() }}\n @if (zRequired()) {\n <span class=\"text-destructive! ml-0.5\">*</span>\n }\n </label>\n }\n\n <div\n #triggerEl\n [id]=\"selectId\"\n z-popover\n [zPopoverContent]=\"dropdownTpl\"\n [zOffset]=\"6\"\n [zDisabled]=\"isInteractionDisabled()\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n zClass=\"border-0 shadow-none bg-transparent p-0\"\n (zControl)=\"onPopoverControl($event)\"\n (zShow)=\"onPopoverShow()\"\n (zHideStart)=\"onPopoverHideStart()\"\n (zHide)=\"onPopoverHideEnd()\"\n class=\"z-select-trigger cursor-pointer\"\n [class]=\"selectClasses()\"\n [class.z-select-open]=\"isOpen()\"\n (mousedown)=\"onTriggerMousedown()\"\n (keydown)=\"onTriggerKeydown($event)\"\n tabindex=\"0\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"dropdownId\">\n @if (zPrefix()) {\n <z-icon [zType]=\"zPrefix() || 'lucideChevronDown'\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n\n <div\n class=\"z-select-tags-wrapper flex min-w-0 flex-1 items-center gap-1\"\n [class.flex-wrap]=\"zWrap()\"\n [class.overflow-hidden]=\"!zWrap()\">\n @if (isMultipleMode()) {\n @if (selectedOptions().length === 0) {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n } @else {\n @for (opt of displayedTags(); track opt.value) {\n <span #tagEl [class]=\"opt | zTagClasses: zSize() : isTagsMode()\" class=\"z-select-tag\">\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: opt }\" />\n } @else {\n <span\n class=\"max-w-25 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"6\"\n [zTriggerElement]=\"tagEl\">\n {{ opt.label }}\n </span>\n }\n @if (zAllowClear() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"-mr-0.5 flex size-3.5 items-center justify-center rounded-[3px] transition-colors hover:bg-black/10\"\n (click)=\"removeOption($event, opt)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"10\" />\n </button>\n }\n </span>\n }\n @if (remainingCount() > 0) {\n <span class=\"z-select-remaining text-muted-foreground bg-muted rounded px-1.5 py-0.5 text-xs font-medium\">\n +{{ remainingCount() }}\n </span>\n }\n }\n } @else {\n @if (selectedOption()) {\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: selectedOption() }\" />\n } @else {\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"selectedOption()!.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"10\">\n {{ selectedOption()!.label }}\n </span>\n }\n } @else {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n }\n }\n </div>\n\n @if (zLoading() || zLoadingMore()) {\n <z-icon zType=\"lucideLoaderCircle\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n @if (!zLoading() && zAllowClear() && hasValue() && !isDisabled() && !isReadonly()) {\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-foreground flex shrink-0 items-center justify-center transition-colors\"\n (click)=\"clearAll($event)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n </button>\n }\n\n @if (isValidating()) {\n <z-icon zType=\"lucideLoader2\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n <z-icon\n zType=\"lucideChevronDown\"\n zSize=\"16\"\n class=\"text-muted-foreground shrink-0 transition-transform duration-200\"\n [class.rotate-180]=\"isOpen()\" />\n </div>\n\n @if (showError()) {\n <p class=\"text-destructive animate-in fade-in slide-in-from-top-1 m-0 text-xs duration-200\">\n {{ errorMessage() }}\n </p>\n }\n</div>\n\n<ng-template #dropdownTpl let-close=\"close\">\n <div\n [id]=\"dropdownId\"\n class=\"z-select-dropdown bg-popover border-border rounded-[6px] border shadow-lg\"\n [style.width.px]=\"dropdownWidth()\">\n @if (zShowSearch()) {\n <div class=\"border-border flex items-center border-b px-3\">\n <z-icon zType=\"lucideSearch\" zSize=\"16\" class=\"text-muted-foreground/50 mr-2 shrink-0\" />\n <input\n #dropdownSearchInput\n type=\"text\"\n class=\"placeholder:text-muted-foreground text-foreground flex h-10 w-full bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50\"\n [placeholder]=\"effectivePlaceholderSearch()\"\n [ngModel]=\"searchText()\"\n (ngModelChange)=\"onSearchChange($event)\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\" />\n </div>\n }\n\n @if (zLoading()) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n <z-loading [zLoading]=\"true\" zSize=\"default\" />\n </div>\n } @else {\n @if (shouldUseVirtualScroll()) {\n <div\n #virtualScrollElement\n class=\"z-select-options z-select-virtual-scroll overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.height.px]=\"optionsMaxHeight()\">\n <div class=\"z-select-virtual-inner relative\" [style.height.px]=\"virtualizer.getTotalSize()\">\n @for (virtualItem of virtualizer.getVirtualItems(); track virtualItem.index) {\n @let opt = filteredOptions()[virtualItem.index];\n <div\n #optionEl\n class=\"z-select-option absolute right-0 left-0 min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.height.px]=\"zOptionHeight()\"\n [style.transform]=\"'translateY(' + virtualItem.start + 'px)'\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"optionEl\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n </div>\n @if (zLoadingMore()) {\n <div\n class=\"bg-popover/80 absolute right-0 bottom-0 left-0 flex items-center justify-center py-2\"\n [style.transform]=\"'translateY(' + virtualizer.getTotalSize() + 'px)'\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n </div>\n } @else {\n <div\n #optionsContainer\n class=\"z-select-options flex flex-col gap-0.75 overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.maxHeight.px]=\"optionsMaxHeight()\">\n @for (opt of filteredOptions(); track opt.value) {\n <div\n #optionEl2\n class=\"z-select-option relative min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.minHeight.px]=\"zOptionHeight()\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zArrow]=\"false\"\n [zOffset]=\"5\"\n [zHideDelay]=\"0\"\n [zTriggerElement]=\"optionEl2\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n @if (zEnableLoadMore()) {\n <div #loadMoreSentinel class=\"h-px w-full shrink-0\"></div>\n }\n </div>\n }\n\n @if (filteredOptions().length === 0) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n @if (isEmptyData()) {\n <z-icon [zType]=\"zEmptyIcon()\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveEmptyText() }}\n </span>\n } @else {\n <z-icon zType=\"lucideSearch\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveNotFoundText() }}\n </span>\n }\n </div>\n }\n\n @if (zLoadingMore()) {\n <div class=\"z-select-loading-more border-border/50 flex items-center justify-center border-t py-1.5\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n }\n\n @if (zShowAction() && isMultipleMode()) {\n <div class=\"border-border flex items-center gap-2 border-t px-2 py-1.5\">\n @if (zActionTemplate()) {\n <ng-container *ngTemplateOutlet=\"zActionTemplate()!\" />\n } @else {\n <z-button zSize=\"xs\" zType=\"ghost-info\" class=\"flex-1\" (click)=\"selectAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideCheckCheck\" zSize=\"14\" />\n {{ effectiveSelectAllText() }}\n </z-button>\n <z-button zSize=\"xs\" zType=\"ghost-error\" class=\"flex-1\" (click)=\"removeAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n {{ effectiveClearAllText() }}\n </z-button>\n }\n </div>\n }\n </div>\n</ng-template>\n", styles: [".z-select-trigger{-webkit-user-select:none;user-select:none}.z-select-trigger:focus{outline:none}.z-select-trigger *{cursor:inherit}.z-select-tag{-webkit-user-select:none;user-select:none;animation:z-select-tag-enter .2s cubic-bezier(.4,0,.2,1);transition:transform .15s ease}.z-select-tag:hover{transform:translateY(-1px)}.z-select-tag:active{transform:scale(.95)}@keyframes z-select-tag-enter{0%{opacity:0;transform:scale(.8) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}.z-select-remaining{animation:z-select-remaining-enter .25s cubic-bezier(.4,0,.2,1)}@keyframes z-select-remaining-enter{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.z-select-dropdown{animation:z-select-dropdown-enter .15s ease-out;contain:layout style;will-change:transform,opacity}@keyframes z-select-dropdown-enter{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.z-select-options{overflow-x:hidden!important}.z-select-virtual-scroll .z-select-virtual-inner{width:100%}.z-select-loading-more{animation:z-select-loading-enter .2s ease-out}@keyframes z-select-loading-enter{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zSize", "zStrokeWidth", "zSvg"] }, { 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: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "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: "component", type: ZLoadingComponent, selector: "z-loading", inputs: ["class", "zSpinner", "zSize", "zColor", "zText", "zOverlay", "zOverlayType", "zFullscreen", "zLoading"] }, { kind: "pipe", type: ZIsSelectedPipe, name: "zIsSelected" }, { kind: "pipe", type: ZOptionClassesPipe, name: "zOptionClasses" }, { kind: "pipe", type: ZTagClassesPipe, name: "zTagClasses" }, { kind: "pipe", type: ZHighlightPipe, name: "zHighlight" }, { kind: "pipe", type: ZSafeHtmlPipe, name: "zSafeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1060
1060
|
}
|
|
1061
1061
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ZSelectComponent, decorators: [{
|
|
1062
1062
|
type: Component,
|
|
@@ -1080,7 +1080,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1080
1080
|
useExisting: forwardRef(() => ZSelectComponent),
|
|
1081
1081
|
multi: true,
|
|
1082
1082
|
},
|
|
1083
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, exportAs: 'zSelect', template: "<div class=\"z-select-wrapper relative flex w-full flex-col gap-2\">\n @if (zLabel()) {\n <label [for]=\"selectId\" class=\"text-xs leading-none font-medium\" [class]=\"zLabelClass()\">\n {{ zLabel() }}\n @if (zRequired()) {\n <span class=\"text-destructive! ml-0.5\">*</span>\n }\n </label>\n }\n\n <div\n #triggerEl\n [id]=\"selectId\"\n z-popover\n [zPopoverContent]=\"dropdownTpl\"\n [zOffset]=\"6\"\n [zDisabled]=\"isInteractionDisabled()\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n zClass=\"border-0 shadow-none bg-transparent p-0\"\n (zControl)=\"onPopoverControl($event)\"\n (zShow)=\"onPopoverShow()\"\n (zHideStart)=\"onPopoverHideStart()\"\n (zHide)=\"onPopoverHideEnd()\"\n class=\"z-select-trigger cursor-pointer\"\n [class]=\"selectClasses()\"\n [class.z-select-open]=\"isOpen()\"\n (mousedown)=\"onTriggerMousedown()\"\n (keydown)=\"onTriggerKeydown($event)\"\n tabindex=\"0\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"dropdownId\">\n @if (zPrefix()) {\n <z-icon [zType]=\"zPrefix() || 'lucideChevronDown'\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n\n <div\n class=\"z-select-tags-wrapper flex min-w-0 flex-1 items-center gap-1\"\n [class.flex-wrap]=\"zWrap()\"\n [class.overflow-hidden]=\"!zWrap()\">\n @if (isMultipleMode()) {\n @if (selectedOptions().length === 0) {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n } @else {\n @for (opt of displayedTags(); track opt.value) {\n <span #tagEl [class]=\"opt | zTagClasses: zSize() : isTagsMode()\" class=\"z-select-tag\">\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: opt }\" />\n } @else {\n <span\n class=\"max-w-25 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"6\"\n [zTriggerElement]=\"tagEl\">\n {{ opt.label }}\n </span>\n }\n @if (zAllowClear() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"-mr-0.5 flex size-3.5 items-center justify-center rounded-[3px] transition-colors hover:bg-black/10\"\n (click)=\"removeOption($event, opt)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"10\" />\n </button>\n }\n </span>\n }\n @if (remainingCount() > 0) {\n <span class=\"z-select-remaining text-muted-foreground bg-muted rounded px-1.5 py-0.5 text-xs font-medium\">\n +{{ remainingCount() }}\n </span>\n }\n }\n } @else {\n @if (selectedOption()) {\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: selectedOption() }\" />\n } @else {\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"selectedOption()!.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"10\">\n {{ selectedOption()!.label }}\n </span>\n }\n } @else {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n }\n }\n </div>\n\n @if (zLoading() || zLoadingMore()) {\n <z-icon zType=\"lucideLoaderCircle\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n @if (!zLoading() && zAllowClear() && hasValue() && !isDisabled() && !isReadonly()) {\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-foreground flex shrink-0 items-center justify-center transition-colors\"\n (click)=\"clearAll($event)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n </button>\n }\n\n @if (isValidating()) {\n <z-icon zType=\"lucideLoader2\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n <z-icon\n zType=\"lucideChevronDown\"\n zSize=\"16\"\n class=\"text-muted-foreground shrink-0 transition-transform duration-200\"\n [class.rotate-180]=\"isOpen()\" />\n </div>\n\n @if (showError()) {\n <p class=\"text-destructive animate-in fade-in slide-in-from-top-1 m-0 text-xs duration-200\">\n {{ errorMessage() }}\n </p>\n }\n</div>\n\n<ng-template #dropdownTpl let-close=\"close\">\n <div\n [id]=\"dropdownId\"\n class=\"z-select-dropdown bg-popover border-border rounded-[6px] border shadow-lg\"\n [style.width.px]=\"dropdownWidth()\">\n @if (zShowSearch()) {\n <div class=\"border-border flex items-center border-b px-3\">\n <z-icon zType=\"lucideSearch\" zSize=\"16\" class=\"text-muted-foreground/50 mr-2 shrink-0\" />\n <input\n #dropdownSearchInput\n type=\"text\"\n class=\"placeholder:text-muted-foreground text-foreground flex h-10 w-full bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50\"\n [placeholder]=\"effectivePlaceholderSearch()\"\n [ngModel]=\"searchText()\"\n (ngModelChange)=\"onSearchChange($event)\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\" />\n </div>\n }\n\n @if (zLoading()) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n <z-loading [zLoading]=\"true\" zSize=\"default\" />\n </div>\n } @else {\n @if (shouldUseVirtualScroll()) {\n <div\n #virtualScrollElement\n class=\"z-select-options z-select-virtual-scroll overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.height.px]=\"optionsMaxHeight()\">\n <div class=\"z-select-virtual-inner relative\" [style.height.px]=\"virtualizer.getTotalSize()\">\n @for (virtualItem of virtualizer.getVirtualItems(); track virtualItem.index) {\n @let opt = filteredOptions()[virtualItem.index];\n <div\n #optionEl\n class=\"z-select-option absolute right-0 left-0 min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.height.px]=\"zOptionHeight()\"\n [style.transform]=\"'translateY(' + virtualItem.start + 'px)'\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"optionEl\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n </div>\n @if (zLoadingMore()) {\n <div\n class=\"bg-popover/80 absolute right-0 bottom-0 left-0 flex items-center justify-center py-2\"\n [style.transform]=\"'translateY(' + virtualizer.getTotalSize() + 'px)'\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n </div>\n } @else {\n <div\n #optionsContainer\n class=\"z-select-options flex flex-col gap-0.75 overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.maxHeight.px]=\"optionsMaxHeight()\">\n @for (opt of filteredOptions(); track opt.value) {\n <div\n #optionEl2\n class=\"z-select-option relative min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.minHeight.px]=\"zOptionHeight()\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zArrow]=\"false\"\n [zOffset]=\"5\"\n [zHideDelay]=\"0\"\n [zTriggerElement]=\"optionEl2\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n <div #loadMoreSentinel class=\"h-px w-full shrink-0\"></div>\n </div>\n }\n\n @if (filteredOptions().length === 0) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n @if (isEmptyData()) {\n <z-icon [zType]=\"zEmptyIcon()\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveEmptyText() }}\n </span>\n } @else {\n <z-icon zType=\"lucideSearch\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveNotFoundText() }}\n </span>\n }\n </div>\n }\n\n @if (zLoadingMore()) {\n <div class=\"z-select-loading-more border-border/50 flex items-center justify-center border-t py-1.5\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n }\n\n @if (zShowAction() && isMultipleMode()) {\n <div class=\"border-border flex items-center gap-2 border-t px-2 py-1.5\">\n @if (zActionTemplate()) {\n <ng-container *ngTemplateOutlet=\"zActionTemplate()!\" />\n } @else {\n <z-button zSize=\"xs\" zType=\"ghost-info\" class=\"flex-1\" (click)=\"selectAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideCheckCheck\" zSize=\"14\" />\n {{ effectiveSelectAllText() }}\n </z-button>\n <z-button zSize=\"xs\" zType=\"ghost-error\" class=\"flex-1\" (click)=\"removeAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n {{ effectiveClearAllText() }}\n </z-button>\n }\n </div>\n }\n </div>\n</ng-template>\n", styles: [".z-select-trigger{-webkit-user-select:none;user-select:none}.z-select-trigger:focus{outline:none}.z-select-trigger *{cursor:inherit}.z-select-tag{-webkit-user-select:none;user-select:none;animation:z-select-tag-enter .2s cubic-bezier(.4,0,.2,1);transition:transform .15s ease}.z-select-tag:hover{transform:translateY(-1px)}.z-select-tag:active{transform:scale(.95)}@keyframes z-select-tag-enter{0%{opacity:0;transform:scale(.8) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}.z-select-remaining{animation:z-select-remaining-enter .25s cubic-bezier(.4,0,.2,1)}@keyframes z-select-remaining-enter{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.z-select-dropdown{animation:z-select-dropdown-enter .15s ease-out;contain:layout style;will-change:transform,opacity}@keyframes z-select-dropdown-enter{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.z-select-options{overflow-x:hidden!important}.z-select-virtual-scroll .z-select-virtual-inner{width:100%}.z-select-loading-more{animation:z-select-loading-enter .2s ease-out}@keyframes z-select-loading-enter{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
|
|
1083
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, exportAs: 'zSelect', template: "<div class=\"z-select-wrapper relative flex w-full flex-col gap-2\">\n @if (zLabel()) {\n <label [for]=\"selectId\" class=\"text-xs leading-none font-medium\" [class]=\"zLabelClass()\">\n {{ zLabel() }}\n @if (zRequired()) {\n <span class=\"text-destructive! ml-0.5\">*</span>\n }\n </label>\n }\n\n <div\n #triggerEl\n [id]=\"selectId\"\n z-popover\n [zPopoverContent]=\"dropdownTpl\"\n [zOffset]=\"6\"\n [zDisabled]=\"isInteractionDisabled()\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n zClass=\"border-0 shadow-none bg-transparent p-0\"\n (zControl)=\"onPopoverControl($event)\"\n (zShow)=\"onPopoverShow()\"\n (zHideStart)=\"onPopoverHideStart()\"\n (zHide)=\"onPopoverHideEnd()\"\n class=\"z-select-trigger cursor-pointer\"\n [class]=\"selectClasses()\"\n [class.z-select-open]=\"isOpen()\"\n (mousedown)=\"onTriggerMousedown()\"\n (keydown)=\"onTriggerKeydown($event)\"\n tabindex=\"0\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"dropdownId\">\n @if (zPrefix()) {\n <z-icon [zType]=\"zPrefix() || 'lucideChevronDown'\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n\n <div\n class=\"z-select-tags-wrapper flex min-w-0 flex-1 items-center gap-1\"\n [class.flex-wrap]=\"zWrap()\"\n [class.overflow-hidden]=\"!zWrap()\">\n @if (isMultipleMode()) {\n @if (selectedOptions().length === 0) {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n } @else {\n @for (opt of displayedTags(); track opt.value) {\n <span #tagEl [class]=\"opt | zTagClasses: zSize() : isTagsMode()\" class=\"z-select-tag\">\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: opt }\" />\n } @else {\n <span\n class=\"max-w-25 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"6\"\n [zTriggerElement]=\"tagEl\">\n {{ opt.label }}\n </span>\n }\n @if (zAllowClear() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"-mr-0.5 flex size-3.5 items-center justify-center rounded-[3px] transition-colors hover:bg-black/10\"\n (click)=\"removeOption($event, opt)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"10\" />\n </button>\n }\n </span>\n }\n @if (remainingCount() > 0) {\n <span class=\"z-select-remaining text-muted-foreground bg-muted rounded px-1.5 py-0.5 text-xs font-medium\">\n +{{ remainingCount() }}\n </span>\n }\n }\n } @else {\n @if (selectedOption()) {\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: selectedOption() }\" />\n } @else {\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"selectedOption()!.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"10\">\n {{ selectedOption()!.label }}\n </span>\n }\n } @else {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n }\n }\n </div>\n\n @if (zLoading() || zLoadingMore()) {\n <z-icon zType=\"lucideLoaderCircle\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n @if (!zLoading() && zAllowClear() && hasValue() && !isDisabled() && !isReadonly()) {\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-foreground flex shrink-0 items-center justify-center transition-colors\"\n (click)=\"clearAll($event)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n </button>\n }\n\n @if (isValidating()) {\n <z-icon zType=\"lucideLoader2\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n <z-icon\n zType=\"lucideChevronDown\"\n zSize=\"16\"\n class=\"text-muted-foreground shrink-0 transition-transform duration-200\"\n [class.rotate-180]=\"isOpen()\" />\n </div>\n\n @if (showError()) {\n <p class=\"text-destructive animate-in fade-in slide-in-from-top-1 m-0 text-xs duration-200\">\n {{ errorMessage() }}\n </p>\n }\n</div>\n\n<ng-template #dropdownTpl let-close=\"close\">\n <div\n [id]=\"dropdownId\"\n class=\"z-select-dropdown bg-popover border-border rounded-[6px] border shadow-lg\"\n [style.width.px]=\"dropdownWidth()\">\n @if (zShowSearch()) {\n <div class=\"border-border flex items-center border-b px-3\">\n <z-icon zType=\"lucideSearch\" zSize=\"16\" class=\"text-muted-foreground/50 mr-2 shrink-0\" />\n <input\n #dropdownSearchInput\n type=\"text\"\n class=\"placeholder:text-muted-foreground text-foreground flex h-10 w-full bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50\"\n [placeholder]=\"effectivePlaceholderSearch()\"\n [ngModel]=\"searchText()\"\n (ngModelChange)=\"onSearchChange($event)\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\" />\n </div>\n }\n\n @if (zLoading()) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n <z-loading [zLoading]=\"true\" zSize=\"default\" />\n </div>\n } @else {\n @if (shouldUseVirtualScroll()) {\n <div\n #virtualScrollElement\n class=\"z-select-options z-select-virtual-scroll overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.height.px]=\"optionsMaxHeight()\">\n <div class=\"z-select-virtual-inner relative\" [style.height.px]=\"virtualizer.getTotalSize()\">\n @for (virtualItem of virtualizer.getVirtualItems(); track virtualItem.index) {\n @let opt = filteredOptions()[virtualItem.index];\n <div\n #optionEl\n class=\"z-select-option absolute right-0 left-0 min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.height.px]=\"zOptionHeight()\"\n [style.transform]=\"'translateY(' + virtualItem.start + 'px)'\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"optionEl\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n </div>\n @if (zLoadingMore()) {\n <div\n class=\"bg-popover/80 absolute right-0 bottom-0 left-0 flex items-center justify-center py-2\"\n [style.transform]=\"'translateY(' + virtualizer.getTotalSize() + 'px)'\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n </div>\n } @else {\n <div\n #optionsContainer\n class=\"z-select-options flex flex-col gap-0.75 overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.maxHeight.px]=\"optionsMaxHeight()\">\n @for (opt of filteredOptions(); track opt.value) {\n <div\n #optionEl2\n class=\"z-select-option relative min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.minHeight.px]=\"zOptionHeight()\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zArrow]=\"false\"\n [zOffset]=\"5\"\n [zHideDelay]=\"0\"\n [zTriggerElement]=\"optionEl2\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n @if (zEnableLoadMore()) {\n <div #loadMoreSentinel class=\"h-px w-full shrink-0\"></div>\n }\n </div>\n }\n\n @if (filteredOptions().length === 0) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n @if (isEmptyData()) {\n <z-icon [zType]=\"zEmptyIcon()\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveEmptyText() }}\n </span>\n } @else {\n <z-icon zType=\"lucideSearch\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveNotFoundText() }}\n </span>\n }\n </div>\n }\n\n @if (zLoadingMore()) {\n <div class=\"z-select-loading-more border-border/50 flex items-center justify-center border-t py-1.5\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n }\n\n @if (zShowAction() && isMultipleMode()) {\n <div class=\"border-border flex items-center gap-2 border-t px-2 py-1.5\">\n @if (zActionTemplate()) {\n <ng-container *ngTemplateOutlet=\"zActionTemplate()!\" />\n } @else {\n <z-button zSize=\"xs\" zType=\"ghost-info\" class=\"flex-1\" (click)=\"selectAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideCheckCheck\" zSize=\"14\" />\n {{ effectiveSelectAllText() }}\n </z-button>\n <z-button zSize=\"xs\" zType=\"ghost-error\" class=\"flex-1\" (click)=\"removeAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n {{ effectiveClearAllText() }}\n </z-button>\n }\n </div>\n }\n </div>\n</ng-template>\n", styles: [".z-select-trigger{-webkit-user-select:none;user-select:none}.z-select-trigger:focus{outline:none}.z-select-trigger *{cursor:inherit}.z-select-tag{-webkit-user-select:none;user-select:none;animation:z-select-tag-enter .2s cubic-bezier(.4,0,.2,1);transition:transform .15s ease}.z-select-tag:hover{transform:translateY(-1px)}.z-select-tag:active{transform:scale(.95)}@keyframes z-select-tag-enter{0%{opacity:0;transform:scale(.8) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}.z-select-remaining{animation:z-select-remaining-enter .25s cubic-bezier(.4,0,.2,1)}@keyframes z-select-remaining-enter{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.z-select-dropdown{animation:z-select-dropdown-enter .15s ease-out;contain:layout style;will-change:transform,opacity}@keyframes z-select-dropdown-enter{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.z-select-options{overflow-x:hidden!important}.z-select-virtual-scroll .z-select-virtual-inner{width:100%}.z-select-loading-more{animation:z-select-loading-enter .2s ease-out}@keyframes z-select-loading-enter{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
|
|
1084
1084
|
}], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "zMode", required: false }] }], zSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSize", required: false }] }], zLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLabel", required: false }] }], zLabelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLabelClass", required: false }] }], zPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "zPlaceholder", required: false }] }], zRequired: [{ type: i0.Input, args: [{ isSignal: true, alias: "zRequired", required: false }] }], zDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDisabled", required: false }] }], zReadonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "zReadonly", required: false }] }], zLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLoading", required: false }] }], zPrefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "zPrefix", required: false }] }], zAllowClear: [{ type: i0.Input, args: [{ isSignal: true, alias: "zAllowClear", required: false }] }], zWrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "zWrap", required: false }] }], zShowSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShowSearch", required: false }] }], zPlaceholderSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "zPlaceholderSearch", required: false }] }], zDebounce: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDebounce", required: false }] }], zNotFoundText: [{ type: i0.Input, args: [{ isSignal: true, alias: "zNotFoundText", required: false }] }], zEmptyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "zEmptyText", required: false }] }], zEmptyIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "zEmptyIcon", required: false }] }], zMaxTagCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "zMaxTagCount", required: false }] }], zDropdownMaxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDropdownMaxHeight", required: false }] }], zOptionHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "zOptionHeight", required: false }] }], zVirtualScroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "zVirtualScroll", required: false }] }], zShowAction: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShowAction", required: false }] }], zOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "zOptions", required: false }] }], zTranslateLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "zTranslateLabels", required: false }] }], zKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "zKey", required: false }] }], zSearchServer: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSearchServer", required: false }] }], zLoadingMore: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLoadingMore", required: false }] }], zEnableLoadMore: [{ type: i0.Input, args: [{ isSignal: true, alias: "zEnableLoadMore", required: false }] }], zScrollDistance: [{ type: i0.Input, args: [{ isSignal: true, alias: "zScrollDistance", required: false }] }], zSelectedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSelectedTemplate", required: false }] }], zOptionTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "zOptionTemplate", required: false }] }], zActionTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "zActionTemplate", required: false }] }], customSelectedDirective: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ZSelectSelectedDirective), { isSignal: true }] }], customOptionDirective: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ZSelectOptionDirective), { isSignal: true }] }], zOnSearch: [{ type: i0.Output, args: ["zOnSearch"] }], zOnLoadMore: [{ type: i0.Output, args: ["zOnLoadMore"] }], zControl: [{ type: i0.Output, args: ["zControl"] }], zAsyncValidators: [{ type: i0.Input, args: [{ isSignal: true, alias: "zAsyncValidators", required: false }] }], zAsyncDebounce: [{ type: i0.Input, args: [{ isSignal: true, alias: "zAsyncDebounce", required: false }] }], zAsyncValidateOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "zAsyncValidateOn", required: false }] }], zValidators: [{ type: i0.Input, args: [{ isSignal: true, alias: "zValidators", required: false }] }], triggerRef: [{ type: i0.ViewChild, args: ['triggerEl', { isSignal: true }] }], searchInputRef: [{ type: i0.ViewChild, args: ['dropdownSearchInput', { isSignal: true }] }], dropdownTpl: [{ type: i0.ViewChild, args: ['dropdownTpl', { isSignal: true }] }], optionsContainerRef: [{ type: i0.ViewChild, args: ['optionsContainer', { isSignal: true }] }], virtualScrollRef: [{ type: i0.ViewChild, args: ['virtualScrollElement', { isSignal: true }] }], loadMoreSentinelRef: [{ type: i0.ViewChild, args: ['loadMoreSentinel', { isSignal: true }] }] } });
|
|
1085
1085
|
|
|
1086
1086
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-select.mjs","sources":["../../../../libs/core-ui/components/z-select/directives/z-select-option.directive.ts","../../../../libs/core-ui/components/z-select/directives/z-select-selected.directive.ts","../../../../libs/core-ui/components/z-select/pipes/z-select-is-selected.pipe.ts","../../../../libs/core-ui/components/z-select/z-select.variants.ts","../../../../libs/core-ui/components/z-select/pipes/z-select-option-classes.pipe.ts","../../../../libs/core-ui/components/z-select/z-select.types.ts","../../../../libs/core-ui/components/z-select/z-select.utils.ts","../../../../libs/core-ui/components/z-select/pipes/z-select-tag.pipe.ts","../../../../libs/core-ui/components/z-select/z-select.component.ts","../../../../libs/core-ui/components/z-select/z-select.component.html","../../../../libs/core-ui/components/z-select/shival99-z-ui-components-z-select.ts"],"sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\nimport { ZSelectOptionContext } from '../z-select.types';\n\n@Directive({\n selector: '[z-select-option], [zSelectOption]',\n standalone: true,\n})\nexport class ZSelectOptionDirective<T = unknown> {\n public readonly templateRef = inject(TemplateRef<ZSelectOptionContext<T>>);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { ZSelectSelectedContext } from '../z-select.types';\n\n@Directive({\n selector: '[z-select-selected], [zSelectSelected]',\n standalone: true,\n})\nexport class ZSelectSelectedDirective<T = unknown> {\n public readonly templateRef = inject(TemplateRef<ZSelectSelectedContext<T>>);\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZSelectOption } from '../z-select.types';\n\n@Pipe({\n name: 'zIsSelected',\n standalone: true,\n pure: true,\n})\nexport class ZIsSelectedPipe implements PipeTransform {\n transform<T>(option: ZSelectOption<T>, value: T | T[] | null, isMultipleMode: boolean): boolean {\n if (isMultipleMode) {\n const current = (value as T[]) ?? [];\n return current.includes(option.value);\n }\n\n return value === option.value;\n }\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zSelectVariants = cva(\n [\n 'flex w-full items-center rounded-[6px] border border-input bg-white shadow-xs cursor-pointer',\n 'transition-[border-color,box-shadow,background-color,color,opacity] duration-200',\n 'dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n 'outline-none',\n 'text-sm',\n ],\n {\n variants: {\n zSize: {\n sm: 'min-h-8 px-2 py-1 gap-2 text-sm',\n default: 'min-h-9 px-2 py-1.5 gap-2 text-sm',\n lg: 'min-h-10 px-2 py-2 gap-2.5 text-sm',\n },\n zStatus: {\n default: 'focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]',\n open: 'border-ring ring-ring/50 ring-[3px]',\n error:\n 'border-destructive! ring-destructive/20 ring-[3px] focus-within:border-destructive! focus-within:ring-destructive/30',\n disabled: 'opacity-50 cursor-not-allowed bg-muted! text-muted-foreground',\n readonly: 'cursor-default bg-muted/50 text-muted-foreground',\n },\n },\n defaultVariants: {\n zSize: 'default',\n zStatus: 'default',\n },\n }\n);\n\nexport type ZSelectVariants = VariantProps<typeof zSelectVariants>;\n\nexport const zSelectTagVariants = cva(\n 'inline-flex items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium transition-colors',\n {\n variants: {\n zSize: {\n sm: 'text-[10px] px-1 py-0',\n default: 'text-xs px-1.5 py-0.5',\n lg: 'text-xs px-2 py-1',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\nexport const zSelectOptionVariants = cva(\n 'flex items-center gap-2 px-2 py-1.5 cursor-pointer transition-colors text-sm rounded-[4px] outline-none whitespace-nowrap',\n {\n variants: {\n selected: {\n true: 'bg-primary/15 text-primary',\n false: 'hover:bg-primary/10 hover:text-foreground',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed pointer-events-none',\n false: '',\n },\n },\n defaultVariants: {\n selected: false,\n disabled: false,\n },\n }\n);\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { zSelectOptionVariants } from '../z-select.variants';\n\n@Pipe({\n name: 'zOptionClasses',\n standalone: true,\n pure: true,\n})\nexport class ZOptionClassesPipe implements PipeTransform {\n transform(isSelected: boolean, isDisabled?: boolean): string {\n return zSelectOptionVariants({\n selected: isSelected,\n disabled: isDisabled ?? false,\n });\n }\n}\n","import type { Signal, TemplateRef } from '@angular/core';\nimport type { Observable } from 'rxjs';\n\nexport interface ZSelectControl<T = unknown> {\n validate: () => void;\n reset: () => void;\n focus: () => void;\n blur: () => void;\n markAsTouched: () => void;\n markAsUntouched: () => void;\n markAsDirty: () => void;\n markAsPristine: () => void;\n hasError: Signal<boolean>;\n isValidating: Signal<boolean>;\n isOpen: Signal<boolean>;\n value: Signal<T | T[] | null>;\n selectedOption: Signal<ZSelectOption<T> | null>;\n selectedOptions: Signal<ZSelectOption<T>[]>;\n errorMessage: Signal<string>;\n}\n\nexport type ZSelectMode = 'single' | 'multiple' | 'tags';\nexport type ZSelectSize = 'sm' | 'default' | 'lg';\nexport type ZSelectAsyncValidateOn = 'change' | 'blur';\n\nexport interface ZSelectOption<T = unknown> {\n label: string;\n value: T;\n disabled?: boolean;\n group?: string;\n icon?: string;\n}\n\nexport interface ZSelectSelectedContext<T = unknown> {\n $implicit: ZSelectOption<T>;\n}\n\nexport interface ZSelectOptionContext<T = unknown> {\n $implicit: ZSelectOption<T>;\n selected: boolean;\n}\n\nexport interface ZSelectAsyncValidator<T = unknown> {\n error: string;\n message: string;\n validate: (value: ZSelectOption<T> | ZSelectOption<T>[] | null) => Promise<boolean> | Observable<boolean>;\n}\n\nexport interface ZSelectValidator<T = unknown> {\n error: string;\n message: string;\n validate: (value: ZSelectOption<T> | ZSelectOption<T>[] | null) => boolean;\n}\n\nexport interface ZSelectOptionGroup<T = unknown> {\n label: string;\n options: ZSelectOption<T>[];\n}\n\nexport interface ZSelectLoadMoreEvent {\n currentCount: number;\n scrollTop: number;\n}\n\nexport type ZSelectLabelTemplate<T = unknown> = TemplateRef<{ $implicit: ZSelectOption<T> }>;\nexport type ZSelectOptionTemplate<T = unknown> = TemplateRef<{ $implicit: ZSelectOption<T>; selected: boolean }>;\n\nexport interface ZSelectTagColor {\n bg: string;\n text: string;\n border: string;\n}\n\nexport const TAG_COLORS: ZSelectTagColor[] = [\n {\n bg: 'bg-blue-100 dark:bg-blue-950',\n text: 'text-blue-700 dark:text-blue-300',\n border: 'border-blue-300 dark:border-blue-800',\n },\n {\n bg: 'bg-green-100 dark:bg-green-950',\n text: 'text-green-700 dark:text-green-300',\n border: 'border-green-300 dark:border-green-800',\n },\n {\n bg: 'bg-purple-100 dark:bg-purple-950',\n text: 'text-purple-700 dark:text-purple-300',\n border: 'border-purple-300 dark:border-purple-800',\n },\n {\n bg: 'bg-orange-100 dark:bg-orange-950',\n text: 'text-orange-700 dark:text-orange-300',\n border: 'border-orange-300 dark:border-orange-800',\n },\n {\n bg: 'bg-pink-100 dark:bg-pink-950',\n text: 'text-pink-700 dark:text-pink-300',\n border: 'border-pink-300 dark:border-pink-800',\n },\n {\n bg: 'bg-cyan-100 dark:bg-cyan-950',\n text: 'text-cyan-700 dark:text-cyan-300',\n border: 'border-cyan-300 dark:border-cyan-800',\n },\n {\n bg: 'bg-yellow-100 dark:bg-yellow-950',\n text: 'text-yellow-700 dark:text-yellow-300',\n border: 'border-yellow-300 dark:border-yellow-800',\n },\n {\n bg: 'bg-red-100 dark:bg-red-950',\n text: 'text-red-700 dark:text-red-300',\n border: 'border-red-300 dark:border-red-800',\n },\n {\n bg: 'bg-indigo-100 dark:bg-indigo-950',\n text: 'text-indigo-700 dark:text-indigo-300',\n border: 'border-indigo-300 dark:border-indigo-800',\n },\n {\n bg: 'bg-teal-100 dark:bg-teal-950',\n text: 'text-teal-700 dark:text-teal-300',\n border: 'border-teal-300 dark:border-teal-800',\n },\n];\n","import { zRemoveVietnamese } from '@shival99/z-ui/utils';\nimport { TAG_COLORS, type ZSelectTagColor } from './z-select.types';\n\nconst colorCache = new Map<string, ZSelectTagColor>();\n\nexport function getTagColor(value: unknown): ZSelectTagColor {\n const key = String(value);\n const cached = colorCache.get(key);\n if (cached) {\n return cached;\n }\n\n let hash = 0;\n for (let i = 0; i < key.length; i++) {\n hash = (hash << 5) - hash + key.charCodeAt(i);\n hash = hash & hash;\n }\n\n const index = Math.abs(hash) % TAG_COLORS.length;\n const color = TAG_COLORS[index];\n colorCache.set(key, color);\n return color;\n}\n\nexport function filterOptions<T>(\n options: { label: string; value: T; disabled?: boolean }[],\n searchText: string\n): { label: string; value: T; disabled?: boolean }[] {\n const query = searchText.trim();\n if (!query) {\n return options;\n }\n\n const normalizedQuery = zRemoveVietnamese(query.toLowerCase());\n return options.filter(opt => {\n const normalizedLabel = zRemoveVietnamese(opt.label.toLowerCase());\n return normalizedLabel.includes(normalizedQuery);\n });\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ZSelectOption, ZSelectSize } from '../z-select.types';\nimport { getTagColor } from '../z-select.utils';\nimport { zSelectTagVariants } from '../z-select.variants';\n\n@Pipe({\n name: 'zTagClasses',\n standalone: true,\n pure: true,\n})\nexport class ZTagClassesPipe implements PipeTransform {\n transform<T>(option: ZSelectOption<T>, size: ZSelectSize, isTagsMode: boolean): string {\n const baseClasses = zSelectTagVariants({ zSize: size });\n\n if (isTagsMode) {\n const color = getTagColor(option.value);\n return zMergeClasses(baseClasses, color.bg, color.text, color.border);\n }\n\n return zMergeClasses(baseClasses, 'bg-muted text-foreground border-border');\n }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n type OnInit,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n type AbstractControl,\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n NgControl,\n PristineChangeEvent,\n TouchedChangeEvent,\n} from '@angular/forms';\nimport { injectVirtualizer } from '@shival99/angular-virtual';\nimport { ZButtonComponent } 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 { ZLoadingComponent } from '@shival99/z-ui/components/z-loading';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport type { ZPopoverControl } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZHighlightPipe, ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport { ZTranslateService } from '@shival99/z-ui/services';\nimport { zGenerateId, zMergeClasses, zTransform } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { catchError, debounceTime, filter, firstValueFrom, isObservable, merge, of, Subject, takeUntil } from 'rxjs';\nimport { ZSelectOptionDirective } from './directives/z-select-option.directive';\nimport { ZSelectSelectedDirective } from './directives/z-select-selected.directive';\nimport { ZIsSelectedPipe } from './pipes/z-select-is-selected.pipe';\nimport { ZOptionClassesPipe } from './pipes/z-select-option-classes.pipe';\nimport { ZTagClassesPipe } from './pipes/z-select-tag.pipe';\nimport type {\n ZSelectAsyncValidateOn,\n ZSelectAsyncValidator,\n ZSelectControl,\n ZSelectLabelTemplate,\n ZSelectLoadMoreEvent,\n ZSelectMode,\n ZSelectOption,\n ZSelectOptionTemplate,\n ZSelectSize,\n ZSelectValidator,\n} from './z-select.types';\nimport { filterOptions } from './z-select.utils';\nimport { zSelectVariants } from './z-select.variants';\n\n@Component({\n selector: 'z-select',\n imports: [\n FormsModule,\n NgClass,\n ZIconComponent,\n ZPopoverDirective,\n NgTemplateOutlet,\n ZButtonComponent,\n ZTooltipDirective,\n ZIsSelectedPipe,\n ZOptionClassesPipe,\n ZTagClassesPipe,\n ZLoadingComponent,\n ZHighlightPipe,\n ZSafeHtmlPipe,\n ],\n standalone: true,\n templateUrl: './z-select.component.html',\n styleUrl: './z-select.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ZSelectComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'zSelect',\n})\nexport class ZSelectComponent<T = unknown> implements OnInit, ControlValueAccessor {\n public readonly class = input<ClassValue>('');\n public readonly zMode = input<ZSelectMode>('single');\n public readonly zSize = input<ZSelectSize>('default');\n public readonly zLabel = input<string>('');\n public readonly zLabelClass = input<string>('');\n public readonly zPlaceholder = input<string>('');\n public readonly zRequired = input(false, { transform: zTransform });\n public readonly zDisabled = input(false, { transform: zTransform });\n public readonly zReadonly = input(false, { transform: zTransform });\n public readonly zLoading = input(false, { transform: zTransform });\n public readonly zPrefix = input<ZIcon | ''>('');\n public readonly zAllowClear = input(false, { transform: zTransform });\n public readonly zWrap = input(true, { transform: zTransform });\n public readonly zShowSearch = input(true, { transform: zTransform });\n public readonly zPlaceholderSearch = input<string>('');\n public readonly zDebounce = input<number>(300);\n public readonly zNotFoundText = input<string>('');\n public readonly zEmptyText = input<string>('');\n public readonly zEmptyIcon = input<ZIcon>('lucideInbox');\n public readonly zMaxTagCount = input<number>(3);\n public readonly zDropdownMaxHeight = input<number>(256);\n public readonly zOptionHeight = input<number>(32);\n public readonly zVirtualScroll = input(false, { transform: zTransform });\n public readonly zShowAction = input(false, { transform: zTransform });\n public readonly zOptions = input<ZSelectOption<T>[]>([]);\n public readonly zTranslateLabels = input(true, { transform: zTransform });\n public readonly zKey = input<string>('');\n public readonly zSearchServer = input(false, { transform: zTransform });\n public readonly zLoadingMore = input(false, { transform: zTransform });\n public readonly zEnableLoadMore = input(false, { transform: zTransform });\n public readonly zScrollDistance = input<number>(2);\n\n public readonly zSelectedTemplate = input<ZSelectLabelTemplate<T> | null>(null);\n public readonly zOptionTemplate = input<ZSelectOptionTemplate<T> | null>(null);\n public readonly zActionTemplate = input<TemplateRef<unknown> | null>(null);\n\n protected readonly customSelectedDirective = contentChild(ZSelectSelectedDirective<T>);\n protected readonly customOptionDirective = contentChild(ZSelectOptionDirective<T>);\n\n public readonly zOnSearch = output<string>();\n public readonly zOnLoadMore = output<ZSelectLoadMoreEvent>();\n public readonly zControl = output<ZSelectControl<T>>();\n\n public readonly zAsyncValidators = input<ZSelectAsyncValidator<T>[]>([]);\n public readonly zAsyncDebounce = input<number>(300);\n public readonly zAsyncValidateOn = input<ZSelectAsyncValidateOn>('change');\n public readonly zValidators = input<ZSelectValidator<T>[]>([]);\n\n protected readonly triggerRef = viewChild<ElementRef<HTMLDivElement>>('triggerEl');\n protected readonly searchInputRef = viewChild<ElementRef<HTMLInputElement>>('dropdownSearchInput');\n protected readonly dropdownTpl = viewChild<TemplateRef<unknown>>('dropdownTpl');\n protected readonly optionsContainerRef = viewChild<ElementRef<HTMLDivElement>>('optionsContainer');\n protected readonly virtualScrollRef = viewChild<ElementRef<HTMLDivElement>>('virtualScrollElement');\n protected readonly loadMoreSentinelRef = viewChild<ElementRef<HTMLDivElement>>('loadMoreSentinel');\n\n protected readonly selectId = zGenerateId('z-select');\n protected readonly dropdownId = `${this.selectId}-dropdown`;\n protected readonly isOpen = signal(false);\n protected readonly searchText = signal('');\n protected readonly dropdownWidth = signal(0);\n protected readonly hasScrollShadow = signal(false);\n private readonly _popoverControl = signal<ZPopoverControl | null>(null);\n private readonly _searchSubject = new Subject<string>();\n private _loadMoreObserver: IntersectionObserver | null = null;\n private readonly _allKnownOptions = signal<ZSelectOption<T>[]>([]);\n private _virtualScrollListener: (() => void) | null = null;\n\n private readonly _optionGap = 3;\n\n protected readonly virtualizer = injectVirtualizer(() => ({\n scrollElement: this.virtualScrollRef(),\n count: this.filteredOptions().length,\n estimateSize: () => this.zOptionHeight() + this._optionGap,\n overscan: 5,\n }));\n\n private readonly _value = signal<T | T[] | null>(null);\n protected readonly currentValue = this._value.asReadonly();\n private readonly _disabled = signal(false);\n private readonly _touched = signal(false);\n private readonly _dirty = signal(false);\n private readonly _formControl = signal<AbstractControl | null>(null);\n private readonly _formStateVersion = signal(0);\n private readonly _injector = inject(Injector);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _zTranslate = inject(ZTranslateService);\n\n private _onChange: (value: T | T[] | null) => void = () => void 0;\n private _onTouched: () => void = () => void 0;\n private _ngControl: NgControl | null = null;\n\n protected readonly isValidating = signal(false);\n private readonly _asyncErrors = signal<Map<string, string>>(new Map());\n private readonly _asyncCancelSubject = new Subject<void>();\n private readonly _asyncValidationSubject = new Subject<ZSelectOption<T> | ZSelectOption<T>[] | null>();\n private _asyncValidationAbortController: AbortController | null = null;\n\n protected readonly isDisabled = computed(() => this._disabled() || this.zDisabled());\n protected readonly isReadonly = computed(() => this.zReadonly());\n protected readonly isInteractionDisabled = computed(() => this.isDisabled() || this.isReadonly() || this.zLoading());\n\n protected readonly effectivePlaceholder = computed(() => {\n this._zTranslate.currentLang();\n return this.zPlaceholder() || this._zTranslate.instant('i18n_z_ui_select_placeholder');\n });\n\n protected readonly effectivePlaceholderSearch = computed(() => {\n this._zTranslate.currentLang();\n return this.zPlaceholderSearch() || this._zTranslate.instant('i18n_z_ui_select_search');\n });\n\n protected readonly effectiveNotFoundText = computed(() => {\n this._zTranslate.currentLang();\n return this.zNotFoundText() || this._zTranslate.instant('i18n_z_ui_select_no_results');\n });\n\n protected readonly effectiveEmptyText = computed(() => {\n this._zTranslate.currentLang();\n return this.zEmptyText() || this._zTranslate.instant('i18n_z_ui_select_no_options');\n });\n\n protected readonly effectiveSelectAllText = computed(() => {\n this._zTranslate.currentLang();\n return this._zTranslate.instant('i18n_z_ui_select_select_all');\n });\n\n protected readonly effectiveClearAllText = computed(() => {\n this._zTranslate.currentLang();\n return this._zTranslate.instant('i18n_z_ui_select_clear_all');\n });\n\n protected readonly effectiveRequiredErrorText = computed(() => {\n this._zTranslate.currentLang();\n return this._zTranslate.instant('i18n_z_ui_select_required');\n });\n\n protected readonly translatedOptions = computed<ZSelectOption<T>[]>(() => {\n this._zTranslate.currentLang();\n const options = this.zOptions();\n if (!this.zTranslateLabels()) {\n return options;\n }\n return options.map(opt => ({\n ...opt,\n label: this._zTranslate.instant(opt.label),\n }));\n });\n\n protected readonly isMultipleMode = computed(() => {\n const mode = this.zMode();\n return mode === 'multiple' || mode === 'tags';\n });\n\n protected readonly isTagsMode = computed(() => this.zMode() === 'tags');\n\n protected readonly effectiveSelectedTemplate = computed(() => {\n const directive = this.customSelectedDirective();\n if (directive) {\n return directive.templateRef;\n }\n return this.zSelectedTemplate();\n });\n\n protected readonly effectiveOptionTemplate = computed(() => {\n const directive = this.customOptionDirective();\n if (directive) {\n return directive.templateRef;\n }\n return this.zOptionTemplate();\n });\n\n protected readonly shouldUseVirtualScroll = computed(() => {\n if (this.zVirtualScroll()) {\n return true;\n }\n\n if (this.zEnableLoadMore()) {\n return false;\n }\n\n return this.zOptions().length > 50;\n });\n\n protected readonly selectedOption = computed<ZSelectOption<T> | null>(() => {\n this._zTranslate.currentLang();\n if (this.isMultipleMode()) {\n return null;\n }\n\n const value = this._value();\n if (value === null || value === undefined) {\n return null;\n }\n\n const options = this.zSearchServer() ? this._allKnownOptions() : this.translatedOptions();\n return options.find(opt => opt.value === value) ?? null;\n });\n\n protected readonly selectedOptions = computed<ZSelectOption<T>[]>(() => {\n this._zTranslate.currentLang();\n if (!this.isMultipleMode()) {\n return [];\n }\n\n const value = this._value();\n if (!Array.isArray(value)) {\n return [];\n }\n\n const options = this.zSearchServer() ? this._allKnownOptions() : this.translatedOptions();\n return value\n .map(v => options.find(opt => opt.value === v))\n .filter((opt): opt is ZSelectOption<T> => opt !== undefined);\n });\n\n protected readonly displayedTags = computed(() => {\n const selected = this.selectedOptions();\n const max = this.zMaxTagCount();\n return selected.slice(0, max);\n });\n\n protected readonly remainingCount = computed(() => {\n const selected = this.selectedOptions();\n const max = this.zMaxTagCount();\n return Math.max(0, selected.length - max);\n });\n\n protected readonly hasValue = computed(() => {\n const value = this._value();\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n\n return value !== null && value !== undefined;\n });\n\n protected readonly filteredOptions = computed(() => {\n if (this.zSearchServer()) {\n return this.translatedOptions();\n }\n\n return filterOptions(this.translatedOptions(), this.searchText());\n });\n\n protected readonly isEmptyData = computed(() => {\n if (this.zSearchServer() && this.searchText().trim()) {\n return false;\n }\n\n return this.translatedOptions().length === 0;\n });\n\n protected readonly isNoSearchResults = computed(() => {\n if (this.zSearchServer() && this.searchText().trim()) {\n return this.translatedOptions().length === 0;\n }\n const noFiltered = this.filteredOptions().length === 0;\n const hasOptions = this.translatedOptions().length > 0;\n const hasSearch = this.searchText().trim() !== '';\n return noFiltered && hasOptions && hasSearch;\n });\n\n protected readonly optionsMaxHeight = computed(() => {\n const total = this.zDropdownMaxHeight();\n const searchHeight = this.zShowSearch() ? 44 : 0;\n const actionHeight = this.zShowAction() && this.isMultipleMode() ? 40 : 0;\n return total - searchHeight - actionHeight;\n });\n\n protected readonly currentStatus = computed(() => {\n if (this.isDisabled()) {\n return 'disabled';\n }\n\n if (this.isReadonly()) {\n return 'readonly';\n }\n\n if (this.isOpen()) {\n return 'open';\n }\n\n if (this.hasError()) {\n return 'error';\n }\n\n return 'default';\n });\n\n private readonly _shouldShowValidation = computed(() => {\n const control = this._formControl();\n this._formStateVersion();\n\n if (control) {\n return control.dirty;\n }\n\n return this._dirty() || this._touched();\n });\n\n protected readonly hasError = computed(() => {\n const asyncErrors = this._asyncErrors();\n if (asyncErrors.size > 0 && this._shouldShowValidation()) {\n return true;\n }\n\n const customErrors = this._getValidationErrors();\n if (customErrors.length > 0) {\n return true;\n }\n\n const control = this._formControl();\n this._formStateVersion();\n\n if (!control) {\n return false;\n }\n\n return control.invalid && this._shouldShowValidation();\n });\n\n protected readonly showError = computed(() => this.hasError());\n\n protected readonly errorMessage = computed(() => {\n const asyncErrors = this._asyncErrors();\n if (asyncErrors.size > 0) {\n return asyncErrors.values().next().value as string;\n }\n\n const customErrors = this._getValidationErrors();\n if (customErrors.length > 0) {\n return customErrors[0];\n }\n\n const control = this._formControl();\n const errors = control?.errors;\n\n if (!errors) {\n return '';\n }\n\n const validators = this.zValidators();\n for (const validator of validators) {\n if (errors[validator.error]) {\n return validator.message;\n }\n }\n\n if (errors['required']) {\n return this.effectiveRequiredErrorText();\n }\n\n return '';\n });\n\n protected readonly selectClasses = computed(() =>\n zMergeClasses(\n zSelectVariants({\n zSize: this.zSize(),\n zStatus: this.currentStatus() as 'default' | 'open' | 'error' | 'disabled' | 'readonly',\n }),\n // prettier-ignore\n !this.zWrap() &&\n this.isMultipleMode() && {\n 'h-8': this.zSize() === 'sm',\n 'h-9': this.zSize() === 'default',\n 'h-10': this.zSize() === 'lg',\n },\n this.class()\n )\n );\n\n constructor() {\n effect(() => {\n if (!this.zSearchServer()) {\n return;\n }\n\n const newOpts = this.zOptions();\n const known = this._allKnownOptions();\n const knownValues = new Set(known.map(o => o.value));\n const toAdd = newOpts.filter(o => !knownValues.has(o.value));\n\n if (toAdd.length > 0) {\n this._allKnownOptions.set([...known, ...toAdd]);\n }\n });\n\n effect(() => {\n const isOpen = this.isOpen();\n const useVirtual = this.shouldUseVirtualScroll();\n\n if (!isOpen) {\n return;\n }\n\n const getScrollElement = (): HTMLElement | null => {\n if (useVirtual) {\n return this.virtualScrollRef()?.nativeElement ?? null;\n }\n\n return this.optionsContainerRef()?.nativeElement ?? null;\n };\n\n const handleScroll = () => {\n const el = getScrollElement();\n if (!el) {\n return;\n }\n\n const isScrollable = el.scrollHeight > el.clientHeight;\n this.hasScrollShadow.set(isScrollable);\n };\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n handleScroll();\n\n const el = getScrollElement();\n if (el) {\n el.addEventListener('scroll', handleScroll);\n }\n });\n });\n\n return () => {\n const el = getScrollElement();\n if (el) {\n el.removeEventListener('scroll', handleScroll);\n }\n };\n });\n\n effect(() => {\n const sentinel = this.loadMoreSentinelRef();\n const isOpen = this.isOpen();\n const optionsCount = this.filteredOptions().length;\n\n if (!sentinel || !isOpen || optionsCount === 0) {\n this._cleanupLoadMoreObserver();\n return;\n }\n\n this._setupLoadMoreObserver();\n });\n\n effect(() => {\n const isOpen = this.isOpen();\n const useVirtual = this.shouldUseVirtualScroll();\n const optionsCount = this.filteredOptions().length;\n\n if (!isOpen || !useVirtual || optionsCount === 0) {\n this._cleanupVirtualScrollListener();\n return;\n }\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this._setupVirtualScrollLoadMore();\n });\n });\n });\n }\n\n ngOnInit(): void {\n this._searchSubject.pipe(debounceTime(this.zDebounce()), takeUntilDestroyed(this._destroyRef)).subscribe(value => {\n this.searchText.set(value);\n this.zOnSearch.emit(value);\n });\n\n const asyncValidators = this.zAsyncValidators();\n if (asyncValidators.length > 0) {\n const debounceMs = this.zAsyncDebounce() || 300;\n this._asyncValidationSubject\n .pipe(debounceTime(debounceMs), takeUntilDestroyed(this._destroyRef))\n .subscribe(value => {\n void this._runAsyncValidation(value);\n });\n }\n\n void Promise.resolve().then(() => {\n try {\n this._ngControl = this._injector.get(NgControl, null);\n if (!this._ngControl?.control) {\n return;\n }\n\n const { control } = this._ngControl;\n this._formControl.set(control);\n merge(\n control.statusChanges,\n control.valueChanges,\n control.events.pipe(\n filter(event => event instanceof PristineChangeEvent || event instanceof TouchedChangeEvent)\n )\n )\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._formStateVersion.update(v => v + 1);\n });\n } catch {\n this._ngControl = null;\n }\n });\n\n setTimeout(() => this._emitControl());\n }\n\n public writeValue(value: T | T[] | null): void {\n const fieldKey = this.zKey();\n if (!fieldKey) {\n this._value.set(value);\n return;\n }\n\n if (value === null || value === undefined) {\n this._value.set(value);\n return;\n }\n\n if (Array.isArray(value)) {\n const extractedValues = value.map(item => {\n if (typeof item === 'object' && item !== null && fieldKey in item) {\n return (item as Record<string, T>)[fieldKey];\n }\n return item as T;\n });\n\n this._value.set(extractedValues as T[]);\n return;\n }\n\n if (typeof value === 'object' && value !== null && fieldKey in value) {\n const extractedValue = (value as Record<string, T>)[fieldKey];\n this._value.set(extractedValue);\n return;\n }\n\n this._value.set(value);\n }\n\n public registerOnChange(fn: (value: T | T[] | null) => void): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isInteractionDisabled()) {\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.toggleDropdown();\n return;\n }\n\n if (event.key === 'Escape' && this.isOpen()) {\n this._popoverControl()?.close();\n }\n }\n\n protected onTriggerMousedown(): void {\n const triggerEl = this.triggerRef()?.nativeElement;\n if (triggerEl) {\n this.dropdownWidth.set(triggerEl.getBoundingClientRect().width);\n }\n }\n\n protected toggleDropdown(): void {\n this.onTriggerMousedown();\n this._popoverControl()?.toggle();\n }\n\n protected onPopoverControl(control: ZPopoverControl): void {\n this._popoverControl.set(control);\n }\n\n protected onPopoverShow(): void {\n this.isOpen.set(true);\n this.searchText.set('');\n this.zOnSearch.emit('');\n\n if (this.zShowSearch()) {\n setTimeout(() => {\n this.searchInputRef()?.nativeElement.focus();\n }, 100);\n }\n }\n\n protected onPopoverHideStart(): void {\n this.isOpen.set(false);\n this.hasScrollShadow.set(false);\n this._cleanupVirtualScrollListener();\n\n if (this._dirty()) {\n this._touched.set(true);\n }\n\n this._onTouched();\n }\n\n protected onPopoverHideEnd(): void {\n if (this.zSearchServer()) {\n this.searchText.set('');\n this.zOnSearch.emit('');\n }\n }\n\n protected onSearchChange(value: string): void {\n this._searchSubject.next(value);\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.checkScrollShadow();\n });\n });\n }\n\n protected checkScrollShadow(): void {\n const container = this.optionsContainerRef()?.nativeElement;\n if (!container) {\n this.hasScrollShadow.set(false);\n return;\n }\n\n const isScrollable = container.scrollHeight > container.clientHeight;\n this.hasScrollShadow.set(isScrollable);\n }\n\n private _setupLoadMoreObserver(): void {\n this._cleanupLoadMoreObserver();\n\n const sentinel = this.loadMoreSentinelRef()?.nativeElement;\n const container = this.optionsContainerRef()?.nativeElement;\n\n if (!sentinel || !container) {\n return;\n }\n\n this._loadMoreObserver = new IntersectionObserver(\n entries => {\n const entry = entries[0];\n if (entry?.isIntersecting && !this.zLoadingMore()) {\n const currentCount = this.filteredOptions().length;\n this.zOnLoadMore.emit({\n currentCount,\n scrollTop: container.scrollTop,\n });\n }\n },\n {\n root: container,\n rootMargin: '100px',\n threshold: 0,\n }\n );\n\n this._loadMoreObserver.observe(sentinel);\n }\n\n private _cleanupLoadMoreObserver(): void {\n if (this._loadMoreObserver) {\n this._loadMoreObserver.disconnect();\n this._loadMoreObserver = null;\n }\n }\n\n private _setupVirtualScrollLoadMore(): void {\n this._cleanupVirtualScrollListener();\n\n const scrollElement = this.virtualScrollRef()?.nativeElement;\n if (!scrollElement) {\n return;\n }\n\n const handleScroll = () => {\n if (this.zLoadingMore()) {\n return;\n }\n\n const { scrollTop, scrollHeight, clientHeight } = scrollElement;\n const scrollDistance = this.zScrollDistance();\n const threshold = clientHeight * scrollDistance;\n const distanceFromBottom = scrollHeight - scrollTop - clientHeight;\n\n if (distanceFromBottom <= threshold) {\n const currentCount = this.filteredOptions().length;\n this.zOnLoadMore.emit({\n currentCount,\n scrollTop,\n });\n }\n };\n\n scrollElement.addEventListener('scroll', handleScroll);\n this._virtualScrollListener = () => {\n scrollElement.removeEventListener('scroll', handleScroll);\n };\n }\n\n private _cleanupVirtualScrollListener(): void {\n if (this._virtualScrollListener) {\n this._virtualScrollListener();\n this._virtualScrollListener = null;\n }\n }\n\n protected selectOption(option: ZSelectOption<T>, closeFn?: () => void): void {\n if (option.disabled) {\n return;\n }\n\n if (this.isMultipleMode()) {\n const current = (this._value() as T[]) ?? [];\n const isSelected = current.includes(option.value);\n const newValue = isSelected ? current.filter(v => v !== option.value) : [...current, option.value];\n\n this._value.set(newValue);\n this._dirty.set(true);\n this._onChange(newValue);\n this._triggerAsyncValidation(\n newValue\n .map(v => this.zOptions().find(o => o.value === v))\n .filter((o): o is ZSelectOption<T> => o !== undefined)\n );\n return;\n }\n\n this._value.set(option.value);\n this._dirty.set(true);\n this._onChange(option.value);\n this._triggerAsyncValidation(option);\n this._popoverControl()?.close();\n\n if (closeFn) {\n closeFn();\n }\n }\n\n protected removeOption(event: MouseEvent, option: ZSelectOption<T>): void {\n event.stopPropagation();\n\n const current = (this._value() as T[]) ?? [];\n const newValue = current.filter(v => v !== option.value);\n this._value.set(newValue);\n this._dirty.set(true);\n this._onChange(newValue);\n }\n\n protected clearAll(event: MouseEvent): void {\n event.stopPropagation();\n\n if (this.isMultipleMode()) {\n this._value.set([]);\n this._dirty.set(true);\n this._onChange([]);\n return;\n }\n\n this._value.set(null);\n this._dirty.set(true);\n this._onChange(null);\n }\n\n protected selectAll(): void {\n if (!this.isMultipleMode()) {\n return;\n }\n\n const enabledOptions = this.zOptions().filter(opt => !opt.disabled);\n const allValues = enabledOptions.map(opt => opt.value);\n\n this._value.set(allValues);\n this._dirty.set(true);\n this._onChange(allValues);\n }\n\n protected removeAll(): void {\n if (!this.isMultipleMode()) {\n return;\n }\n\n this._value.set([]);\n this._dirty.set(true);\n this._onChange([]);\n }\n\n public reset(): void {\n if (this.isMultipleMode()) {\n this._value.set([]);\n this._onChange([]);\n }\n\n if (!this.isMultipleMode()) {\n this._value.set(null);\n this._onChange(null);\n }\n\n this._touched.set(false);\n this._dirty.set(false);\n this.searchText.set('');\n\n if (!this._ngControl?.control) {\n return;\n }\n\n this._ngControl.control.markAsPristine();\n this._ngControl.control.markAsUntouched();\n }\n\n public focus(): void {\n this.triggerRef()?.nativeElement.focus();\n }\n\n public blur(): void {\n this.triggerRef()?.nativeElement.blur();\n }\n\n public markAsTouched(): void {\n this._touched.set(true);\n this._onTouched();\n }\n\n public markAsUntouched(): void {\n this._touched.set(false);\n }\n\n public markAsDirty(): void {\n this._dirty.set(true);\n }\n\n public markAsPristine(): void {\n this._dirty.set(false);\n }\n\n public validate(): void {\n this._touched.set(true);\n this._dirty.set(true);\n this._onTouched();\n\n if (this._ngControl?.control) {\n this._ngControl.control.markAsDirty();\n this._ngControl.control.markAsTouched();\n }\n }\n\n private _emitControl(): void {\n this.zControl.emit({\n validate: () => this.validate(),\n reset: () => this.reset(),\n focus: () => this.focus(),\n blur: () => this.blur(),\n markAsTouched: () => this.markAsTouched(),\n markAsUntouched: () => this.markAsUntouched(),\n markAsDirty: () => this.markAsDirty(),\n markAsPristine: () => this.markAsPristine(),\n hasError: this.hasError,\n isValidating: this.isValidating,\n isOpen: this.isOpen.asReadonly(),\n value: this._value.asReadonly(),\n selectedOption: this.selectedOption,\n selectedOptions: this.selectedOptions,\n errorMessage: this.errorMessage,\n });\n }\n\n protected trackByValue = (_index: number, option: ZSelectOption<T>): unknown => {\n const key = this.zKey();\n if (key && key in option) {\n return (option as unknown as Record<string, unknown>)[key];\n }\n\n return option.value;\n };\n\n private _getValidationErrors(): string[] {\n const validators = this.zValidators();\n const errors: string[] = [];\n\n if (!this._shouldShowValidation()) {\n return errors;\n }\n\n const selectedValue = this.isMultipleMode() ? this.selectedOptions() : this.selectedOption();\n\n const isRequired = this.zRequired() || this._formControl()?.errors?.['required'];\n if (isRequired && !this.hasValue()) {\n errors.push(this.effectiveRequiredErrorText());\n }\n\n for (const validator of validators) {\n if (!validator.validate(selectedValue)) {\n errors.push(validator.message);\n }\n }\n\n return errors;\n }\n\n private async _runAsyncValidation(value: ZSelectOption<T> | ZSelectOption<T>[] | null): Promise<void> {\n const asyncValidators = this.zAsyncValidators();\n if (asyncValidators.length === 0) {\n return;\n }\n\n if (value === null || value === undefined) {\n this._asyncErrors.set(new Map());\n this.isValidating.set(false);\n return;\n }\n\n this._cancelAsyncValidation();\n this._asyncValidationAbortController = new AbortController();\n const { signal } = this._asyncValidationAbortController;\n\n this.isValidating.set(true);\n const errors = new Map<string, string>();\n\n try {\n const validationPromises = asyncValidators.map(async validator => {\n if (signal.aborted) {\n return null;\n }\n\n try {\n const result = validator.validate(value);\n if (!isObservable(result)) {\n const isValid = await result;\n if (signal.aborted) {\n return null;\n }\n return { validator, isValid };\n }\n\n const safeResult$ = result.pipe(\n takeUntil(this._asyncCancelSubject),\n catchError(err => {\n console.error(`Async validation error for ${validator.error}:`, err);\n return of(false);\n })\n );\n\n const isValid = await firstValueFrom(safeResult$);\n if (signal.aborted) {\n return null;\n }\n return { validator, isValid };\n } catch (error) {\n if (!signal.aborted) {\n console.error(`Async validation error for ${validator.error}:`, error);\n return { validator, isValid: false };\n }\n return null;\n }\n });\n\n const results = await Promise.all(validationPromises);\n\n if (signal.aborted) {\n return;\n }\n\n for (const result of results) {\n if (result && !result.isValid) {\n errors.set(result.validator.error, result.validator.message);\n }\n }\n\n this._asyncErrors.set(errors);\n } catch (error) {\n if (!signal.aborted) {\n console.error('Async validation error:', error);\n }\n } finally {\n if (!signal.aborted) {\n this.isValidating.set(false);\n }\n }\n }\n\n private _cancelAsyncValidation(): void {\n if (this._asyncValidationAbortController) {\n this._asyncValidationAbortController.abort();\n this._asyncValidationAbortController = null;\n }\n\n this._asyncCancelSubject.next();\n }\n\n private _triggerAsyncValidation(value: ZSelectOption<T> | ZSelectOption<T>[] | null): void {\n if (this.zAsyncValidators().length > 0 && this.zAsyncValidateOn() === 'change') {\n this._asyncValidationSubject.next(value);\n }\n }\n}\n","<div class=\"z-select-wrapper relative flex w-full flex-col gap-2\">\n @if (zLabel()) {\n <label [for]=\"selectId\" class=\"text-xs leading-none font-medium\" [class]=\"zLabelClass()\">\n {{ zLabel() }}\n @if (zRequired()) {\n <span class=\"text-destructive! ml-0.5\">*</span>\n }\n </label>\n }\n\n <div\n #triggerEl\n [id]=\"selectId\"\n z-popover\n [zPopoverContent]=\"dropdownTpl\"\n [zOffset]=\"6\"\n [zDisabled]=\"isInteractionDisabled()\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n zClass=\"border-0 shadow-none bg-transparent p-0\"\n (zControl)=\"onPopoverControl($event)\"\n (zShow)=\"onPopoverShow()\"\n (zHideStart)=\"onPopoverHideStart()\"\n (zHide)=\"onPopoverHideEnd()\"\n class=\"z-select-trigger cursor-pointer\"\n [class]=\"selectClasses()\"\n [class.z-select-open]=\"isOpen()\"\n (mousedown)=\"onTriggerMousedown()\"\n (keydown)=\"onTriggerKeydown($event)\"\n tabindex=\"0\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"dropdownId\">\n @if (zPrefix()) {\n <z-icon [zType]=\"zPrefix() || 'lucideChevronDown'\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n\n <div\n class=\"z-select-tags-wrapper flex min-w-0 flex-1 items-center gap-1\"\n [class.flex-wrap]=\"zWrap()\"\n [class.overflow-hidden]=\"!zWrap()\">\n @if (isMultipleMode()) {\n @if (selectedOptions().length === 0) {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n } @else {\n @for (opt of displayedTags(); track opt.value) {\n <span #tagEl [class]=\"opt | zTagClasses: zSize() : isTagsMode()\" class=\"z-select-tag\">\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: opt }\" />\n } @else {\n <span\n class=\"max-w-25 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"6\"\n [zTriggerElement]=\"tagEl\">\n {{ opt.label }}\n </span>\n }\n @if (zAllowClear() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"-mr-0.5 flex size-3.5 items-center justify-center rounded-[3px] transition-colors hover:bg-black/10\"\n (click)=\"removeOption($event, opt)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"10\" />\n </button>\n }\n </span>\n }\n @if (remainingCount() > 0) {\n <span class=\"z-select-remaining text-muted-foreground bg-muted rounded px-1.5 py-0.5 text-xs font-medium\">\n +{{ remainingCount() }}\n </span>\n }\n }\n } @else {\n @if (selectedOption()) {\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: selectedOption() }\" />\n } @else {\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"selectedOption()!.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"10\">\n {{ selectedOption()!.label }}\n </span>\n }\n } @else {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n }\n }\n </div>\n\n @if (zLoading() || zLoadingMore()) {\n <z-icon zType=\"lucideLoaderCircle\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n @if (!zLoading() && zAllowClear() && hasValue() && !isDisabled() && !isReadonly()) {\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-foreground flex shrink-0 items-center justify-center transition-colors\"\n (click)=\"clearAll($event)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n </button>\n }\n\n @if (isValidating()) {\n <z-icon zType=\"lucideLoader2\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n <z-icon\n zType=\"lucideChevronDown\"\n zSize=\"16\"\n class=\"text-muted-foreground shrink-0 transition-transform duration-200\"\n [class.rotate-180]=\"isOpen()\" />\n </div>\n\n @if (showError()) {\n <p class=\"text-destructive animate-in fade-in slide-in-from-top-1 m-0 text-xs duration-200\">\n {{ errorMessage() }}\n </p>\n }\n</div>\n\n<ng-template #dropdownTpl let-close=\"close\">\n <div\n [id]=\"dropdownId\"\n class=\"z-select-dropdown bg-popover border-border rounded-[6px] border shadow-lg\"\n [style.width.px]=\"dropdownWidth()\">\n @if (zShowSearch()) {\n <div class=\"border-border flex items-center border-b px-3\">\n <z-icon zType=\"lucideSearch\" zSize=\"16\" class=\"text-muted-foreground/50 mr-2 shrink-0\" />\n <input\n #dropdownSearchInput\n type=\"text\"\n class=\"placeholder:text-muted-foreground text-foreground flex h-10 w-full bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50\"\n [placeholder]=\"effectivePlaceholderSearch()\"\n [ngModel]=\"searchText()\"\n (ngModelChange)=\"onSearchChange($event)\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\" />\n </div>\n }\n\n @if (zLoading()) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n <z-loading [zLoading]=\"true\" zSize=\"default\" />\n </div>\n } @else {\n @if (shouldUseVirtualScroll()) {\n <div\n #virtualScrollElement\n class=\"z-select-options z-select-virtual-scroll overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.height.px]=\"optionsMaxHeight()\">\n <div class=\"z-select-virtual-inner relative\" [style.height.px]=\"virtualizer.getTotalSize()\">\n @for (virtualItem of virtualizer.getVirtualItems(); track virtualItem.index) {\n @let opt = filteredOptions()[virtualItem.index];\n <div\n #optionEl\n class=\"z-select-option absolute right-0 left-0 min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.height.px]=\"zOptionHeight()\"\n [style.transform]=\"'translateY(' + virtualItem.start + 'px)'\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"optionEl\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n </div>\n @if (zLoadingMore()) {\n <div\n class=\"bg-popover/80 absolute right-0 bottom-0 left-0 flex items-center justify-center py-2\"\n [style.transform]=\"'translateY(' + virtualizer.getTotalSize() + 'px)'\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n </div>\n } @else {\n <div\n #optionsContainer\n class=\"z-select-options flex flex-col gap-0.75 overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.maxHeight.px]=\"optionsMaxHeight()\">\n @for (opt of filteredOptions(); track opt.value) {\n <div\n #optionEl2\n class=\"z-select-option relative min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.minHeight.px]=\"zOptionHeight()\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zArrow]=\"false\"\n [zOffset]=\"5\"\n [zHideDelay]=\"0\"\n [zTriggerElement]=\"optionEl2\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n <div #loadMoreSentinel class=\"h-px w-full shrink-0\"></div>\n </div>\n }\n\n @if (filteredOptions().length === 0) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n @if (isEmptyData()) {\n <z-icon [zType]=\"zEmptyIcon()\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveEmptyText() }}\n </span>\n } @else {\n <z-icon zType=\"lucideSearch\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveNotFoundText() }}\n </span>\n }\n </div>\n }\n\n @if (zLoadingMore()) {\n <div class=\"z-select-loading-more border-border/50 flex items-center justify-center border-t py-1.5\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n }\n\n @if (zShowAction() && isMultipleMode()) {\n <div class=\"border-border flex items-center gap-2 border-t px-2 py-1.5\">\n @if (zActionTemplate()) {\n <ng-container *ngTemplateOutlet=\"zActionTemplate()!\" />\n } @else {\n <z-button zSize=\"xs\" zType=\"ghost-info\" class=\"flex-1\" (click)=\"selectAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideCheckCheck\" zSize=\"14\" />\n {{ effectiveSelectAllText() }}\n </z-button>\n <z-button zSize=\"xs\" zType=\"ghost-error\" class=\"flex-1\" (click)=\"removeAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n {{ effectiveClearAllText() }}\n </z-button>\n }\n </div>\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-select.mjs","sources":["../../../../libs/core-ui/components/z-select/directives/z-select-option.directive.ts","../../../../libs/core-ui/components/z-select/directives/z-select-selected.directive.ts","../../../../libs/core-ui/components/z-select/pipes/z-select-is-selected.pipe.ts","../../../../libs/core-ui/components/z-select/z-select.variants.ts","../../../../libs/core-ui/components/z-select/pipes/z-select-option-classes.pipe.ts","../../../../libs/core-ui/components/z-select/z-select.types.ts","../../../../libs/core-ui/components/z-select/z-select.utils.ts","../../../../libs/core-ui/components/z-select/pipes/z-select-tag.pipe.ts","../../../../libs/core-ui/components/z-select/z-select.component.ts","../../../../libs/core-ui/components/z-select/z-select.component.html","../../../../libs/core-ui/components/z-select/shival99-z-ui-components-z-select.ts"],"sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\nimport { ZSelectOptionContext } from '../z-select.types';\n\n@Directive({\n selector: '[z-select-option], [zSelectOption]',\n standalone: true,\n})\nexport class ZSelectOptionDirective<T = unknown> {\n public readonly templateRef = inject(TemplateRef<ZSelectOptionContext<T>>);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { ZSelectSelectedContext } from '../z-select.types';\n\n@Directive({\n selector: '[z-select-selected], [zSelectSelected]',\n standalone: true,\n})\nexport class ZSelectSelectedDirective<T = unknown> {\n public readonly templateRef = inject(TemplateRef<ZSelectSelectedContext<T>>);\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZSelectOption } from '../z-select.types';\n\n@Pipe({\n name: 'zIsSelected',\n standalone: true,\n pure: true,\n})\nexport class ZIsSelectedPipe implements PipeTransform {\n transform<T>(option: ZSelectOption<T>, value: T | T[] | null, isMultipleMode: boolean): boolean {\n if (isMultipleMode) {\n const current = (value as T[]) ?? [];\n return current.includes(option.value);\n }\n\n return value === option.value;\n }\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zSelectVariants = cva(\n [\n 'flex w-full items-center rounded-[6px] border border-input bg-white shadow-xs cursor-pointer',\n 'transition-[border-color,box-shadow,background-color,color,opacity] duration-200',\n 'dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n 'outline-none',\n 'text-sm',\n ],\n {\n variants: {\n zSize: {\n sm: 'min-h-8 px-2 py-1 gap-2 text-sm',\n default: 'min-h-9 px-2 py-1.5 gap-2 text-sm',\n lg: 'min-h-10 px-2 py-2 gap-2.5 text-sm',\n },\n zStatus: {\n default: 'focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]',\n open: 'border-ring ring-ring/50 ring-[3px]',\n error:\n 'border-destructive! ring-destructive/20 ring-[3px] focus-within:border-destructive! focus-within:ring-destructive/30',\n disabled: 'opacity-50 cursor-not-allowed bg-muted! text-muted-foreground',\n readonly: 'cursor-default bg-muted/50 text-muted-foreground',\n },\n },\n defaultVariants: {\n zSize: 'default',\n zStatus: 'default',\n },\n }\n);\n\nexport type ZSelectVariants = VariantProps<typeof zSelectVariants>;\n\nexport const zSelectTagVariants = cva(\n 'inline-flex items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium transition-colors',\n {\n variants: {\n zSize: {\n sm: 'text-[10px] px-1 py-0',\n default: 'text-xs px-1.5 py-0.5',\n lg: 'text-xs px-2 py-1',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\nexport const zSelectOptionVariants = cva(\n 'flex items-center gap-2 px-2 py-1.5 cursor-pointer transition-colors text-sm rounded-[4px] outline-none whitespace-nowrap',\n {\n variants: {\n selected: {\n true: 'bg-primary/15 text-primary',\n false: 'hover:bg-primary/10 hover:text-foreground',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed pointer-events-none',\n false: '',\n },\n },\n defaultVariants: {\n selected: false,\n disabled: false,\n },\n }\n);\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { zSelectOptionVariants } from '../z-select.variants';\n\n@Pipe({\n name: 'zOptionClasses',\n standalone: true,\n pure: true,\n})\nexport class ZOptionClassesPipe implements PipeTransform {\n transform(isSelected: boolean, isDisabled?: boolean): string {\n return zSelectOptionVariants({\n selected: isSelected,\n disabled: isDisabled ?? false,\n });\n }\n}\n","import type { Signal, TemplateRef } from '@angular/core';\nimport type { Observable } from 'rxjs';\n\nexport interface ZSelectControl<T = unknown> {\n validate: () => void;\n reset: () => void;\n focus: () => void;\n blur: () => void;\n markAsTouched: () => void;\n markAsUntouched: () => void;\n markAsDirty: () => void;\n markAsPristine: () => void;\n hasError: Signal<boolean>;\n isValidating: Signal<boolean>;\n isOpen: Signal<boolean>;\n value: Signal<T | T[] | null>;\n selectedOption: Signal<ZSelectOption<T> | null>;\n selectedOptions: Signal<ZSelectOption<T>[]>;\n errorMessage: Signal<string>;\n}\n\nexport type ZSelectMode = 'single' | 'multiple' | 'tags';\nexport type ZSelectSize = 'sm' | 'default' | 'lg';\nexport type ZSelectAsyncValidateOn = 'change' | 'blur';\n\nexport interface ZSelectOption<T = unknown> {\n label: string;\n value: T;\n disabled?: boolean;\n group?: string;\n icon?: string;\n}\n\nexport interface ZSelectSelectedContext<T = unknown> {\n $implicit: ZSelectOption<T>;\n}\n\nexport interface ZSelectOptionContext<T = unknown> {\n $implicit: ZSelectOption<T>;\n selected: boolean;\n}\n\nexport interface ZSelectAsyncValidator<T = unknown> {\n error: string;\n message: string;\n validate: (value: ZSelectOption<T> | ZSelectOption<T>[] | null) => Promise<boolean> | Observable<boolean>;\n}\n\nexport interface ZSelectValidator<T = unknown> {\n error: string;\n message: string;\n validate: (value: ZSelectOption<T> | ZSelectOption<T>[] | null) => boolean;\n}\n\nexport interface ZSelectOptionGroup<T = unknown> {\n label: string;\n options: ZSelectOption<T>[];\n}\n\nexport interface ZSelectLoadMoreEvent {\n currentCount: number;\n scrollTop: number;\n}\n\nexport type ZSelectLabelTemplate<T = unknown> = TemplateRef<{ $implicit: ZSelectOption<T> }>;\nexport type ZSelectOptionTemplate<T = unknown> = TemplateRef<{ $implicit: ZSelectOption<T>; selected: boolean }>;\n\nexport interface ZSelectTagColor {\n bg: string;\n text: string;\n border: string;\n}\n\nexport const TAG_COLORS: ZSelectTagColor[] = [\n {\n bg: 'bg-blue-100 dark:bg-blue-950',\n text: 'text-blue-700 dark:text-blue-300',\n border: 'border-blue-300 dark:border-blue-800',\n },\n {\n bg: 'bg-green-100 dark:bg-green-950',\n text: 'text-green-700 dark:text-green-300',\n border: 'border-green-300 dark:border-green-800',\n },\n {\n bg: 'bg-purple-100 dark:bg-purple-950',\n text: 'text-purple-700 dark:text-purple-300',\n border: 'border-purple-300 dark:border-purple-800',\n },\n {\n bg: 'bg-orange-100 dark:bg-orange-950',\n text: 'text-orange-700 dark:text-orange-300',\n border: 'border-orange-300 dark:border-orange-800',\n },\n {\n bg: 'bg-pink-100 dark:bg-pink-950',\n text: 'text-pink-700 dark:text-pink-300',\n border: 'border-pink-300 dark:border-pink-800',\n },\n {\n bg: 'bg-cyan-100 dark:bg-cyan-950',\n text: 'text-cyan-700 dark:text-cyan-300',\n border: 'border-cyan-300 dark:border-cyan-800',\n },\n {\n bg: 'bg-yellow-100 dark:bg-yellow-950',\n text: 'text-yellow-700 dark:text-yellow-300',\n border: 'border-yellow-300 dark:border-yellow-800',\n },\n {\n bg: 'bg-red-100 dark:bg-red-950',\n text: 'text-red-700 dark:text-red-300',\n border: 'border-red-300 dark:border-red-800',\n },\n {\n bg: 'bg-indigo-100 dark:bg-indigo-950',\n text: 'text-indigo-700 dark:text-indigo-300',\n border: 'border-indigo-300 dark:border-indigo-800',\n },\n {\n bg: 'bg-teal-100 dark:bg-teal-950',\n text: 'text-teal-700 dark:text-teal-300',\n border: 'border-teal-300 dark:border-teal-800',\n },\n];\n","import { zRemoveVietnamese } from '@shival99/z-ui/utils';\nimport { TAG_COLORS, type ZSelectTagColor } from './z-select.types';\n\nconst colorCache = new Map<string, ZSelectTagColor>();\n\nexport function getTagColor(value: unknown): ZSelectTagColor {\n const key = String(value);\n const cached = colorCache.get(key);\n if (cached) {\n return cached;\n }\n\n let hash = 0;\n for (let i = 0; i < key.length; i++) {\n hash = (hash << 5) - hash + key.charCodeAt(i);\n hash = hash & hash;\n }\n\n const index = Math.abs(hash) % TAG_COLORS.length;\n const color = TAG_COLORS[index];\n colorCache.set(key, color);\n return color;\n}\n\nexport function filterOptions<T>(\n options: { label: string; value: T; disabled?: boolean }[],\n searchText: string\n): { label: string; value: T; disabled?: boolean }[] {\n const query = searchText.trim();\n if (!query) {\n return options;\n }\n\n const normalizedQuery = zRemoveVietnamese(query.toLowerCase());\n return options.filter(opt => {\n const normalizedLabel = zRemoveVietnamese(opt.label.toLowerCase());\n return normalizedLabel.includes(normalizedQuery);\n });\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ZSelectOption, ZSelectSize } from '../z-select.types';\nimport { getTagColor } from '../z-select.utils';\nimport { zSelectTagVariants } from '../z-select.variants';\n\n@Pipe({\n name: 'zTagClasses',\n standalone: true,\n pure: true,\n})\nexport class ZTagClassesPipe implements PipeTransform {\n transform<T>(option: ZSelectOption<T>, size: ZSelectSize, isTagsMode: boolean): string {\n const baseClasses = zSelectTagVariants({ zSize: size });\n\n if (isTagsMode) {\n const color = getTagColor(option.value);\n return zMergeClasses(baseClasses, color.bg, color.text, color.border);\n }\n\n return zMergeClasses(baseClasses, 'bg-muted text-foreground border-border');\n }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n type OnInit,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n type AbstractControl,\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n NgControl,\n PristineChangeEvent,\n TouchedChangeEvent,\n} from '@angular/forms';\nimport { injectVirtualizer } from '@shival99/angular-virtual';\nimport { ZButtonComponent } 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 { ZLoadingComponent } from '@shival99/z-ui/components/z-loading';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport type { ZPopoverControl } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZHighlightPipe, ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport { ZTranslateService } from '@shival99/z-ui/services';\nimport { zGenerateId, zMergeClasses, zTransform } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { catchError, debounceTime, filter, firstValueFrom, isObservable, merge, of, Subject, takeUntil } from 'rxjs';\nimport { ZSelectOptionDirective } from './directives/z-select-option.directive';\nimport { ZSelectSelectedDirective } from './directives/z-select-selected.directive';\nimport { ZIsSelectedPipe } from './pipes/z-select-is-selected.pipe';\nimport { ZOptionClassesPipe } from './pipes/z-select-option-classes.pipe';\nimport { ZTagClassesPipe } from './pipes/z-select-tag.pipe';\nimport type {\n ZSelectAsyncValidateOn,\n ZSelectAsyncValidator,\n ZSelectControl,\n ZSelectLabelTemplate,\n ZSelectLoadMoreEvent,\n ZSelectMode,\n ZSelectOption,\n ZSelectOptionTemplate,\n ZSelectSize,\n ZSelectValidator,\n} from './z-select.types';\nimport { filterOptions } from './z-select.utils';\nimport { zSelectVariants } from './z-select.variants';\n\n@Component({\n selector: 'z-select',\n imports: [\n FormsModule,\n NgClass,\n ZIconComponent,\n ZPopoverDirective,\n NgTemplateOutlet,\n ZButtonComponent,\n ZTooltipDirective,\n ZIsSelectedPipe,\n ZOptionClassesPipe,\n ZTagClassesPipe,\n ZLoadingComponent,\n ZHighlightPipe,\n ZSafeHtmlPipe,\n ],\n standalone: true,\n templateUrl: './z-select.component.html',\n styleUrl: './z-select.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ZSelectComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'zSelect',\n})\nexport class ZSelectComponent<T = unknown> implements OnInit, ControlValueAccessor {\n public readonly class = input<ClassValue>('');\n public readonly zMode = input<ZSelectMode>('single');\n public readonly zSize = input<ZSelectSize>('default');\n public readonly zLabel = input<string>('');\n public readonly zLabelClass = input<string>('');\n public readonly zPlaceholder = input<string>('');\n public readonly zRequired = input(false, { transform: zTransform });\n public readonly zDisabled = input(false, { transform: zTransform });\n public readonly zReadonly = input(false, { transform: zTransform });\n public readonly zLoading = input(false, { transform: zTransform });\n public readonly zPrefix = input<ZIcon | ''>('');\n public readonly zAllowClear = input(false, { transform: zTransform });\n public readonly zWrap = input(true, { transform: zTransform });\n public readonly zShowSearch = input(true, { transform: zTransform });\n public readonly zPlaceholderSearch = input<string>('');\n public readonly zDebounce = input<number>(300);\n public readonly zNotFoundText = input<string>('');\n public readonly zEmptyText = input<string>('');\n public readonly zEmptyIcon = input<ZIcon>('lucideInbox');\n public readonly zMaxTagCount = input<number>(3);\n public readonly zDropdownMaxHeight = input<number>(256);\n public readonly zOptionHeight = input<number>(32);\n public readonly zVirtualScroll = input(false, { transform: zTransform });\n public readonly zShowAction = input(false, { transform: zTransform });\n public readonly zOptions = input<ZSelectOption<T>[]>([]);\n public readonly zTranslateLabels = input(true, { transform: zTransform });\n public readonly zKey = input<string>('');\n public readonly zSearchServer = input(false, { transform: zTransform });\n public readonly zLoadingMore = input(false, { transform: zTransform });\n public readonly zEnableLoadMore = input(false, { transform: zTransform });\n public readonly zScrollDistance = input<number>(2);\n\n public readonly zSelectedTemplate = input<ZSelectLabelTemplate<T> | null>(null);\n public readonly zOptionTemplate = input<ZSelectOptionTemplate<T> | null>(null);\n public readonly zActionTemplate = input<TemplateRef<unknown> | null>(null);\n\n protected readonly customSelectedDirective = contentChild(ZSelectSelectedDirective<T>);\n protected readonly customOptionDirective = contentChild(ZSelectOptionDirective<T>);\n\n public readonly zOnSearch = output<string>();\n public readonly zOnLoadMore = output<ZSelectLoadMoreEvent>();\n public readonly zControl = output<ZSelectControl<T>>();\n\n public readonly zAsyncValidators = input<ZSelectAsyncValidator<T>[]>([]);\n public readonly zAsyncDebounce = input<number>(300);\n public readonly zAsyncValidateOn = input<ZSelectAsyncValidateOn>('change');\n public readonly zValidators = input<ZSelectValidator<T>[]>([]);\n\n protected readonly triggerRef = viewChild<ElementRef<HTMLDivElement>>('triggerEl');\n protected readonly searchInputRef = viewChild<ElementRef<HTMLInputElement>>('dropdownSearchInput');\n protected readonly dropdownTpl = viewChild<TemplateRef<unknown>>('dropdownTpl');\n protected readonly optionsContainerRef = viewChild<ElementRef<HTMLDivElement>>('optionsContainer');\n protected readonly virtualScrollRef = viewChild<ElementRef<HTMLDivElement>>('virtualScrollElement');\n protected readonly loadMoreSentinelRef = viewChild<ElementRef<HTMLDivElement>>('loadMoreSentinel');\n\n protected readonly selectId = zGenerateId('z-select');\n protected readonly dropdownId = `${this.selectId}-dropdown`;\n protected readonly isOpen = signal(false);\n protected readonly searchText = signal('');\n protected readonly dropdownWidth = signal(0);\n protected readonly hasScrollShadow = signal(false);\n private readonly _popoverControl = signal<ZPopoverControl | null>(null);\n private readonly _searchSubject = new Subject<string>();\n private _loadMoreObserver: IntersectionObserver | null = null;\n private readonly _allKnownOptions = signal<ZSelectOption<T>[]>([]);\n private _virtualScrollListener: (() => void) | null = null;\n\n private readonly _optionGap = 3;\n\n protected readonly virtualizer = injectVirtualizer(() => ({\n scrollElement: this.virtualScrollRef(),\n count: this.filteredOptions().length,\n estimateSize: () => this.zOptionHeight() + this._optionGap,\n overscan: 5,\n }));\n\n private readonly _value = signal<T | T[] | null>(null);\n protected readonly currentValue = this._value.asReadonly();\n private readonly _disabled = signal(false);\n private readonly _touched = signal(false);\n private readonly _dirty = signal(false);\n private readonly _formControl = signal<AbstractControl | null>(null);\n private readonly _formStateVersion = signal(0);\n private readonly _injector = inject(Injector);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _zTranslate = inject(ZTranslateService);\n\n private _onChange: (value: T | T[] | null) => void = () => void 0;\n private _onTouched: () => void = () => void 0;\n private _ngControl: NgControl | null = null;\n\n protected readonly isValidating = signal(false);\n private readonly _asyncErrors = signal<Map<string, string>>(new Map());\n private readonly _asyncCancelSubject = new Subject<void>();\n private readonly _asyncValidationSubject = new Subject<ZSelectOption<T> | ZSelectOption<T>[] | null>();\n private _asyncValidationAbortController: AbortController | null = null;\n\n protected readonly isDisabled = computed(() => this._disabled() || this.zDisabled());\n protected readonly isReadonly = computed(() => this.zReadonly());\n protected readonly isInteractionDisabled = computed(() => this.isDisabled() || this.isReadonly() || this.zLoading());\n\n protected readonly effectivePlaceholder = computed(() => {\n this._zTranslate.currentLang();\n return this.zPlaceholder() || this._zTranslate.instant('i18n_z_ui_select_placeholder');\n });\n\n protected readonly effectivePlaceholderSearch = computed(() => {\n this._zTranslate.currentLang();\n return this.zPlaceholderSearch() || this._zTranslate.instant('i18n_z_ui_select_search');\n });\n\n protected readonly effectiveNotFoundText = computed(() => {\n this._zTranslate.currentLang();\n return this.zNotFoundText() || this._zTranslate.instant('i18n_z_ui_select_no_results');\n });\n\n protected readonly effectiveEmptyText = computed(() => {\n this._zTranslate.currentLang();\n return this.zEmptyText() || this._zTranslate.instant('i18n_z_ui_select_no_options');\n });\n\n protected readonly effectiveSelectAllText = computed(() => {\n this._zTranslate.currentLang();\n return this._zTranslate.instant('i18n_z_ui_select_select_all');\n });\n\n protected readonly effectiveClearAllText = computed(() => {\n this._zTranslate.currentLang();\n return this._zTranslate.instant('i18n_z_ui_select_clear_all');\n });\n\n protected readonly effectiveRequiredErrorText = computed(() => {\n this._zTranslate.currentLang();\n return this._zTranslate.instant('i18n_z_ui_select_required');\n });\n\n protected readonly translatedOptions = computed<ZSelectOption<T>[]>(() => {\n this._zTranslate.currentLang();\n const options = this.zOptions();\n if (!this.zTranslateLabels()) {\n return options;\n }\n return options.map(opt => ({\n ...opt,\n label: this._zTranslate.instant(opt.label),\n }));\n });\n\n protected readonly isMultipleMode = computed(() => {\n const mode = this.zMode();\n return mode === 'multiple' || mode === 'tags';\n });\n\n protected readonly isTagsMode = computed(() => this.zMode() === 'tags');\n\n protected readonly effectiveSelectedTemplate = computed(() => {\n const directive = this.customSelectedDirective();\n if (directive) {\n return directive.templateRef;\n }\n return this.zSelectedTemplate();\n });\n\n protected readonly effectiveOptionTemplate = computed(() => {\n const directive = this.customOptionDirective();\n if (directive) {\n return directive.templateRef;\n }\n return this.zOptionTemplate();\n });\n\n protected readonly shouldUseVirtualScroll = computed(() => {\n if (this.zVirtualScroll()) {\n return true;\n }\n\n if (this.zEnableLoadMore()) {\n return false;\n }\n\n return this.zOptions().length > 50;\n });\n\n protected readonly selectedOption = computed<ZSelectOption<T> | null>(() => {\n this._zTranslate.currentLang();\n if (this.isMultipleMode()) {\n return null;\n }\n\n const value = this._value();\n if (value === null || value === undefined) {\n return null;\n }\n\n const options = this.zSearchServer() ? this._allKnownOptions() : this.translatedOptions();\n return options.find(opt => opt.value === value) ?? null;\n });\n\n protected readonly selectedOptions = computed<ZSelectOption<T>[]>(() => {\n this._zTranslate.currentLang();\n if (!this.isMultipleMode()) {\n return [];\n }\n\n const value = this._value();\n if (!Array.isArray(value)) {\n return [];\n }\n\n const options = this.zSearchServer() ? this._allKnownOptions() : this.translatedOptions();\n return value\n .map(v => options.find(opt => opt.value === v))\n .filter((opt): opt is ZSelectOption<T> => opt !== undefined);\n });\n\n protected readonly displayedTags = computed(() => {\n const selected = this.selectedOptions();\n const max = this.zMaxTagCount();\n return selected.slice(0, max);\n });\n\n protected readonly remainingCount = computed(() => {\n const selected = this.selectedOptions();\n const max = this.zMaxTagCount();\n return Math.max(0, selected.length - max);\n });\n\n protected readonly hasValue = computed(() => {\n const value = this._value();\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n\n return value !== null && value !== undefined;\n });\n\n protected readonly filteredOptions = computed(() => {\n if (this.zSearchServer()) {\n return this.translatedOptions();\n }\n\n return filterOptions(this.translatedOptions(), this.searchText());\n });\n\n protected readonly isEmptyData = computed(() => {\n if (this.zSearchServer() && this.searchText().trim()) {\n return false;\n }\n\n return this.translatedOptions().length === 0;\n });\n\n protected readonly isNoSearchResults = computed(() => {\n if (this.zSearchServer() && this.searchText().trim()) {\n return this.translatedOptions().length === 0;\n }\n const noFiltered = this.filteredOptions().length === 0;\n const hasOptions = this.translatedOptions().length > 0;\n const hasSearch = this.searchText().trim() !== '';\n return noFiltered && hasOptions && hasSearch;\n });\n\n protected readonly optionsMaxHeight = computed(() => {\n const total = this.zDropdownMaxHeight();\n const searchHeight = this.zShowSearch() ? 44 : 0;\n const actionHeight = this.zShowAction() && this.isMultipleMode() ? 40 : 0;\n return total - searchHeight - actionHeight;\n });\n\n protected readonly currentStatus = computed(() => {\n if (this.isDisabled()) {\n return 'disabled';\n }\n\n if (this.isReadonly()) {\n return 'readonly';\n }\n\n if (this.isOpen()) {\n return 'open';\n }\n\n if (this.hasError()) {\n return 'error';\n }\n\n return 'default';\n });\n\n private readonly _shouldShowValidation = computed(() => {\n const control = this._formControl();\n this._formStateVersion();\n\n if (control) {\n return control.dirty;\n }\n\n return this._dirty() || this._touched();\n });\n\n protected readonly hasError = computed(() => {\n const asyncErrors = this._asyncErrors();\n if (asyncErrors.size > 0 && this._shouldShowValidation()) {\n return true;\n }\n\n const customErrors = this._getValidationErrors();\n if (customErrors.length > 0) {\n return true;\n }\n\n const control = this._formControl();\n this._formStateVersion();\n\n if (!control) {\n return false;\n }\n\n return control.invalid && this._shouldShowValidation();\n });\n\n protected readonly showError = computed(() => this.hasError());\n\n protected readonly errorMessage = computed(() => {\n const asyncErrors = this._asyncErrors();\n if (asyncErrors.size > 0) {\n return asyncErrors.values().next().value as string;\n }\n\n const customErrors = this._getValidationErrors();\n if (customErrors.length > 0) {\n return customErrors[0];\n }\n\n const control = this._formControl();\n const errors = control?.errors;\n\n if (!errors) {\n return '';\n }\n\n const validators = this.zValidators();\n for (const validator of validators) {\n if (errors[validator.error]) {\n return validator.message;\n }\n }\n\n if (errors['required']) {\n return this.effectiveRequiredErrorText();\n }\n\n return '';\n });\n\n protected readonly selectClasses = computed(() =>\n zMergeClasses(\n zSelectVariants({\n zSize: this.zSize(),\n zStatus: this.currentStatus() as 'default' | 'open' | 'error' | 'disabled' | 'readonly',\n }),\n // prettier-ignore\n !this.zWrap() &&\n this.isMultipleMode() && {\n 'h-8': this.zSize() === 'sm',\n 'h-9': this.zSize() === 'default',\n 'h-10': this.zSize() === 'lg',\n },\n this.class()\n )\n );\n\n constructor() {\n effect(() => {\n if (!this.zSearchServer()) {\n return;\n }\n\n const newOpts = this.zOptions();\n const known = this._allKnownOptions();\n const knownValues = new Set(known.map(o => o.value));\n const toAdd = newOpts.filter(o => !knownValues.has(o.value));\n\n if (toAdd.length > 0) {\n this._allKnownOptions.set([...known, ...toAdd]);\n }\n });\n\n effect(() => {\n const isOpen = this.isOpen();\n const useVirtual = this.shouldUseVirtualScroll();\n\n if (!isOpen) {\n return;\n }\n\n const getScrollElement = (): HTMLElement | null => {\n if (useVirtual) {\n return this.virtualScrollRef()?.nativeElement ?? null;\n }\n\n return this.optionsContainerRef()?.nativeElement ?? null;\n };\n\n const handleScroll = () => {\n const el = getScrollElement();\n if (!el) {\n return;\n }\n\n const isScrollable = el.scrollHeight > el.clientHeight;\n this.hasScrollShadow.set(isScrollable);\n };\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n handleScroll();\n\n const el = getScrollElement();\n if (el) {\n el.addEventListener('scroll', handleScroll);\n }\n });\n });\n\n return () => {\n const el = getScrollElement();\n if (el) {\n el.removeEventListener('scroll', handleScroll);\n }\n };\n });\n\n effect(() => {\n const sentinel = this.loadMoreSentinelRef();\n const isOpen = this.isOpen();\n const optionsCount = this.filteredOptions().length;\n\n if (!sentinel || !isOpen || optionsCount === 0) {\n this._cleanupLoadMoreObserver();\n return;\n }\n\n this._setupLoadMoreObserver();\n });\n\n effect(() => {\n const isOpen = this.isOpen();\n const useVirtual = this.shouldUseVirtualScroll();\n const optionsCount = this.filteredOptions().length;\n\n if (!isOpen || !useVirtual || optionsCount === 0) {\n this._cleanupVirtualScrollListener();\n return;\n }\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this._setupVirtualScrollLoadMore();\n });\n });\n });\n }\n\n ngOnInit(): void {\n this._searchSubject.pipe(debounceTime(this.zDebounce()), takeUntilDestroyed(this._destroyRef)).subscribe(value => {\n this.searchText.set(value);\n this.zOnSearch.emit(value);\n });\n\n const asyncValidators = this.zAsyncValidators();\n if (asyncValidators.length > 0) {\n const debounceMs = this.zAsyncDebounce() || 300;\n this._asyncValidationSubject\n .pipe(debounceTime(debounceMs), takeUntilDestroyed(this._destroyRef))\n .subscribe(value => {\n void this._runAsyncValidation(value);\n });\n }\n\n void Promise.resolve().then(() => {\n try {\n this._ngControl = this._injector.get(NgControl, null);\n if (!this._ngControl?.control) {\n return;\n }\n\n const { control } = this._ngControl;\n this._formControl.set(control);\n merge(\n control.statusChanges,\n control.valueChanges,\n control.events.pipe(\n filter(event => event instanceof PristineChangeEvent || event instanceof TouchedChangeEvent)\n )\n )\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._formStateVersion.update(v => v + 1);\n });\n } catch {\n this._ngControl = null;\n }\n });\n\n setTimeout(() => this._emitControl());\n }\n\n public writeValue(value: T | T[] | null): void {\n const fieldKey = this.zKey();\n if (!fieldKey) {\n this._value.set(value);\n return;\n }\n\n if (value === null || value === undefined) {\n this._value.set(value);\n return;\n }\n\n if (Array.isArray(value)) {\n const extractedValues = value.map(item => {\n if (typeof item === 'object' && item !== null && fieldKey in item) {\n return (item as Record<string, T>)[fieldKey];\n }\n return item as T;\n });\n\n this._value.set(extractedValues as T[]);\n return;\n }\n\n if (typeof value === 'object' && value !== null && fieldKey in value) {\n const extractedValue = (value as Record<string, T>)[fieldKey];\n this._value.set(extractedValue);\n return;\n }\n\n this._value.set(value);\n }\n\n public registerOnChange(fn: (value: T | T[] | null) => void): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isInteractionDisabled()) {\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.toggleDropdown();\n return;\n }\n\n if (event.key === 'Escape' && this.isOpen()) {\n this._popoverControl()?.close();\n }\n }\n\n protected onTriggerMousedown(): void {\n const triggerEl = this.triggerRef()?.nativeElement;\n if (triggerEl) {\n this.dropdownWidth.set(triggerEl.getBoundingClientRect().width);\n }\n }\n\n protected toggleDropdown(): void {\n this.onTriggerMousedown();\n this._popoverControl()?.toggle();\n }\n\n protected onPopoverControl(control: ZPopoverControl): void {\n this._popoverControl.set(control);\n }\n\n protected onPopoverShow(): void {\n this.isOpen.set(true);\n this.searchText.set('');\n this.zOnSearch.emit('');\n\n if (this.zShowSearch()) {\n setTimeout(() => {\n this.searchInputRef()?.nativeElement.focus();\n }, 100);\n }\n }\n\n protected onPopoverHideStart(): void {\n this.isOpen.set(false);\n this.hasScrollShadow.set(false);\n this._cleanupVirtualScrollListener();\n\n if (this._dirty()) {\n this._touched.set(true);\n }\n\n this._onTouched();\n }\n\n protected onPopoverHideEnd(): void {\n if (this.zSearchServer()) {\n this.searchText.set('');\n this.zOnSearch.emit('');\n }\n }\n\n protected onSearchChange(value: string): void {\n this._searchSubject.next(value);\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.checkScrollShadow();\n });\n });\n }\n\n protected checkScrollShadow(): void {\n const container = this.optionsContainerRef()?.nativeElement;\n if (!container) {\n this.hasScrollShadow.set(false);\n return;\n }\n\n const isScrollable = container.scrollHeight > container.clientHeight;\n this.hasScrollShadow.set(isScrollable);\n }\n\n private _setupLoadMoreObserver(): void {\n this._cleanupLoadMoreObserver();\n\n const sentinel = this.loadMoreSentinelRef()?.nativeElement;\n const container = this.optionsContainerRef()?.nativeElement;\n\n if (!sentinel || !container) {\n return;\n }\n\n this._loadMoreObserver = new IntersectionObserver(\n entries => {\n const entry = entries[0];\n if (entry?.isIntersecting && !this.zLoadingMore()) {\n const currentCount = this.filteredOptions().length;\n this.zOnLoadMore.emit({\n currentCount,\n scrollTop: container.scrollTop,\n });\n }\n },\n {\n root: container,\n rootMargin: '100px',\n threshold: 0,\n }\n );\n\n this._loadMoreObserver.observe(sentinel);\n }\n\n private _cleanupLoadMoreObserver(): void {\n if (this._loadMoreObserver) {\n this._loadMoreObserver.disconnect();\n this._loadMoreObserver = null;\n }\n }\n\n private _setupVirtualScrollLoadMore(): void {\n this._cleanupVirtualScrollListener();\n\n const scrollElement = this.virtualScrollRef()?.nativeElement;\n if (!scrollElement) {\n return;\n }\n\n const handleScroll = () => {\n if (this.zLoadingMore()) {\n return;\n }\n\n const { scrollTop, scrollHeight, clientHeight } = scrollElement;\n const scrollDistance = this.zScrollDistance();\n const threshold = clientHeight * scrollDistance;\n const distanceFromBottom = scrollHeight - scrollTop - clientHeight;\n\n if (distanceFromBottom <= threshold) {\n const currentCount = this.filteredOptions().length;\n this.zOnLoadMore.emit({\n currentCount,\n scrollTop,\n });\n }\n };\n\n scrollElement.addEventListener('scroll', handleScroll);\n this._virtualScrollListener = () => {\n scrollElement.removeEventListener('scroll', handleScroll);\n };\n }\n\n private _cleanupVirtualScrollListener(): void {\n if (this._virtualScrollListener) {\n this._virtualScrollListener();\n this._virtualScrollListener = null;\n }\n }\n\n protected selectOption(option: ZSelectOption<T>, closeFn?: () => void): void {\n if (option.disabled) {\n return;\n }\n\n if (this.isMultipleMode()) {\n const current = (this._value() as T[]) ?? [];\n const isSelected = current.includes(option.value);\n const newValue = isSelected ? current.filter(v => v !== option.value) : [...current, option.value];\n\n this._value.set(newValue);\n this._dirty.set(true);\n this._onChange(newValue);\n this._triggerAsyncValidation(\n newValue\n .map(v => this.zOptions().find(o => o.value === v))\n .filter((o): o is ZSelectOption<T> => o !== undefined)\n );\n return;\n }\n\n this._value.set(option.value);\n this._dirty.set(true);\n this._onChange(option.value);\n this._triggerAsyncValidation(option);\n this._popoverControl()?.close();\n\n if (closeFn) {\n closeFn();\n }\n }\n\n protected removeOption(event: MouseEvent, option: ZSelectOption<T>): void {\n event.stopPropagation();\n\n const current = (this._value() as T[]) ?? [];\n const newValue = current.filter(v => v !== option.value);\n this._value.set(newValue);\n this._dirty.set(true);\n this._onChange(newValue);\n }\n\n protected clearAll(event: MouseEvent): void {\n event.stopPropagation();\n\n if (this.isMultipleMode()) {\n this._value.set([]);\n this._dirty.set(true);\n this._onChange([]);\n return;\n }\n\n this._value.set(null);\n this._dirty.set(true);\n this._onChange(null);\n }\n\n protected selectAll(): void {\n if (!this.isMultipleMode()) {\n return;\n }\n\n const enabledOptions = this.zOptions().filter(opt => !opt.disabled);\n const allValues = enabledOptions.map(opt => opt.value);\n\n this._value.set(allValues);\n this._dirty.set(true);\n this._onChange(allValues);\n }\n\n protected removeAll(): void {\n if (!this.isMultipleMode()) {\n return;\n }\n\n this._value.set([]);\n this._dirty.set(true);\n this._onChange([]);\n }\n\n public reset(): void {\n if (this.isMultipleMode()) {\n this._value.set([]);\n this._onChange([]);\n }\n\n if (!this.isMultipleMode()) {\n this._value.set(null);\n this._onChange(null);\n }\n\n this._touched.set(false);\n this._dirty.set(false);\n this.searchText.set('');\n\n if (!this._ngControl?.control) {\n return;\n }\n\n this._ngControl.control.markAsPristine();\n this._ngControl.control.markAsUntouched();\n }\n\n public focus(): void {\n this.triggerRef()?.nativeElement.focus();\n }\n\n public blur(): void {\n this.triggerRef()?.nativeElement.blur();\n }\n\n public markAsTouched(): void {\n this._touched.set(true);\n this._onTouched();\n }\n\n public markAsUntouched(): void {\n this._touched.set(false);\n }\n\n public markAsDirty(): void {\n this._dirty.set(true);\n }\n\n public markAsPristine(): void {\n this._dirty.set(false);\n }\n\n public validate(): void {\n this._touched.set(true);\n this._dirty.set(true);\n this._onTouched();\n\n if (this._ngControl?.control) {\n this._ngControl.control.markAsDirty();\n this._ngControl.control.markAsTouched();\n }\n }\n\n private _emitControl(): void {\n this.zControl.emit({\n validate: () => this.validate(),\n reset: () => this.reset(),\n focus: () => this.focus(),\n blur: () => this.blur(),\n markAsTouched: () => this.markAsTouched(),\n markAsUntouched: () => this.markAsUntouched(),\n markAsDirty: () => this.markAsDirty(),\n markAsPristine: () => this.markAsPristine(),\n hasError: this.hasError,\n isValidating: this.isValidating,\n isOpen: this.isOpen.asReadonly(),\n value: this._value.asReadonly(),\n selectedOption: this.selectedOption,\n selectedOptions: this.selectedOptions,\n errorMessage: this.errorMessage,\n });\n }\n\n protected trackByValue = (_index: number, option: ZSelectOption<T>): unknown => {\n const key = this.zKey();\n if (key && key in option) {\n return (option as unknown as Record<string, unknown>)[key];\n }\n\n return option.value;\n };\n\n private _getValidationErrors(): string[] {\n const validators = this.zValidators();\n const errors: string[] = [];\n\n if (!this._shouldShowValidation()) {\n return errors;\n }\n\n const selectedValue = this.isMultipleMode() ? this.selectedOptions() : this.selectedOption();\n\n const isRequired = this.zRequired() || this._formControl()?.errors?.['required'];\n if (isRequired && !this.hasValue()) {\n errors.push(this.effectiveRequiredErrorText());\n }\n\n for (const validator of validators) {\n if (!validator.validate(selectedValue)) {\n errors.push(validator.message);\n }\n }\n\n return errors;\n }\n\n private async _runAsyncValidation(value: ZSelectOption<T> | ZSelectOption<T>[] | null): Promise<void> {\n const asyncValidators = this.zAsyncValidators();\n if (asyncValidators.length === 0) {\n return;\n }\n\n if (value === null || value === undefined) {\n this._asyncErrors.set(new Map());\n this.isValidating.set(false);\n return;\n }\n\n this._cancelAsyncValidation();\n this._asyncValidationAbortController = new AbortController();\n const { signal } = this._asyncValidationAbortController;\n\n this.isValidating.set(true);\n const errors = new Map<string, string>();\n\n try {\n const validationPromises = asyncValidators.map(async validator => {\n if (signal.aborted) {\n return null;\n }\n\n try {\n const result = validator.validate(value);\n if (!isObservable(result)) {\n const isValid = await result;\n if (signal.aborted) {\n return null;\n }\n return { validator, isValid };\n }\n\n const safeResult$ = result.pipe(\n takeUntil(this._asyncCancelSubject),\n catchError(err => {\n console.error(`Async validation error for ${validator.error}:`, err);\n return of(false);\n })\n );\n\n const isValid = await firstValueFrom(safeResult$);\n if (signal.aborted) {\n return null;\n }\n return { validator, isValid };\n } catch (error) {\n if (!signal.aborted) {\n console.error(`Async validation error for ${validator.error}:`, error);\n return { validator, isValid: false };\n }\n return null;\n }\n });\n\n const results = await Promise.all(validationPromises);\n\n if (signal.aborted) {\n return;\n }\n\n for (const result of results) {\n if (result && !result.isValid) {\n errors.set(result.validator.error, result.validator.message);\n }\n }\n\n this._asyncErrors.set(errors);\n } catch (error) {\n if (!signal.aborted) {\n console.error('Async validation error:', error);\n }\n } finally {\n if (!signal.aborted) {\n this.isValidating.set(false);\n }\n }\n }\n\n private _cancelAsyncValidation(): void {\n if (this._asyncValidationAbortController) {\n this._asyncValidationAbortController.abort();\n this._asyncValidationAbortController = null;\n }\n\n this._asyncCancelSubject.next();\n }\n\n private _triggerAsyncValidation(value: ZSelectOption<T> | ZSelectOption<T>[] | null): void {\n if (this.zAsyncValidators().length > 0 && this.zAsyncValidateOn() === 'change') {\n this._asyncValidationSubject.next(value);\n }\n }\n}\n","<div class=\"z-select-wrapper relative flex w-full flex-col gap-2\">\n @if (zLabel()) {\n <label [for]=\"selectId\" class=\"text-xs leading-none font-medium\" [class]=\"zLabelClass()\">\n {{ zLabel() }}\n @if (zRequired()) {\n <span class=\"text-destructive! ml-0.5\">*</span>\n }\n </label>\n }\n\n <div\n #triggerEl\n [id]=\"selectId\"\n z-popover\n [zPopoverContent]=\"dropdownTpl\"\n [zOffset]=\"6\"\n [zDisabled]=\"isInteractionDisabled()\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n zClass=\"border-0 shadow-none bg-transparent p-0\"\n (zControl)=\"onPopoverControl($event)\"\n (zShow)=\"onPopoverShow()\"\n (zHideStart)=\"onPopoverHideStart()\"\n (zHide)=\"onPopoverHideEnd()\"\n class=\"z-select-trigger cursor-pointer\"\n [class]=\"selectClasses()\"\n [class.z-select-open]=\"isOpen()\"\n (mousedown)=\"onTriggerMousedown()\"\n (keydown)=\"onTriggerKeydown($event)\"\n tabindex=\"0\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"dropdownId\">\n @if (zPrefix()) {\n <z-icon [zType]=\"zPrefix() || 'lucideChevronDown'\" zSize=\"16\" class=\"text-muted-foreground shrink-0\" />\n }\n\n <div\n class=\"z-select-tags-wrapper flex min-w-0 flex-1 items-center gap-1\"\n [class.flex-wrap]=\"zWrap()\"\n [class.overflow-hidden]=\"!zWrap()\">\n @if (isMultipleMode()) {\n @if (selectedOptions().length === 0) {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n } @else {\n @for (opt of displayedTags(); track opt.value) {\n <span #tagEl [class]=\"opt | zTagClasses: zSize() : isTagsMode()\" class=\"z-select-tag\">\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: opt }\" />\n } @else {\n <span\n class=\"max-w-25 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"6\"\n [zTriggerElement]=\"tagEl\">\n {{ opt.label }}\n </span>\n }\n @if (zAllowClear() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"-mr-0.5 flex size-3.5 items-center justify-center rounded-[3px] transition-colors hover:bg-black/10\"\n (click)=\"removeOption($event, opt)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"10\" />\n </button>\n }\n </span>\n }\n @if (remainingCount() > 0) {\n <span class=\"z-select-remaining text-muted-foreground bg-muted rounded px-1.5 py-0.5 text-xs font-medium\">\n +{{ remainingCount() }}\n </span>\n }\n }\n } @else {\n @if (selectedOption()) {\n @if (effectiveSelectedTemplate()) {\n <ng-container *ngTemplateOutlet=\"effectiveSelectedTemplate()!; context: { $implicit: selectedOption() }\" />\n } @else {\n <span\n class=\"truncate\"\n z-tooltip\n [zContent]=\"selectedOption()!.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"10\">\n {{ selectedOption()!.label }}\n </span>\n }\n } @else {\n <span class=\"text-muted-foreground truncate whitespace-nowrap\">\n {{ effectivePlaceholder() }}\n </span>\n }\n }\n </div>\n\n @if (zLoading() || zLoadingMore()) {\n <z-icon zType=\"lucideLoaderCircle\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n @if (!zLoading() && zAllowClear() && hasValue() && !isDisabled() && !isReadonly()) {\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-foreground flex shrink-0 items-center justify-center transition-colors\"\n (click)=\"clearAll($event)\"\n tabindex=\"-1\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n </button>\n }\n\n @if (isValidating()) {\n <z-icon zType=\"lucideLoader2\" zSize=\"14\" class=\"text-muted-foreground shrink-0 animate-spin\" />\n }\n\n <z-icon\n zType=\"lucideChevronDown\"\n zSize=\"16\"\n class=\"text-muted-foreground shrink-0 transition-transform duration-200\"\n [class.rotate-180]=\"isOpen()\" />\n </div>\n\n @if (showError()) {\n <p class=\"text-destructive animate-in fade-in slide-in-from-top-1 m-0 text-xs duration-200\">\n {{ errorMessage() }}\n </p>\n }\n</div>\n\n<ng-template #dropdownTpl let-close=\"close\">\n <div\n [id]=\"dropdownId\"\n class=\"z-select-dropdown bg-popover border-border rounded-[6px] border shadow-lg\"\n [style.width.px]=\"dropdownWidth()\">\n @if (zShowSearch()) {\n <div class=\"border-border flex items-center border-b px-3\">\n <z-icon zType=\"lucideSearch\" zSize=\"16\" class=\"text-muted-foreground/50 mr-2 shrink-0\" />\n <input\n #dropdownSearchInput\n type=\"text\"\n class=\"placeholder:text-muted-foreground text-foreground flex h-10 w-full bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50\"\n [placeholder]=\"effectivePlaceholderSearch()\"\n [ngModel]=\"searchText()\"\n (ngModelChange)=\"onSearchChange($event)\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\" />\n </div>\n }\n\n @if (zLoading()) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n <z-loading [zLoading]=\"true\" zSize=\"default\" />\n </div>\n } @else {\n @if (shouldUseVirtualScroll()) {\n <div\n #virtualScrollElement\n class=\"z-select-options z-select-virtual-scroll overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.height.px]=\"optionsMaxHeight()\">\n <div class=\"z-select-virtual-inner relative\" [style.height.px]=\"virtualizer.getTotalSize()\">\n @for (virtualItem of virtualizer.getVirtualItems(); track virtualItem.index) {\n @let opt = filteredOptions()[virtualItem.index];\n <div\n #optionEl\n class=\"z-select-option absolute right-0 left-0 min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.height.px]=\"zOptionHeight()\"\n [style.transform]=\"'translateY(' + virtualItem.start + 'px)'\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zHideDelay]=\"0\"\n [zOffset]=\"5\"\n [zArrow]=\"false\"\n [zTriggerElement]=\"optionEl\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n </div>\n @if (zLoadingMore()) {\n <div\n class=\"bg-popover/80 absolute right-0 bottom-0 left-0 flex items-center justify-center py-2\"\n [style.transform]=\"'translateY(' + virtualizer.getTotalSize() + 'px)'\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n </div>\n } @else {\n <div\n #optionsContainer\n class=\"z-select-options flex flex-col gap-0.75 overflow-x-hidden overflow-y-auto overscroll-y-contain p-1\"\n [style.maxHeight.px]=\"optionsMaxHeight()\">\n @for (opt of filteredOptions(); track opt.value) {\n <div\n #optionEl2\n class=\"z-select-option relative min-w-0\"\n [ngClass]=\"opt | zIsSelected: currentValue() : isMultipleMode() | zOptionClasses: opt.disabled\"\n [style.minHeight.px]=\"zOptionHeight()\"\n (click)=\"selectOption(opt, close)\">\n @if (effectiveOptionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"\n effectiveOptionTemplate()!;\n context: { $implicit: opt, selected: opt | zIsSelected: currentValue() : isMultipleMode() }\n \" />\n } @else {\n <span\n class=\"min-w-0 flex-1 truncate\"\n z-tooltip\n [zContent]=\"opt.label\"\n zPosition=\"top\"\n [zArrow]=\"false\"\n [zOffset]=\"5\"\n [zHideDelay]=\"0\"\n [zTriggerElement]=\"optionEl2\"\n [innerHTML]=\"opt.label | zHighlight: searchText() | zSafeHtml\"></span>\n }\n @if (opt | zIsSelected: currentValue() : isMultipleMode()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary ml-auto shrink-0\" />\n }\n </div>\n }\n @if (zEnableLoadMore()) {\n <div #loadMoreSentinel class=\"h-px w-full shrink-0\"></div>\n }\n </div>\n }\n\n @if (filteredOptions().length === 0) {\n <div class=\"flex flex-col items-center justify-center py-8\">\n @if (isEmptyData()) {\n <z-icon [zType]=\"zEmptyIcon()\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveEmptyText() }}\n </span>\n } @else {\n <z-icon zType=\"lucideSearch\" zSize=\"40\" class=\"text-muted-foreground/50 mb-2\" />\n <span class=\"text-muted-foreground text-sm\">\n {{ effectiveNotFoundText() }}\n </span>\n }\n </div>\n }\n\n @if (zLoadingMore()) {\n <div class=\"z-select-loading-more border-border/50 flex items-center justify-center border-t py-1.5\">\n <z-loading zSize=\"xs\" [zLoading]=\"true\" />\n </div>\n }\n }\n\n @if (zShowAction() && isMultipleMode()) {\n <div class=\"border-border flex items-center gap-2 border-t px-2 py-1.5\">\n @if (zActionTemplate()) {\n <ng-container *ngTemplateOutlet=\"zActionTemplate()!\" />\n } @else {\n <z-button zSize=\"xs\" zType=\"ghost-info\" class=\"flex-1\" (click)=\"selectAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideCheckCheck\" zSize=\"14\" />\n {{ effectiveSelectAllText() }}\n </z-button>\n <z-button zSize=\"xs\" zType=\"ghost-error\" class=\"flex-1\" (click)=\"removeAll()\" [zWave]=\"false\">\n <z-icon zType=\"lucideX\" zSize=\"14\" />\n {{ effectiveClearAllText() }}\n </z-button>\n }\n </div>\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shival99/z-ui",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.10",
|
|
4
4
|
"description": "Z-UI: Modern Angular UI Component Library - A comprehensive, high-performance design system built with Angular 20+, featuring 40+ customizable components with dark mode, accessibility, and enterprise-ready features.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -46,6 +46,7 @@ interface ZMenuControl {
|
|
|
46
46
|
closeMobileMenu: () => void;
|
|
47
47
|
toggleMobileMenu: () => void;
|
|
48
48
|
setSelectedMenuItem: (menuId: string) => void;
|
|
49
|
+
clearActiveItem: () => void;
|
|
49
50
|
toggleSidebar: () => void;
|
|
50
51
|
openMobileTemplateDrawer: (parentId: string) => void;
|
|
51
52
|
closeMobileTemplateDrawer: () => void;
|
|
@@ -109,6 +110,7 @@ declare class ZMenuComponent {
|
|
|
109
110
|
openMobileTemplateDrawer(parentId: string): void;
|
|
110
111
|
closeMobileTemplateDrawer(): void;
|
|
111
112
|
setSelectedMenuItem(menuId: string): void;
|
|
113
|
+
clearActiveItem(): void;
|
|
112
114
|
protected selectParent(item: ZMenuItem): void;
|
|
113
115
|
protected onDesktopParentClick(item: ZMenuItem): void;
|
|
114
116
|
protected onMenuItemClick(item: ZMenuItem): void;
|
|
@@ -218,7 +218,7 @@ declare class ZModalComponent<T, U> extends BasePortalOutlet implements OnDestro
|
|
|
218
218
|
protected readonly effectiveOkText: _angular_core.Signal<string | null | undefined>;
|
|
219
219
|
protected readonly effectiveCancelText: _angular_core.Signal<string | null | undefined>;
|
|
220
220
|
protected readonly effectiveOkDestructive: _angular_core.Signal<boolean | undefined>;
|
|
221
|
-
protected readonly effectiveTypeOk: _angular_core.Signal<"info" | "warning" | "error" | "default" | "primary" | "secondary" | "destructive" | "success" | "outline" | "outline-primary" | "outline-secondary" | "outline-success" | "outline-info" | "outline-warning" | "outline-error" | "outline-destructive" | "outline-success-secondary" | "outline-info-secondary" | "outline-warning-secondary" | "outline-error-secondary" | "outline-destructive-secondary" | "outline-primary-secondary" | "ghost" | "ghost-primary" | "ghost-success" | "ghost-info" | "ghost-warning" | "ghost-error" | "ghost-destructive" | "subtle" |
|
|
221
|
+
protected readonly effectiveTypeOk: _angular_core.Signal<"info" | "warning" | "error" | "link" | "default" | "primary" | "secondary" | "destructive" | "success" | "outline" | "outline-primary" | "outline-secondary" | "outline-success" | "outline-info" | "outline-warning" | "outline-error" | "outline-destructive" | "outline-success-secondary" | "outline-info-secondary" | "outline-warning-secondary" | "outline-error-secondary" | "outline-destructive-secondary" | "outline-primary-secondary" | "ghost" | "ghost-primary" | "ghost-success" | "ghost-info" | "ghost-warning" | "ghost-error" | "ghost-destructive" | "subtle" | null | undefined>;
|
|
222
222
|
protected readonly effectiveOkDisabled: _angular_core.Signal<boolean | undefined>;
|
|
223
223
|
protected readonly effectiveLoading: _angular_core.Signal<boolean>;
|
|
224
224
|
protected readonly effectiveContentLoading: _angular_core.Signal<boolean>;
|