@ziadshalaby/ngx-zs-component 3.0.0 → 3.0.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ziadshalaby-ngx-zs-component.mjs","sources":["../../../projects/ngx-zs-component/src/lib/ngx-zs-component.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/AlertFolder/alert-service/alert-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/z-index.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/AlertFolder/alert/alert.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/AlertFolder/alert/alert.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/NavItemFolder/nav-item-service/nav-item-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/NavItemFolder/nav-item/nav-item.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/NavItemFolder/nav-item/nav-item.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/palette-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/visibility-observer/visibility-observer-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/card/card.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/card/card.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/carousel/carousel.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/carousel/carousel.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/connection/connection.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/connection/connection.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/extractor-service/extractor-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/form-service/form-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/button/button.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/button/button.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/modal/modal.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/modal/modal.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/navbar/navbar.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/navbar/navbar.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/page404/page404.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/page404/page404.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/pagination/pagination.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/pagination/pagination.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/scroll-to-top/scroll-to-top.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/scroll-to-top/scroll-to-top.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/spinner/spinner.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/spinner/spinner.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/theme-toggle/theme-toggle.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/theme-toggle/theme-toggle.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/label/label.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/label/label.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/checkbox/checkbox.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/checkbox/checkbox.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/input-errors/input-errors.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/input-errors/input-errors.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/file/file.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/file/file.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/input/input.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/input/input.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/range/range.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/range/range.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/select/select.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/select/select.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/toggle/toggle.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/toggle/toggle.html","../../../projects/ngx-zs-component/src/public-api.ts","../../../projects/ngx-zs-component/src/ziadshalaby-ngx-zs-component.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ngx-zs-component',\n imports: [],\n template: `\n <p>\n ngx-zs-component works!\n </p>\n `,\n styles: ``,\n})\nexport class NgxZsComponent {\n\n}\n","// ==============================================\n// Types\n// ==============================================\n\nimport { Injectable, signal } from '@angular/core';\nimport { AlertType } from '../alert/alert';\n\nexport interface NewAlert extends Omit<AlertType, 'id' | 'progress'> {}\nexport interface BulkAlert extends Omit<AlertType, 'id' | 'progress' | 'message'> {}\n\n// ==============================================\n// Service\n// ==============================================\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AlertService {\n\n // ==============================================\n // State\n // ==============================================\n\n readonly alerts = signal<AlertType[]>([]);\n\n // ==============================================\n // Public Methods\n // ==============================================\n\n addAlert(newAlert: NewAlert): void {\n const newAlertToAdd: AlertType = {\n ...newAlert,\n id: crypto.randomUUID(),\n };\n\n this.alerts.update((alerts: AlertType[]) => [...alerts, newAlertToAdd]);\n }\n\n bulkAlert(newAlerts: string[], options: BulkAlert): void {\n const alertsToAdd: AlertType[] = newAlerts.map((message) => ({\n ...options,\n message,\n id: crypto.randomUUID(),\n }));\n\n this.alerts.update((alerts: AlertType[]) => [...alerts, ...alertsToAdd]);\n }\n\n onAlertClosed(id: string | number): void {\n this.alerts.update((alerts: AlertType[]) => {\n return alerts.filter(a => a.id !== id);\n });\n }\n}","export type KeyType = \n| 'alert'\n| 'spinner'\n| 'modal'\n| 'themeToggle'\n| 'navbar'\n| 'scrollToTop'\n| 'navItemDropdown'\n| 'selectDropdown'\n\nexport type ZIndicesType = Record<KeyType, `zs:z-${number}`>\n\nexport const zIndices: ZIndicesType = {\n alert: 'zs:z-1600',\n spinner: 'zs:z-1400',\n modal: 'zs:z-1200',\n themeToggle: 'zs:z-1000',\n navbar: 'zs:z-800',\n scrollToTop: 'zs:z-600',\n navItemDropdown: 'zs:z-200',\n selectDropdown: 'zs:z-200'\n};\n\n","// ==============================================\n// Types\n// ==============================================\n\nimport { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n effect,\n inject,\n input,\n signal\n} from '@angular/core';\nimport { AlertService } from '../alert-service/alert-service';\nimport { zIndices, ZIndicesType } from '../../z-index';\n\nexport interface AlertType {\n id: number | string;\n message: string;\n type: 'success' | 'danger' | 'warning' | 'info';\n autoClose?: boolean;\n duration?: number;\n showCloseButton?: boolean;\n progress?: number;\n}\n\nexport interface AlertFullType extends AlertType {\n icon: string;\n bgColor: string;\n textColor: string;\n borderColor: string;\n}\n\nexport type OldAlertsType = Set<number | string>;\n\nexport const ALERT_CONFIG: Record<\n AlertType['type'],\n Omit<AlertFullType, keyof AlertType>\n> = {\n success: {\n icon: 'fas fa-check-circle',\n bgColor: 'zs:bg-green-100 zs:dark:bg-green-800',\n textColor: 'zs:text-green-800 zs:dark:text-green-100',\n borderColor: 'zs:border-green-500 zs:dark:border-green-300'\n },\n danger: {\n icon: 'fas fa-exclamation-circle',\n bgColor: 'zs:bg-red-100 zs:dark:bg-red-800',\n textColor: 'zs:text-red-800 zs:dark:text-red-100',\n borderColor: 'zs:border-red-500 zs:dark:border-red-300'\n },\n warning: {\n icon: 'fas fa-exclamation-triangle',\n bgColor: 'zs:bg-yellow-100 zs:dark:bg-yellow-800',\n textColor: 'zs:text-yellow-800 zs:dark:text-yellow-100',\n borderColor: 'zs:border-yellow-500 zs:dark:border-yellow-300'\n },\n info: {\n icon: 'fas fa-info-circle',\n bgColor: 'zs:bg-blue-100 zs:dark:bg-blue-800',\n textColor: 'zs:text-blue-800 zs:dark:text-blue-100',\n borderColor: 'zs:border-blue-500 zs:dark:border-blue-300'\n }\n};\n\nexport type PositionClassType = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\nconst PositionClasses: Record<PositionClassType, string> = {\n 'top-left': 'zs:top-4 zs:left-4',\n 'top-right': 'zs:top-4 zs:right-4',\n 'bottom-left': 'zs:bottom-4 zs:left-4',\n 'bottom-right': 'zs:bottom-4 zs:right-4',\n}\n\n// ==============================================\n// Component Decorator\n// ==============================================\n\n@Component({\n selector: 'ZS-alert',\n imports: [CommonModule],\n templateUrl: './alert.html',\n styleUrl: './alert.css'\n})\nexport class Alert {\n \n // ==============================================\n // Dependencies\n // ==============================================\n readonly zIndices: ZIndicesType = zIndices;\n readonly alertService: AlertService = inject(AlertService);\n\n // ==============================================\n // Inputs\n // ==============================================\n\n readonly positionClass = input<PositionClassType>('top-right');\n readonly defaultShowCloseButton = input<boolean>(true);\n readonly defaultAutoClose = input<boolean>(true);\n readonly defaultDuration = input<number>(5000);\n\n // ==============================================\n // Signals & Computed Properties\n // ==============================================\n\n private readonly oldAlerts = signal<OldAlertsType>(new Set());\n\n private readonly direction = computed<'top' | 'bottom'>(() => \n this.positionClass().startsWith('top') ? 'top' : 'bottom'\n );\n\n readonly positionClasses = computed<string>(() => \n PositionClasses[this.positionClass()]\n );\n\n readonly alerts = computed<AlertType[]>(() => {\n const list = this.alertService.alerts();\n return this.direction() === 'bottom' ? [...list].reverse() : list;\n });\n\n readonly alertConfig: ReturnType<typeof computed<AlertFullType[]>> =\n computed((): AlertFullType[] => {\n return this.alerts().map((alert: AlertType) => {\n const config = ALERT_CONFIG[alert.type] ?? ALERT_CONFIG.info;\n return { ...alert, ...config };\n });\n });\n\n // ==============================================\n // Private Properties\n // ==============================================\n\n private activeIntervals = new Map<string | number, number>();\n\n // ==============================================\n // Lifecycle & Effects\n // ==============================================\n\n constructor() {\n effect(() => {\n const alerts = this.alerts();\n const oldIds = this.oldAlerts();\n\n // استخرج التنبيهات الجديدة فقط\n const newOnes = alerts.filter(a => !oldIds.has(a.id));\n\n // سجّل كل تنبيه جديد\n for (const alert of newOnes) {\n this.registerAlert(alert);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.activeIntervals.forEach(clearInterval);\n this.activeIntervals.clear();\n }\n\n // ==============================================\n // Private Methods\n // ==============================================\n\n private registerAlert(alert: AlertType): void {\n // Mark alert as processed\n const updatedSet = new Set(this.oldAlerts());\n updatedSet.add(alert.id);\n this.oldAlerts.set(updatedSet);\n\n const autoClose = alert.autoClose ?? this.defaultAutoClose();\n const duration = alert.duration ?? this.defaultDuration();\n\n if (autoClose) {\n let progress = 100;\n const step = 100 / (duration / 100);\n\n const interval = window.setInterval(() => {\n progress = Math.max(0, progress - step);\n\n this.alertService.alerts.update((all: AlertType[]) =>\n all.map((a: AlertType) =>\n a.id === alert.id ? { ...a, progress } as AlertType : a\n )\n );\n\n if (progress <= 0) {\n this.closeAlert(alert.id);\n }\n }, 100);\n\n this.activeIntervals.set(alert.id, interval);\n }\n }\n\n // ==============================================\n // Public Methods\n // ==============================================\n\n closeAlert(id: string | number): void {\n // Clear active interval if exists\n const interval = this.activeIntervals.get(id);\n if (interval) {\n clearInterval(interval);\n this.activeIntervals.delete(id);\n }\n\n // Remove from processed alerts\n const updatedSet = new Set(this.oldAlerts());\n updatedSet.delete(id);\n this.oldAlerts.set(updatedSet);\n\n // Remove from service\n this.alertService.onAlertClosed(id);\n }\n}","<!-- ========================= Alert Container ========================= -->\n<div\n class=\"zs:fixed zs:ml-4 zs:break-all {{ zIndices.alert }} zs:flex zs:flex-col \n zs:overflow-y-auto custom-scrollbar zs:p-2 zs:gap-3 zs:max-h-[calc(100vh-1rem)]\"\n [ngClass]=\"positionClasses()\"\n role=\"region\"\n aria-label=\"Notification area\"\n aria-live=\"polite\"\n>\n\n @for (alert of alertConfig(); track alert.id) {\n\n <!-- ========================= Alert Card ========================= -->\n <div\n class=\"zs:pointer-events-auto zs:max-w-sm zs:min-h-14 zs:rounded-lg zs:border zs:p-4 zs:shadow-md zs:dark:shadow-gray-400/30\n zs:transition-all zs:duration-300 zs:ease-in-out animate-fade-in zs:relative zs:overflow-hidden\"\n [class]=\"alert.bgColor + ' ' + alert.textColor + ' ' + alert.borderColor\"\n role=\"alert\"\n >\n\n <!-- ========================= Alert Content ========================= -->\n <div class=\"zs:flex zs:items-center\">\n\n <!-- Icon -->\n <i\n [class]=\"alert.icon + ' zs:mt-0.5 zs:me-3'\"\n aria-hidden=\"true\"\n ></i>\n\n <!-- Message -->\n <div class=\"zs:flex-1 zs:text-sm zs:font-medium\">\n {{ alert.message }}\n </div>\n\n <!-- Close Button -->\n @if (alert.showCloseButton ?? defaultShowCloseButton()) {\n <button\n type=\"button\"\n class=\"zs:ms-2 zs:inline-flex zs:h-6 zs:w-6 zs:items-center zs:justify-center zs:rounded-full\n zs:text-gray-500 zs:dark:text-gray-300\n zs:hover:bg-gray-200 zs:dark:hover:bg-gray-700\n zs:hover:text-gray-700 zs:dark:hover:text-gray-100\n zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-within:ring-indigo-500\"\n (click)=\"closeAlert(alert.id!)\"\n aria-label=\"Close alert\"\n >\n <i class=\"fas fa-times zs:text-xs\" aria-hidden=\"true\"></i>\n </button>\n }\n\n </div>\n\n <!-- ========================= Auto-Close Progress Bar ========================= -->\n @if (alert.autoClose ?? defaultAutoClose()) {\n <div\n class=\"zs:absolute zs:bottom-0 zs:left-0 zs:h-1 zs:bg-gray-300 zs:dark:bg-gray-700 zs:w-full\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"alert.progress ?? 100\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <div\n class=\"zs:h-1 zs:bg-current zs:transition-[width] zs:duration-100\"\n [style.width.%]=\"alert.progress ?? 100\"\n ></div>\n </div>\n }\n\n </div>\n\n }\n\n</div>","// ==============================================\n// Types\n// ==============================================\n\ninterface CollectionEntry {\n openIndex: string;\n indexes: string[];\n}\n\n// ==============================================\n// Imports\n// ==============================================\n\nimport { Injectable, signal } from '@angular/core';\n\n// ==============================================\n// Injectable Metadata\n// ==============================================\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NavItemService {\n\n // ==============================================\n // State\n // ==============================================\n\n /**\n * Map of collections, where each collection tracks:\n * - openIndex: the currently open item's unique index\n * - indexes: list of all registered item indexes in this collection\n */\n readonly collections = signal<Map<string, CollectionEntry>>(new Map());\n\n // ==============================================\n // Public Read API\n // ==============================================\n\n openIndex(collectionName: string): string {\n const entry = this.collections().get(collectionName);\n return entry ? entry.openIndex : '';\n }\n\n // ==============================================\n // Public Write API\n // ==============================================\n\n addItemInCollection(collectionName: string, index: string): void {\n this.collections.update((prev) => {\n const updated = new Map(prev);\n const entry = updated.get(collectionName);\n\n if (entry) {\n updated.set(collectionName, {\n ...entry,\n indexes: [...entry.indexes, index]\n });\n } else {\n updated.set(collectionName, {\n openIndex: '',\n indexes: [index]\n });\n }\n\n return updated;\n });\n }\n\n onOpenIndexChange(collectionName: string, index: string): void {\n this.collections.update((prev) => {\n const updated = new Map(prev);\n const entry = updated.get(collectionName);\n\n if (entry) {\n updated.set(collectionName, {\n ...entry,\n openIndex: index\n });\n } else {\n updated.set(collectionName, {\n openIndex: index,\n indexes: []\n });\n }\n\n return updated;\n });\n }\n}","// ==============================================\n// Types\n// ==============================================\n\nexport interface NavbarItem {\n label: string;\n\n routerLink?: string;\n routerLinkActive?: string;\n\n action?: () => void;\n\n children?: NavbarItem[];\n childrenOpenWindow?: boolean;\n closeMenuAfterClick?: boolean\n\n icon?: string;\n iconClass?: string;\n\n colorClass?: string;\n useDefaultColorClass?: 'text' | 'bg';\n}\n\n// ==============================================\n// Imports\n// ==============================================\n\nimport { Component, computed, effect, inject, input, output, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { NavItemService } from '../nav-item-service/nav-item-service';\nimport { zIndices, ZIndicesType } from '../../z-index';\n\n// ==============================================\n// Component Metadata\n// ==============================================\n\n@Component({\n selector: 'ZS-nav-item',\n imports: [CommonModule, RouterModule],\n templateUrl: './nav-item.html',\n styleUrl: './nav-item.css'\n})\nexport class NavItem {\n readonly zIndices: ZIndicesType = zIndices;\n\n // ==============================================\n // Injection & Services\n // ==============================================\n private readonly znavItemService = inject(NavItemService);\n\n // ==============================================\n // Inputs & Outputs\n // ==============================================\n\n readonly item = input.required<NavbarItem>();\n readonly collectionName = input.required<string>();\n readonly anyItemClickedEv = output<NavbarItem>();\n\n // ==============================================\n // Signals & Computed Properties\n // ==============================================\n\n readonly index = signal<string>(crypto.randomUUID());\n\n readonly isOpen = computed<boolean>(() =>\n this.znavItemService.openIndex(this.collectionName()) === this.index()\n );\n\n // ==============================================\n // Lifecycle & Effects\n // ==============================================\n\n constructor() {\n effect(() => {\n const collection = this.collectionName();\n if (collection) {\n this.znavItemService.addItemInCollection(collection, this.index());\n }\n });\n }\n\n // ==============================================\n // Event Handlers\n // ==============================================\n\n toggle(): void {\n const currentOpen = this.znavItemService.openIndex(this.collectionName());\n const myIndex = this.index();\n\n if (currentOpen === myIndex) {\n this.znavItemService.onOpenIndexChange(this.collectionName(), '');\n } else {\n this.znavItemService.onOpenIndexChange(this.collectionName(), myIndex);\n }\n }\n\n onItemClick(): void {\n const item = this.item();\n\n item.action?.();\n if(this.item().closeMenuAfterClick){\n this.toggle()\n }\n\n this.anyItemClickedEv.emit(this.item());\n }\n\n handleChildClick(child: NavbarItem) {\n // أعد إرسال الحدث لأعلى (لو فيه levels أكثر)\n this.anyItemClickedEv.emit(child);\n\n // إن كان الطفل يريد غلق القائمة، أغلق نفسي\n if (child.closeMenuAfterClick) {\n this.toggle();\n }\n }\n\n // ==============================================\n // Helper Methods\n // ==============================================\n\n getItemClasses = (item: NavbarItem): string => {\n const defaultTextClass =\n 'zs:text-gray-600 zs:dark:text-gray-300 zs:hover:text-gray-900 zs:dark:hover:text-gray-100';\n const defaultBgClass =\n 'zs:hover:bg-gray-100 zs:dark:hover:bg-gray-700';\n\n if (item.colorClass) {\n return item.colorClass;\n }\n\n return item.useDefaultColorClass === 'bg'\n ? defaultBgClass\n : defaultTextClass;\n };\n\n labelLineClass(item: NavbarItem) {\n return item.label.length > 60 ? 'zs:text-xs' \n : item.label.length > 40 ? 'zs:text-sm' \n : ''\n }\n}","<!-- ========================= Conditional Rendering ========================= -->\n@if (item()) {\n @if (item().children?.length) {\n\n <!-- ========================= Parent Item with Dropdown ========================= -->\n <div class=\"zs:relative zs:w-full\">\n\n <!-- ========================= Main Toggle Button ========================= -->\n <button\n type=\"button\"\n (click)=\"toggle()\"\n [ngClass]=\"getItemClasses(item())\"\n class=\"zs:flex zs:w-full zs:items-center zs:gap-2 zs:rounded-md zs:px-3 zs:py-2 zs:text-left \n zs:text-sm zs:font-medium zs:md:text-base\"\n aria-haspopup=\"true\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"'submenu-' + index()\"\n >\n <div class=\"zs:flex zs:items-center\">\n @if (item().icon) {\n <i [ngClass]=\"[\n item().icon, \n item().iconClass ?? '',\n (item().icon && item().label) ? 'zs:mr-2' : ''\n ]\" aria-hidden=\"true\"></i>\n }\n <span class=\"zs:wrap-break-word\" [ngClass]=\"labelLineClass(item())\">{{ item().label }}</span>\n </div>\n <i class=\"fas fa-chevron-down zs:ml-auto zs:p-0.5 zs:text-xs\" aria-hidden=\"true\"></i>\n </button>\n\n <!-- ========================= Dropdown Menu ========================= -->\n <div\n [id]=\"'submenu-' + index()\"\n [ngClass]=\"{\n 'zs:block': isOpen(),\n 'zs:hidden': !isOpen(),\n 'zs:absolute zs:left-6 zs:w-50 zs:mt-1 zs:py-1 zs:bg-white zs:dark:bg-gray-800 \n zs:rounded-md shadow-md-all shadow-md-all-night': item().childrenOpenWindow,\n 'zs:px-4 zs:mt-1': !item().childrenOpenWindow\n }\"\n class=\"{{ zIndices.navItemDropdown }}\"\n role=\"menu\"\n [attr.aria-label]=\"item().label + ' submenu'\"\n >\n @for (child of item().children; track $index) {\n <ZS-nav-item\n [item]=\"child\"\n [collectionName]=\"collectionName() + '-' + index()\"\n (anyItemClickedEv)=\"handleChildClick($event)\"\n role=\"menuitem\"\n ></ZS-nav-item>\n }\n </div>\n\n </div>\n\n } @else {\n\n <!-- ========================= Leaf Item (No Children) ========================= -->\n <a\n [routerLink]=\"item().routerLink\"\n [routerLinkActive]=\"item().routerLinkActive ?? ''\"\n #rla=\"routerLinkActive\"\n [ngClass]=\"rla.isActive ? '' : getItemClasses(item())\"\n class=\"zs:flex zs:items-center zs:rounded-md zs:px-3 zs:py-2 \n zs:text-sm zs:font-medium zs:md:text-base\"\n (click)=\"onItemClick()\"\n role=\"menuitem\"\n >\n @if (item().icon) {\n <i [ngClass]=\"[\n item().icon,\n rla.isActive ? '' : item().iconClass ?? '',\n (item().icon && item().label) ? 'zs:mr-2' : ''\n ]\"\n aria-hidden=\"true\"></i>\n }\n <span class=\"zs:wrap-break-word zs:line-clamp-3\" [ngClass]=\"labelLineClass(item())\">{{ item().label }}</span>\n </a>\n }\n}","export type BaseSize = 'sm' | 'md' | 'lg';\n\nexport type FormStyle =\n | 'primary'\n | 'secondary'\n | 'warning'\n | 'success'\n | 'danger'\n | 'dark'\n | 'info'\n | 'violet'\n | 'teal';\n\n// Unified palette map with all configurations\nexport const unifiedPaletteMap = new Map<FormStyle, {\n // Input palette\n input: {\n border: string;\n borderHover: string;\n inputBg: string;\n text: string;\n };\n // Ring palette\n ring: {\n ring: string;\n };\n // Solid Button palette\n buttonSolid: {\n btnBG: string;\n btnBGHover: string;\n };\n // Outline Button palette\n buttonOutline: {\n border: string;\n btnBGHover: string;\n text: string;\n };\n // Select palette\n select: {\n bgSelect: string;\n cleartext: string;\n cleartexthover: string;\n };\n // Checkbox / Radio Palette\n checkbox: {\n checkBoxText: string;\n checkBoxTextHover: string;\n };\n // Card Palette\n card: {\n border: string;\n borderHover: string;\n };\n // Modal Palette\n modal: {\n border: string;\n text: string;\n };\n // Page404 palette\n page404: {\n btnBG: string;\n btnBGHover: string;\n iconText: string;\n };\n}>([\n [\n 'secondary',\n {\n input: {\n border: 'zs:border-slate-300 zs:dark:border-slate-600',\n borderHover: 'zs:hover:border-slate-500 zs:dark:hover:border-slate-400',\n inputBg: 'zs:bg-slate-50 zs:dark:bg-slate-900',\n text: 'zs:text-slate-800 zs:dark:text-slate-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-slate-400 zs:dark:focus-within:ring-slate-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-slate-500 zs:dark:bg-slate-700',\n btnBGHover: 'zs:hover:bg-slate-600',\n },\n buttonOutline: {\n border: 'zs:border-slate-500 zs:dark:border-slate-500',\n btnBGHover: 'zs:hover:bg-slate-600 zs:dark:hover:bg-slate-600',\n text: 'zs:text-slate-500 zs:dark:text-slate-500'\n },\n select: {\n bgSelect: 'zs:bg-slate-200 zs:dark:bg-slate-800',\n cleartext: 'zs:text-slate-700 zs:dark:text-slate-500',\n cleartexthover: 'zs:hover:text-slate-500 zs:dark:hover:text-slate-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-slate-500 zs:dark:text-slate-700',\n checkBoxTextHover: 'zs:hover:text-slate-600',\n },\n card: {\n border: 'zs:border-slate-300 zs:dark:border-slate-700',\n borderHover: 'zs:hover:border-slate-600 zs:dark:hover:border-slate-500',\n },\n modal: {\n border: 'zs:border-slate-300 zs:dark:border-slate-600',\n text: 'zs:text-slate-800 zs:dark:text-slate-300',\n },\n page404: {\n btnBG: 'zs:bg-slate-500 zs:dark:bg-slate-700',\n btnBGHover: 'zs:hover:bg-slate-600',\n iconText: 'zs:text-slate-500 zs:dark:text-slate-700',\n },\n },\n ],\n [\n 'primary',\n {\n input: {\n border: 'zs:border-blue-200 zs:dark:border-blue-700',\n borderHover: 'zs:hover:border-blue-400 zs:dark:hover:border-blue-500',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-blue-900 zs:dark:text-blue-100',\n },\n ring: {\n ring: 'zs:focus-within:ring-blue-400 zs:dark:focus-within:ring-blue-500',\n },\n buttonSolid: {\n btnBG: 'zs:bg-blue-500 zs:dark:bg-blue-700',\n btnBGHover: 'zs:hover:bg-blue-600',\n },\n buttonOutline: {\n border: 'zs:border-blue-500 zs:dark:border-blue-600',\n btnBGHover: 'zs:hover:bg-blue-600',\n text: 'zs:text-blue-500 zs:dark:text-blue-500'\n },\n select: {\n bgSelect: 'zs:bg-blue-200 zs:dark:bg-blue-800',\n cleartext: 'zs:text-blue-800 zs:dark:text-blue-500',\n cleartexthover: 'zs:hover:text-blue-600 zs:dark:hover:text-blue-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-blue-500 zs:dark:text-blue-700',\n checkBoxTextHover: 'zs:hover:text-blue-600',\n },\n card: {\n border: 'zs:border-blue-300 zs:dark:border-blue-700',\n borderHover: 'zs:hover:border-blue-600 zs:dark:hover:border-blue-500',\n },\n modal: {\n border: 'zs:border-blue-200 zs:dark:border-blue-700',\n text: 'zs:text-blue-900 zs:dark:text-blue-100',\n },\n page404: {\n btnBG: 'zs:bg-blue-500 zs:dark:bg-blue-700',\n btnBGHover: 'zs:hover:bg-blue-600',\n iconText: 'zs:text-blue-500 zs:dark:text-blue-700',\n },\n },\n ],\n [\n 'success',\n {\n input: {\n border: 'zs:border-green-300 zs:dark:border-green-600',\n borderHover: 'zs:hover:border-green-500 zs:dark:hover:border-green-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-green-800 zs:dark:text-green-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-green-400 zs:dark:focus-within:ring-green-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-green-500 zs:dark:bg-green-700',\n btnBGHover: 'zs:hover:bg-green-600',\n },\n buttonOutline: {\n border: 'zs:border-green-500 zs:dark:border-green-600',\n btnBGHover: 'zs:hover:bg-green-600',\n text: 'zs:text-green-500 zs:dark:text-green-600'\n },\n select: {\n bgSelect: 'zs:bg-green-200 zs:dark:bg-green-800',\n cleartext: 'zs:text-green-800 zs:dark:text-green-500',\n cleartexthover: 'zs:hover:text-green-600 zs:dark:hover:text-green-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-green-500 zs:dark:text-green-700',\n checkBoxTextHover: 'zs:hover:text-green-600',\n },\n card: {\n border: 'zs:border-green-300 zs:dark:border-green-700',\n borderHover: 'zs:hover:border-green-600 zs:dark:hover:border-green-500',\n },\n modal: {\n border: 'zs:border-green-300 zs:dark:border-green-600',\n text: 'zs:text-green-800 zs:dark:text-green-300',\n },\n page404: {\n btnBG: 'zs:bg-green-500 zs:dark:bg-green-700',\n btnBGHover: 'zs:hover:bg-green-600',\n iconText: 'zs:text-green-500 zs:dark:text-green-700',\n },\n },\n ],\n [\n 'danger',\n {\n input: {\n border: 'zs:border-red-300 zs:dark:border-red-600',\n borderHover: 'zs:hover:border-red-500 zs:dark:hover:border-red-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-red-800 zs:dark:text-red-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-red-400 zs:dark:focus-within:ring-red-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-red-500 zs:dark:bg-red-700',\n btnBGHover: 'zs:hover:bg-red-600',\n },\n buttonOutline: {\n border: 'zs:border-red-500 zs:dark:border-red-600',\n btnBGHover: 'zs:hover:bg-red-600',\n text: 'zs:text-red-500 zs:dark:text-red-600'\n },\n select: {\n bgSelect: 'zs:bg-red-200 zs:dark:bg-red-800',\n cleartext: 'zs:text-red-800 zs:dark:text-red-500',\n cleartexthover: 'zs:hover:text-red-600 zs:dark:hover:text-red-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-red-500 zs:dark:text-red-700',\n checkBoxTextHover: 'zs:hover:text-red-600',\n },\n card: {\n border: 'zs:border-red-300 zs:dark:border-red-700',\n borderHover: 'zs:hover:border-red-600 zs:dark:hover:border-red-500',\n },\n modal: {\n border: 'zs:border-red-300 zs:dark:border-red-600',\n text: 'zs:text-red-800 zs:dark:text-red-300',\n },\n page404: {\n btnBG: 'zs:bg-red-500 zs:dark:bg-red-700',\n btnBGHover: 'zs:hover:bg-red-600',\n iconText: 'zs:text-red-500 zs:dark:text-red-700',\n },\n },\n ],\n [\n 'warning',\n {\n input: {\n border: 'zs:border-yellow-300 zs:dark:border-yellow-600',\n borderHover: 'zs:hover:border-yellow-500 zs:dark:hover:border-yellow-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-amber-800 zs:dark:text-amber-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-yellow-400 zs:dark:focus-within:ring-yellow-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-amber-500 zs:dark:bg-amber-700',\n btnBGHover: 'zs:hover:bg-amber-600',\n },\n buttonOutline: {\n border: 'zs:border-amber-500 zs:dark:border-amber-600',\n btnBGHover: 'zs:hover:bg-amber-600',\n text: 'zs:text-amber-500 zs:dark:text-amber-600'\n },\n select: {\n bgSelect: 'zs:bg-amber-200 zs:dark:bg-amber-800',\n cleartext: 'zs:text-amber-800 zs:dark:text-amber-500',\n cleartexthover: 'zs:hover:text-amber-600 zs:dark:hover:text-amber-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-amber-500 zs:dark:text-amber-700',\n checkBoxTextHover: 'zs:hover:text-amber-600',\n },\n card: {\n border: 'zs:border-yellow-300 zs:dark:border-yellow-700',\n borderHover: 'zs:hover:border-yellow-600 zs:dark:hover:border-yellow-500',\n },\n modal: {\n border: 'zs:border-yellow-300 zs:dark:border-yellow-600',\n text: 'zs:text-amber-800 zs:dark:text-amber-300',\n },\n page404: {\n btnBG: 'zs:bg-amber-500 zs:dark:bg-amber-700',\n btnBGHover: 'zs:hover:bg-amber-600',\n iconText: 'zs:text-amber-500 zs:dark:text-amber-700',\n },\n },\n ],\n [\n 'info',\n {\n input: {\n border: 'zs:border-cyan-300 zs:dark:border-cyan-600',\n borderHover: 'zs:hover:border-cyan-500 zs:dark:hover:border-cyan-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-cyan-800 zs:dark:text-cyan-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-cyan-400 zs:dark:focus-within:ring-cyan-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-cyan-500 zs:dark:bg-cyan-700',\n btnBGHover: 'zs:hover:bg-cyan-600',\n },\n buttonOutline: {\n border: 'zs:border-cyan-500 zs:dark:border-cyan-600',\n btnBGHover: 'zs:hover:bg-cyan-600',\n text: 'zs:text-cyan-500 zs:dark:text-cyan-600'\n },\n select: {\n bgSelect: 'zs:bg-cyan-200 zs:dark:bg-cyan-800',\n cleartext: 'zs:text-cyan-800 zs:dark:text-cyan-500',\n cleartexthover: 'zs:hover:text-cyan-600 zs:dark:hover:text-cyan-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-cyan-500 zs:dark:text-cyan-700',\n checkBoxTextHover: 'zs:hover:text-cyan-600',\n },\n card: {\n border: 'zs:border-cyan-300 zs:dark:border-cyan-700',\n borderHover: 'zs:hover:border-cyan-600 zs:dark:hover:border-cyan-500',\n },\n modal: {\n border: 'zs:border-cyan-300 zs:dark:border-cyan-600',\n text: 'zs:text-cyan-800 zs:dark:text-cyan-300',\n },\n page404: {\n btnBG: 'zs:bg-cyan-500 zs:dark:bg-cyan-700',\n btnBGHover: 'zs:hover:bg-cyan-600',\n iconText: 'zs:text-cyan-500 zs:dark:text-cyan-700',\n },\n },\n ],\n [\n 'dark',\n {\n input: {\n border: 'zs:border-slate-900 zs:dark:border-slate-700',\n borderHover: 'zs:hover:border-gray-500 zs:dark:hover:border-slate-500',\n inputBg: 'zs:bg-slate-300 zs:dark:bg-slate-900',\n text: 'zs:text-slate-900 zs:dark:text-slate-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-slate-700 zs:dark:focus-within:ring-slate-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-slate-900 zs:dark:bg-slate-700',\n btnBGHover: 'zs:hover:bg-slate-800 zs:dark:hover:bg-slate-700/70',\n },\n buttonOutline: {\n border: 'zs:border-slate-900 zs:dark:border-slate-500',\n btnBGHover: 'zs:hover:bg-slate-800 zs:dark:hover:bg-slate-700/70',\n text: 'zs:text-slate-900 zs:dark:text-slate-500'\n },\n select: {\n bgSelect: 'zs:bg-slate-400 zs:dark:bg-slate-800',\n cleartext: 'zs:text-slate-700 zs:dark:text-slate-500',\n cleartexthover: 'zs:hover:text-slate-900 zs:dark:hover:text-slate-700',\n },\n checkbox: {\n checkBoxText: 'zs:text-slate-900 zs:dark:text-slate-700',\n checkBoxTextHover: 'zs:hover:text-slate-700/70',\n },\n card: {\n border: 'zs:border-slate-900 zs:dark:border-slate-700',\n borderHover: 'zs:hover:border-gray-600 zs:dark:hover:border-slate-500',\n },\n modal: {\n border: 'zs:border-slate-900 zs:dark:border-slate-700',\n text: 'zs:text-slate-900 zs:dark:text-slate-300',\n },\n page404: {\n btnBG: 'zs:bg-slate-900 zs:dark:bg-slate-700',\n btnBGHover: 'zs:hover:bg-slate-800 zs:dark:hover:bg-slate-700/70',\n iconText: 'zs:text-slate-900 zs:dark:text-slate-700',\n },\n },\n ],\n [\n 'violet',\n {\n input: {\n border: 'zs:border-violet-300 zs:dark:border-violet-600',\n borderHover: 'zs:hover:border-violet-500 zs:dark:hover:border-violet-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-violet-800 zs:dark:text-violet-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-violet-400 zs:dark:focus-within:ring-violet-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-violet-500 zs:dark:bg-violet-700',\n btnBGHover: 'zs:hover:bg-violet-600',\n },\n buttonOutline: {\n border: 'zs:border-violet-500 zs:dark:border-violet-600',\n btnBGHover: 'zs:hover:bg-violet-600',\n text: 'zs:text-violet-500 zs:dark:text-violet-600'\n },\n select: {\n bgSelect: 'zs:bg-violet-200 zs:dark:bg-violet-800',\n cleartext: 'zs:text-violet-800 zs:dark:text-violet-500',\n cleartexthover: 'zs:hover:text-violet-600 zs:dark:hover:text-violet-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-violet-500 zs:dark:text-violet-700',\n checkBoxTextHover: 'zs:hover:text-violet-600',\n },\n card: {\n border: 'zs:border-violet-300 zs:dark:border-violet-700',\n borderHover: 'zs:hover:border-violet-600 zs:dark:hover:border-violet-500',\n },\n modal: {\n border: 'zs:border-violet-300 zs:dark:border-violet-600',\n text: 'zs:text-violet-800 zs:dark:text-violet-300',\n },\n page404: {\n btnBG: 'zs:bg-violet-500 zs:dark:bg-violet-700',\n btnBGHover: 'zs:hover:bg-violet-600',\n iconText: 'zs:text-violet-500 zs:dark:text-violet-700',\n },\n },\n ],\n [\n 'teal',\n {\n input: {\n border: 'zs:border-teal-300 zs:dark:border-teal-600',\n borderHover: 'zs:hover:border-teal-500 zs:dark:hover:border-teal-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-teal-800 zs:dark:text-teal-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-teal-400 zs:dark:focus-within:ring-teal-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-teal-500 zs:dark:bg-teal-700',\n btnBGHover: 'zs:hover:bg-teal-600',\n },\n buttonOutline: {\n border: 'zs:border-teal-500 zs:dark:border-teal-600',\n btnBGHover: 'zs:hover:bg-teal-600',\n text: 'zs:text-teal-500 zs:dark:text-teal-600'\n },\n select: {\n bgSelect: 'zs:bg-teal-200 zs:dark:bg-teal-800',\n cleartext: 'zs:text-teal-800 zs:dark:text-teal-500',\n cleartexthover: 'zs:hover:text-teal-600 zs:dark:hover:text-teal-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-teal-500 zs:dark:text-teal-700',\n checkBoxTextHover: 'zs:hover:text-teal-600',\n },\n card: {\n border: 'zs:border-teal-300 zs:dark:border-teal-700',\n borderHover: 'zs:hover:border-teal-600 zs:dark:hover:border-teal-500',\n },\n modal: {\n border: 'zs:border-teal-300 zs:dark:border-teal-600',\n text: 'zs:text-teal-800 zs:dark:text-teal-300',\n },\n page404: {\n btnBG: 'zs:bg-teal-500 zs:dark:bg-teal-700',\n btnBGHover: 'zs:hover:bg-teal-600',\n iconText: 'zs:text-teal-500 zs:dark:text-teal-700',\n },\n },\n ],\n]);\n\n// Helper functions for backward compatibility\nexport const inputPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.input]));\nexport const ringPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.ring]));\nexport const buttonSolidPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.buttonSolid]));\nexport const buttonOutlinePaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.buttonOutline]));\nexport const selectPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.select]));\nexport const checkboxTextPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.checkbox]));\nexport const cardPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.card]));\nexport const modalPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.modal]));\nexport const page404PaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.page404]));\n\n// ==================================================================================\n// ==================================================================================\n\nexport type BaseColors =\n | 'slate' | 'gray' | 'zinc' | 'neutral' | 'stone'\n | 'red' | 'orange' | 'amber' | 'yellow' | 'rose'\n | 'lime' | 'green' | 'emerald' | 'teal'\n | 'cyan' | 'sky' | 'blue' | 'indigo'\n | 'violet'| 'purple' | 'fuchsia' | 'pink';\n\nexport type BaseColorPrefixes = 'text' | 'bg' | 'border';\n\nexport const ColorMapping: Map<BaseColors, Record<BaseColorPrefixes, string>> = new Map([\n ['slate', { text: 'zs:text-slate-600 zs:dark:text-slate-400', bg: 'zs:bg-slate-600 zs:dark:bg-slate-400', border: 'zs:border-slate-600 zs:dark:border-slate-400' }],\n ['gray', { text: 'zs:text-gray-600 zs:dark:text-gray-400', bg: 'zs:bg-gray-600 zs:dark:bg-gray-400', border: 'zs:border-gray-600 zs:dark:border-gray-400' }],\n ['zinc', { text: 'zs:text-zinc-600 zs:dark:text-zinc-400', bg: 'zs:bg-zinc-600 zs:dark:bg-zinc-400', border: 'zs:border-zinc-600 zs:dark:border-zinc-400' }],\n ['neutral', { text: 'zs:text-neutral-600 zs:dark:text-neutral-400', bg: 'zs:bg-neutral-600 zs:dark:bg-neutral-400', border: 'zs:border-neutral-600 zs:dark:border-neutral-400' }],\n ['stone', { text: 'zs:text-stone-600 zs:dark:text-stone-400', bg: 'zs:bg-stone-600 zs:dark:bg-stone-400', border: 'zs:border-stone-600 zs:dark:border-stone-400' }],\n ['red', { text: 'zs:text-red-600 zs:dark:text-red-400', bg: 'zs:bg-red-600 zs:dark:bg-red-400', border: 'zs:border-red-600 zs:dark:border-red-400' }],\n ['orange', { text: 'zs:text-orange-600 zs:dark:text-orange-400', bg: 'zs:bg-orange-600 zs:dark:bg-orange-400', border: 'zs:border-orange-600 zs:dark:border-orange-400' }],\n ['amber', { text: 'zs:text-amber-600 zs:dark:text-amber-400', bg: 'zs:bg-amber-600 zs:dark:bg-amber-400', border: 'zs:border-amber-600 zs:dark:border-amber-400' }],\n ['yellow', { text: 'zs:text-yellow-600 zs:dark:text-yellow-400', bg: 'zs:bg-yellow-600 zs:dark:bg-yellow-400', border: 'zs:border-yellow-600 zs:dark:border-yellow-400' }],\n ['lime', { text: 'zs:text-lime-600 zs:dark:text-lime-400', bg: 'zs:bg-lime-600 zs:dark:bg-lime-400', border: 'zs:border-lime-600 zs:dark:border-lime-400' }],\n ['green', { text: 'zs:text-green-600 zs:dark:text-green-400', bg: 'zs:bg-green-600 zs:dark:bg-green-400', border: 'zs:border-green-600 zs:dark:border-green-400' }],\n ['emerald', { text: 'zs:text-emerald-600 zs:dark:text-emerald-400', bg: 'zs:bg-emerald-600 zs:dark:bg-emerald-400', border: 'zs:border-emerald-600 zs:dark:border-emerald-400' }],\n ['teal', { text: 'zs:text-teal-600 zs:dark:text-teal-400', bg: 'zs:bg-teal-600 zs:dark:bg-teal-400', border: 'zs:border-teal-600 zs:dark:border-teal-400' }],\n ['cyan', { text: 'zs:text-cyan-600 zs:dark:text-cyan-400', bg: 'zs:bg-cyan-600 zs:dark:bg-cyan-400', border: 'zs:border-cyan-600 zs:dark:border-cyan-400' }],\n ['sky', { text: 'zs:text-sky-600 zs:dark:text-sky-400', bg: 'zs:bg-sky-600 zs:dark:bg-sky-400', border: 'zs:border-sky-600 zs:dark:border-sky-400' }],\n ['blue', { text: 'zs:text-blue-600 zs:dark:text-blue-400', bg: 'zs:bg-blue-600 zs:dark:bg-blue-400', border: 'zs:border-blue-600 zs:dark:border-blue-400' }],\n ['indigo', { text: 'zs:text-indigo-600 zs:dark:text-indigo-400', bg: 'zs:bg-indigo-600 zs:dark:bg-indigo-400', border: 'zs:border-indigo-600 zs:dark:border-indigo-400' }],\n ['violet', { text: 'zs:text-violet-600 zs:dark:text-violet-400', bg: 'zs:bg-violet-600 zs:dark:bg-violet-400', border: 'zs:border-violet-600 zs:dark:border-violet-400' }],\n ['purple', { text: 'zs:text-purple-600 zs:dark:text-purple-400', bg: 'zs:bg-purple-600 zs:dark:bg-purple-400', border: 'zs:border-purple-600 zs:dark:border-purple-400' }],\n ['fuchsia', { text: 'zs:text-fuchsia-600 zs:dark:text-fuchsia-400', bg: 'zs:bg-fuchsia-600 zs:dark:bg-fuchsia-400', border: 'zs:border-fuchsia-600 zs:dark:border-fuchsia-400' }],\n ['pink', { text: 'zs:text-pink-600 zs:dark:text-pink-400', bg: 'zs:bg-pink-600 zs:dark:bg-pink-400', border: 'zs:border-pink-600 zs:dark:border-pink-400' }],\n ['rose', { text: 'zs:text-rose-600 zs:dark:text-rose-400', bg: 'zs:bg-rose-600 zs:dark:bg-rose-400', border: 'zs:border-rose-600 zs:dark:border-rose-400' }],\n]);\n","import { Injectable } from \"@angular/core\";\n\n@Injectable({ providedIn: 'root' })\nexport class VisibilityObserverService {\n private observer: IntersectionObserver;\n private callbacks = new WeakMap<Element, () => void>();\n\n constructor() {\n this.observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const callback = this.callbacks.get(entry.target);\n if (callback) {\n callback();\n this.callbacks.delete(entry.target);\n this.observer.unobserve(entry.target);\n }\n }\n }\n }, {\n threshold: 0.2,\n rootMargin: '0px 0px 0px 0px'\n });\n }\n\n observe(el: Element, callback: () => void): void {\n this.callbacks.set(el, callback);\n this.observer.observe(el);\n }\n\n unobserve(el: Element): void {\n this.callbacks.delete(el);\n this.observer.unobserve(el);\n }\n}","import { Component, computed, ElementRef, inject, input, signal, viewChild } from '@angular/core';\nimport { cardPaletteMap, FormStyle, ringPaletteMap } from '../palette-service';\nimport { VisibilityObserverService } from '../visibility-observer/visibility-observer-service';\nimport { CommonModule } from '@angular/common';\n\n// ==============================================================================\n// Types\n// ==============================================================================\nexport interface VariantType {\n border?: boolean,\n border_hover?: boolean,\n shadow?: boolean,\n}\n\nexport type AnimationType =\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n | 'none';\n\n// ==============================================================================\n// Component\n// ==============================================================================\n@Component({\n selector: 'ZS-card',\n standalone: true,\n templateUrl: './card.html',\n styleUrl: './card.css',\n imports: [CommonModule]\n})\nexport class Card {\n readonly visibility = inject(VisibilityObserverService)\n\n // ==========================================================================\n // Inputs\n // ==========================================================================\n readonly cardStyle = input<FormStyle>('primary');\n readonly variant = input<VariantType>();\n readonly clickable = input<boolean>(false);\n readonly animation = input<AnimationType>('none');\n readonly bodyClass = input<string>('zs:bg-gray-100 zs:dark:bg-gray-800');\n\n // ==========================================================================\n // Local State\n // ==========================================================================\n readonly cardRef = viewChild<ElementRef>('cardRef');\n readonly isVisible = signal<boolean>(false);\n\n constructor() {\n queueMicrotask(() => {\n const el = this.cardRef()?.nativeElement;\n if (!el) return;\n\n this.visibility.observe(el, () => {\n this.isVisible.set(true);\n })\n });\n }\n\n // ==========================================================================\n // Computed Classes\n // ==========================================================================\n\n readonly animationClasses = computed<string>(() => {\n const animation = this.animation();\n const visible = this.isVisible();\n\n const animateMap: Record<AnimationType, string> = {\n 'top': 'zs:-translate-y-8',\n 'bottom': 'zs:translate-y-8',\n 'left': 'zs:-translate-x-8',\n 'right': 'zs:translate-x-8',\n 'top-left': 'zs:-translate-y-8 zs:-translate-x-8',\n 'top-right': 'zs:-translate-y-8 zs:translate-x-8',\n 'bottom-left': 'zs:translate-y-8 zs:-translate-x-8',\n 'bottom-right': 'zs:translate-y-8 zs:translate-x-8',\n 'none': ''\n };\n\n if (visible) {\n return `zs:opacity-100\n zs:transform-gpu\n zs:will-change-transform\n zs:translate-x-0\n zs:translate-y-0\n zs:transition zs:duration-500`;\n }\n\n // Hidden state\n if (animation === 'none') {\n return 'zs:opacity-100';\n }\n\n return [\n 'zs:opacity-0',\n animateMap[animation],\n 'zs:transform-gpu',\n 'zs:will-change-transform'\n ].filter(Boolean).join(' ');\n });\n\n readonly classList = computed<string>(() => {\n const style = this.cardStyle();\n const variant = this.variant();\n const clickable = this.clickable();\n const bodyClass = this.bodyClass();\n\n const ringPalette = ringPaletteMap.get(style)!;\n const cardPalette = cardPaletteMap.get(style)!;\n\n const base = 'zs:w-full zs:h-full zs:overflow-hidden zs:flex zs:flex-col zs:gap-4 zs:rounded-lg zs:transition-all zs:duration-300';\n\n // ---------------------\n // Border Handling\n // ---------------------\n const border = (variant?.border ?? true) ? `zs:border ${cardPalette.border}` : 'zs:border-0';\n\n // ---------------------\n // Shadow Handling\n // ---------------------\n const shadowClasses = (variant?.shadow ?? true)\n ? 'zs:shadow-md zs:dark:shadow-slate-700/50 zs:hover:shadow-lg'\n : 'zs:shadow-none';\n\n // ---------------------\n // Hover Border Handling\n // ---------------------\n const hoverBorder = (variant?.border_hover ?? true) ? cardPalette.borderHover : '';\n\n // ---------------------\n // Clickable / Focus Effects\n // ---------------------\n const clickEffects = clickable\n ? `zs:cursor-pointer zs:hover:scale-[1.02] zs:active:scale-[0.97] zs:focus-visible:ring-2 ${ringPalette.ring}`\n : '';\n\n // ---------------------\n // Combine Classes\n // ---------------------\n return [\n base,\n border,\n hoverBorder,\n bodyClass,\n shadowClasses,\n clickEffects,\n ]\n .filter(Boolean)\n .join(' ');\n });\n}","<div #cardRef \n[ngClass]=\"[classList(), animationClasses()]\"\nrole=\"group\"\ntabindex=\"0\"\n[attr.aria-label]=\"clickable() ? 'Interactive card' : 'Information card'\"\n[attr.aria-pressed]=\"clickable() ? 'false' : null\"\n>\n <ng-content></ng-content>\n</div>","// ==============================================\n// Types\n// ==============================================\n\nexport interface CarouselItem {\n id: number | string;\n name: string;\n image: string;\n description?: string;\n [key: string]: any; // Allow for additional properties\n}\n\nexport type ItemShapeType = 'rect' | 'circle';\n\n// ==============================================\n// Component\n// ==============================================\n\nimport { Component, input, output, model, viewChild, ElementRef, computed, effect, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BaseColors, ColorMapping } from '../palette-service';\n\n@Component({\n selector: 'ZS-carousel',\n imports: [CommonModule],\n templateUrl: './carousel.html',\n styleUrl: './carousel.css'\n})\nexport class Carousel {\n\n // ==============================================\n // Inputs\n // ==============================================\n\n readonly itemsNumber = input.required<number>();\n\n readonly arrows = input<boolean>(true); // Show/hide navigation arrows\n readonly arrowColor = input<BaseColors>('gray'); // Arrow color CSS class\n\n readonly showIndicators = input<boolean>(true);\n\n readonly autoPlay = input<boolean>(true);\n readonly duration = input<number>(3000);\n\n readonly maxItemsPerBox = input<number>(4); // Maximum number of items visible in one box\n\n readonly itemMinWidth = input<number>(200);\n\n // ==============================================\n // Outputs\n // ==============================================\n\n readonly indexChangeEv = output<number>();\n\n // ==============================================\n // Model\n // ==============================================\n\n readonly currentIndex = model<number>(0);\n\n // ==============================================\n // View Children\n // ==============================================\n\n readonly carouselContainer = viewChild<ElementRef<HTMLElement>>('carouselContainer');\n readonly carouselTrack = viewChild<ElementRef<HTMLDivElement>>('carouselTrack');\n\n // ==============================================\n // Signals\n // ==============================================\n\n readonly itemsPerBox = signal<number>(1);\n readonly currentTranslate = signal<number>(0);\n readonly dragging = signal<boolean>(false);\n private readonly startX = signal<number>(0);\n private readonly prevTranslate = signal<number>(0);\n\n // ==============================================\n // Computed Properties\n // ==============================================\n readonly arrowColorClass = computed<string>(\n () => ColorMapping.get(this.arrowColor())?.text ?? 'zs:text-gray-600'\n )\n \n readonly itemsPerBoxWidth = computed<string>(() => `${100 / this.itemsPerBox()}%`);\n\n readonly totalBoxes = computed<number>(() =>\n Math.ceil(this.itemsNumber() / this.itemsPerBox())\n );\n\n readonly indicatorBoxes = computed<number[]>(() =>\n Array.from({ length: this.totalBoxes() }, (_, i) => i)\n );\n\n // ==============================================\n // Private Properties\n // ==============================================\n\n private autoPlayTimer: ReturnType<typeof setInterval> | null = null;\n private resizeObserver!: ResizeObserver;\n\n // ==============================================\n // Lifecycle Hooks\n // ==============================================\n\n constructor() {\n effect(() => {\n this.autoPlay() ? this.startAutoPlay() : this.stopAutoPlay();\n });\n }\n\n ngAfterViewInit() {\n const el = this.carouselContainer()?.nativeElement;\n if (el) {\n this.resizeObserver = new ResizeObserver(() => {\n this.updateItemsPerBox();\n const containerWidth = el.offsetWidth;\n const pos = -this.currentIndex() * containerWidth;\n this.applyTranslate(pos, 'none');\n });\n this.resizeObserver.observe(el);\n this.updateItemsPerBox();\n const containerWidth = el.offsetWidth;\n this.applyTranslate(-this.currentIndex() * containerWidth, 'none');\n }\n }\n\n ngOnDestroy() {\n this.stopAutoPlay();\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n }\n\n // ==============================================\n // Public Methods\n // ==============================================\n\n updateIndex(newIndex: number): void {\n const containerEl = this.carouselContainer();\n if (!containerEl) return;\n\n this.currentIndex.set(newIndex);\n this.indexChangeEv.emit(newIndex);\n\n const containerWidth = containerEl.nativeElement.offsetWidth;\n const newTranslate = -newIndex * containerWidth;\n this.applyTranslate(newTranslate, 'transform 0.3s ease-out');\n\n this.restartAutoPlay();\n }\n\n next(): void {\n if (this.currentIndex() < this.totalBoxes() - 1) {\n this.updateIndex(this.currentIndex() + 1);\n } else {\n this.updateIndex(0);\n }\n }\n\n previous(): void {\n if (this.currentIndex() > 0) {\n this.updateIndex(this.currentIndex() - 1);\n } else {\n this.updateIndex(this.totalBoxes() - 1);\n }\n }\n\n // ==============================================\n // AutoPlay Methods\n // ==============================================\n\n startAutoPlay(): void {\n if (this.autoPlayTimer) return;\n this.autoPlayTimer = setInterval(() => this.next(), this.duration());\n }\n\n stopAutoPlay(): void {\n if (this.autoPlayTimer) {\n clearInterval(this.autoPlayTimer);\n this.autoPlayTimer = null;\n }\n }\n\n restartAutoPlay(): void {\n this.stopAutoPlay();\n if (this.autoPlay()) {\n this.startAutoPlay();\n }\n }\n\n // ==============================================\n // Resize Handling\n // ==============================================\n\n private updateItemsPerBox(): void {\n const containerWidth = this.carouselContainer()?.nativeElement.offsetWidth || 0;\n const possibleCount = Math.floor(containerWidth / this.itemMinWidth());\n this.itemsPerBox.set(\n Math.min(this.maxItemsPerBox(), Math.max(1, possibleCount))\n );\n }\n\n // ==============================================\n // Drag Handling\n // ==============================================\n\n onDragStart(event: PointerEvent): void {\n event.preventDefault();\n const trackEl = this.carouselTrack();\n const containerEl = this.carouselContainer();\n if (!trackEl || !containerEl) return;\n\n this.dragging.set(true);\n this.startX.set(event.clientX);\n this.prevTranslate.set(-this.currentIndex() * containerEl.nativeElement.offsetWidth);\n\n trackEl.nativeElement.style.transition = 'none';\n this.stopAutoPlay();\n }\n\n onDragMove(event: PointerEvent): void {\n if (!this.dragging()) return;\n const delta = event.clientX - this.startX();\n this.currentTranslate.set(this.prevTranslate() + delta);\n }\n\n onDragEnd(): void {\n if (!this.dragging()) return;\n this.dragging.set(false);\n\n const containerEl = this.carouselContainer();\n if (!containerEl) return;\n\n const containerWidth = containerEl.nativeElement.offsetWidth;\n const movedSlides = Math.round(-this.currentTranslate() / containerWidth);\n const newIndex = Math.max(0, Math.min(this.totalBoxes() - 1, movedSlides));\n\n this.updateIndex(newIndex);\n\n const finalTranslate = -this.currentIndex() * containerWidth;\n this.applyTranslate(finalTranslate, 'transform 0.3s ease-out');\n\n if (this.autoPlay()) {\n this.startAutoPlay();\n }\n }\n\n // ==============================================\n // Helper Methods\n // ==============================================\n\n private applyTranslate(value: number, transition: string | null = 'transform 0.3s ease-out'): void {\n this.currentTranslate.set(value);\n const trackEl = this.carouselTrack();\n if (!trackEl) return;\n\n trackEl.nativeElement.style.transition = transition ?? 'none';\n }\n}","<!-- =================================== Main Container =================================== -->\n<div \n class=\"zs:relative zs:w-full zs:mt-6\"\n role=\"region\"\n aria-label=\"Image carousel\"\n aria-roledescription=\"carousel\"\n>\n\n <!-- =================================== Carousel Track =================================== -->\n <div \n carousel-container\n #carouselContainer\n class=\"zs:overflow-hidden zs:relative\"\n role=\"group\"\n aria-label=\"Carousel track\"\n (pointerdown)=\"onDragStart($event)\"\n (pointermove)=\"onDragMove($event)\"\n (pointerup)=\"onDragEnd()\"\n (pointerleave)=\"onDragEnd()\"\n (pointercancel)=\"onDragEnd()\"\n [class.dragging]=\"dragging()\"\n >\n <div \n #carouselTrack \n [style.--carousel-item-width]=\"itemsPerBoxWidth()\"\n class=\"zs:flex zs:transition-transform zs:duration-500 zs:ease-in-out\"\n [style.transform]=\"'translateX(' + currentTranslate() + 'px)'\"\n >\n <!-- Cards -->\n <ng-content select=\"[carousel-item]\"></ng-content>\n <!-- /Cards -->\n </div>\n </div>\n <!-- =================================== /Carousel Track =================================== -->\n\n <!-- =================================== Navigation Arrows =================================== -->\n @if (arrows()) {\n <button\n type=\"button\"\n class=\"zs:absolute zs:top-1/2 zs:left-3 zs:size-10 zs:-translate-y-1/2 zs:p-3 zs:flex zs:items-center zs:justify-center \n zs:rounded-full zs:bg-gray-100/50 zs:dark:bg-gray-500/50 zs:hover:bg-gray-100/70 \n zs:dark:hover:bg-gray-500/70 zs:transition shadow-lg-all shadow-lg-all-night\"\n (click)=\"previous()\"\n aria-label=\"Previous slide\"\n [attr.aria-controls]=\"carouselContainer?.id\"\n >\n <i [ngClass]=\"arrowColorClass()\" class=\"fas fa-chevron-left zs:text-xl\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n type=\"button\"\n class=\"zs:absolute zs:top-1/2 zs:right-3 zs:size-10 zs:-translate-y-1/2 zs:p-3 zs:flex zs:items-center zs:justify-center \n zs:rounded-full zs:bg-gray-100/50 zs:dark:bg-gray-500/50 zs:hover:bg-gray-100/70 \n zs:dark:hover:bg-gray-500/70 zs:transition shadow-lg-all shadow-lg-all-night\"\n (click)=\"next()\"\n aria-label=\"Next slide\"\n [attr.aria-controls]=\"carouselContainer?.id\"\n >\n <i [ngClass]=\"arrowColorClass()\" class=\"fas fa-chevron-right zs:text-xl\" aria-hidden=\"true\"></i>\n </button>\n }\n <!-- =================================== /Navigation Arrows =================================== -->\n\n</div>\n<!-- =================================== /Main Container =================================== -->\n\n\n<!-- =================================== Indicators =================================== -->\n@if(showIndicators()) {\n <div class=\"zs:flex zs:justify-center zs:mt-4 zs:gap-2\" role=\"tablist\" aria-label=\"Carousel indicators\">\n @for (item of indicatorBoxes(); track $index; let i = $index) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"zs:w-3 zs:h-3 zs:rounded-full zs:transition\"\n [ngClass]=\"currentIndex() === i \n ? 'zs:bg-gray-800 zs:dark:bg-gray-200 zs:scale-110' \n : 'zs:bg-gray-400 zs:dark:bg-gray-600 zs:hover:bg-gray-600 zs:dark:hover:bg-gray-400'\"\n (click)=\"updateIndex(i)\"\n [attr.aria-label]=\"'Go to slide ' + (i + 1)\"\n [attr.aria-current]=\"currentIndex() === i ? 'true' : null\"\n tabindex=\"0\"\n ></button>\n }\n </div>\n}\n<!-- =================================== /Indicators =================================== -->","import { CommonModule } from '@angular/common';\nimport { Component, effect, output, signal } from '@angular/core';\n\n@Component({\n selector: 'ZS-connection',\n imports: [CommonModule],\n templateUrl: './connection.html',\n styleUrl: './connection.css'\n})\nexport class Connection {\n readonly isOnline = signal<boolean>(true);\n readonly isOnlineEv = output<boolean>();\n\n private onlineListener = () => this.isOnline.set(true);\n private offlineListener = () => this.isOnline.set(false);\n\n constructor() {\n this.checkOnline();\n\n window.addEventListener('online', this.onlineListener);\n window.addEventListener('offline', this.offlineListener);\n\n effect(() => {\n const status = this.isOnline();\n this.isOnlineEv.emit(status);\n })\n }\n\n private checkOnline() {\n if(navigator.onLine) this.onlineListener()\n else this.offlineListener()\n }\n}\n","<div tabindex=\"0\" \n class=\"zs:inline-flex zs:items-center zs:justify-center zs:gap-2 zs:rounded-full \n zs:text-sm zs:font-medium zs:px-3 zs:h-8 zs:w-fit zs:cursor-pointer\"\n [ngClass]=\"[\n isOnline() \n ? 'zs:bg-green-100 zs:text-green-800 zs:dark:bg-green-700 zs:dark:text-green-100'\n : 'zs:bg-red-100 zs:text-red-800 zs:dark:bg-red-700 zs:dark:text-red-100'\n ]\"\n>\n <i\n class=\"fa fa-circle zs:text-xs zs:leading-none\"\n [ngClass]=\"[\n isOnline() ? 'zs:text-green-500' : 'zs:text-red-500'\n ]\"\n aria-hidden=\"true\"\n ></i>\n <span>\n @if (isOnline()) {\n Online\n } @else {\n Offline\n }\n </span>\n</div>","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExtractorService {\n /**\n * Extract all error messages recursively from any structure\n * @param input - could be string | Array | object | | Error | null | undefined\n * @returns string[] - flattened array of all messages\n */\n extract(input: unknown): string[] {\n const result: string[] = [];\n const seen = new WeakSet();\n\n const traverse = (value: unknown): void => {\n if (value == null) return; // null or undefined\n\n if (typeof value === 'string') {\n result.push(String(value));\n } else if (Array.isArray(value)) {\n for (const item of value) traverse(item);\n } else if (value instanceof Error) {\n result.push(value.message);\n } else if (typeof value === 'object') {\n if (seen.has(value)) return;\n seen.add(value);\n\n for (const key of Object.keys(value as object)) {\n traverse((value as any)[key]);\n }\n }\n };\n\n traverse(input);\n return result;\n }\n}\n","// ==============================================\n// Types\n// ==============================================\n\nimport { signal, computed, WritableSignal } from '@angular/core';\n\n// نوع الحقل الواحد: يحتوي على value و valid\nexport type ZFormField<T> = WritableSignal<{ value: T | null; valid: boolean }>;\n\n// خريطة الحقول كلها\nexport type ZFormFieldMap<T extends Record<string, any>> = {\n [K in keyof T]: ZFormField<T[K]>;\n};\n\n// ==============================================\n// Zform Class\n// ==============================================\n\nexport class Form<T extends Record<string, any>> {\n public readonly fields: ZFormFieldMap<T>;\n public readonly touched = signal(false);\n\n constructor(initial: T) {\n this.fields = Object.keys(initial).reduce((acc, key) => {\n (acc as any)[key] = signal({\n value: initial[key],\n valid: false,\n });\n return acc;\n }, {} as ZFormFieldMap<T>);\n }\n\n // ==============================================\n // Field Accessors\n // ==============================================\n\n public set<K extends keyof T>(key: K, value: T[K] | null, valid: boolean = true): void {\n this.fields[key].set({ value, valid });\n }\n\n public patch<K extends keyof T>(key: K, partial: Partial<{ value: T[K] | null; valid: boolean }>): void {\n const current = this.fields[key]();\n this.fields[key].set({ ...current, ...partial });\n }\n\n public get<K extends keyof T>(key: K): { value: T[K] | null; valid: boolean } {\n return this.fields[key]();\n }\n\n // ==============================================\n // Form State & Validation\n // ==============================================\n\n public readonly allFilled = computed<boolean>(() => {\n return Object.values(this.fields).every(f => {\n const v = f();\n return v.value !== null && v.value !== '' && v.valid === true;\n });\n });\n\n private markAllTouched(): void {\n this.touched.set(true);\n }\n\n // ==============================================\n // Data Extraction & Submission\n // ==============================================\n\n public getValues(): T {\n const result: Partial<T> = {};\n for (const key in this.fields) {\n if (this.fields.hasOwnProperty(key)) {\n result[key] = this.fields[key]().value ?? undefined;\n }\n }\n return result as T;\n }\n\n public getValidations(): Record<keyof T, boolean> {\n const result: Partial<Record<keyof T, boolean>> = {};\n for (const key in this.fields) {\n if (this.fields.hasOwnProperty(key)) {\n result[key] = this.fields[key]().valid;\n }\n }\n return result as Record<keyof T, boolean>;\n }\n\n public submit(callback: (values: T) => void): void {\n this.markAllTouched();\n\n const allFilled = this.allFilled()\n const allValid = Object.values(this.getValidations()).every(v => v === true);\n\n if (!allFilled || !allValid) return;\n\n callback(this.getValues());\n }\n}\n","// ==============================================\n// Types\n// ==============================================\n\nexport type ButtonVariant = 'solid' | 'outline';\nexport type BtnSizeType = 'xs' | BaseSize | 'xl'\n\n// ==============================================\n// Imports\n// ==============================================\n\nimport {\n Component,\n input,\n computed,\n output,\n} from '@angular/core';\nimport { FormStyle, BaseSize, buttonSolidPaletteMap, ringPaletteMap, buttonOutlinePaletteMap } from '../../palette-service';\nimport { CommonModule } from '@angular/common';\n\n\n// ==============================================\n// Component Metadata\n// ==============================================\n\n@Component({\n selector: 'ZS-button',\n imports: [CommonModule],\n templateUrl: './button.html',\n styleUrl: './button.css'\n})\nexport class Button {\n\n\n // ==============================================\n // Inputs\n // ==============================================\n readonly Id = input<string>(crypto.randomUUID());\n readonly btnStyle = input<FormStyle>('primary');\n readonly variant = input<ButtonVariant>('solid');\n readonly size = input<BtnSizeType>('md');\n readonly disabled = input<boolean>(false);\n readonly icon = input<string | null>(null); // Optional FontAwesome icon class (e.g., \"fa fa-plus\")\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n\n\n // ==============================================\n // Outputs\n // ==============================================\n\n readonly clickedEv = output<Event>();\n\n\n // ==============================================\n // Computed Properties\n // ==============================================\n\n readonly solidTextColor = computed<string>(() => {\n if(['primary', 'dark', 'violet', 'secondary'].includes(this.btnStyle())) \n return 'zs:text-slate-100'\n return 'zs:text-slate-800 zs:dark:text-slate-100'\n });\n\n readonly baseClasses = computed<string>(() => {\n const size = this.size();\n const variant = this.variant();\n const solidPalette = buttonSolidPaletteMap.get(this.btnStyle())!;\n const outlinePalette = buttonOutlinePaletteMap.get(this.btnStyle())!;\n const ringConfig = ringPaletteMap.get(this.btnStyle())!;\n\n const solidPadding = {\n xs: 'zs:px-2 zs:py-1',\n sm: 'zs:px-3.5 zs:py-1.75',\n md: 'zs:px-5 zs:py-2.5',\n lg: 'zs:px-6.5 zs:py-3.25',\n xl: 'zs:px-8 zs:py-4',\n }[size];\n\n const outlinePadding = {\n xs: 'zs:px-[calc(--spacing(2)-1px)] zs:py-[calc(--spacing(2)-1px)]',\n sm: 'zs:px-[calc(--spacing(3.5)-1px)] zs:py-[calc(--spacing(1.75)-1px)]',\n md: 'zs:px-[calc(--spacing(5)-1px)] zs:py-[calc(--spacing(2.5)-1px)]',\n lg: 'zs:px-[calc(--spacing(6.5)-1px)] zs:py-[calc(--spacing(3.25)-1px)]',\n xl: 'zs:px-[calc(--spacing(8)-1px)] zs:py-[calc(--spacing(4)-1px)]',\n }[size];\n\n const solidClasses = this.join(\n solidPalette.btnBG,\n solidPalette.btnBGHover,\n 'zs:hover:scale-[1.02]',\n 'zs:shadow-md zs:dark:shadow-slate-700/50',\n 'zs:hover:shadow-lg',\n 'zs:active:shadow-sm',\n ['dark', 'secondary'].includes(this.btnStyle()) ? 'zs:dark:hover:shadow-sm' : '',\n this.solidTextColor(),\n );\n\n const outlineClasses = this.join(\n 'zs:bg-transparent',\n 'zs:border-[1px]',\n outlinePalette.border,\n outlinePalette.btnBGHover,\n outlinePalette.text,\n 'zs:hover:text-gray-50',\n 'zs:hover:shadow-sm',\n )\n\n const stateClasses = this.disabled()\n ? 'zs:opacity-60 zs:cursor-not-allowed zs:shadow-none'\n : this.join(\n 'zs:active:scale-[0.97]',\n\n 'zs:transition-[background-color,color,border-color,box-shadow,opacity]',\n 'zs:duration-200',\n 'zs:ease-in-out',\n )\n\n return this.join(\n variant === 'solid' ? solidPadding : outlinePadding,\n variant === 'solid' ? solidClasses : outlineClasses,\n stateClasses,\n ringConfig.ring,\n 'zs:inline-flex zs:items-center zs:justify-center',\n ['xl'].includes(size) ? 'zs:rounded-xl' : 'zs:rounded-lg',\n 'zs:focus-visible:ring-2',\n 'zs:select-none',\n 'zs:outline-hidden',\n )\n });\n\n\n // ==============================================\n // Methods\n // ==============================================\n private join(...classes: string[]): string {\n return classes.join(' ');\n }\n\n onClick(event: Event): void {\n if (!this.disabled()) {\n this.clickedEv.emit(event);\n }\n }\n}","<!-- ========================= Button Core Attributes ========================= -->\n<button \n [id]=\"Id()\"\n class=\"zs:w-full\"\n [attr.type]=\"type()\"\n [disabled]=\"disabled()\"\n [ngClass]=\"['zs:flex zs:gap-2', baseClasses()]\"\n\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-label]=\"icon() ? (icon() + ' button') : undefined\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n\n (click)=\"onClick($event)\"\n>\n <!-- ========================= Button Content ========================= -->\n @if (icon()) {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n }\n <ng-content></ng-content>\n</button>","import { Component, computed, effect, HostListener, input, model, output, signal, untracked } from '@angular/core';\nimport { BaseSize, FormStyle, modalPaletteMap } from '../palette-service';\nimport { Button, ButtonVariant } from '../FormCompFolder/button/button';\nimport { CommonModule } from '@angular/common';\nimport { zIndices, ZIndicesType } from '../z-index';\n\n\n// ==============================================\n// Interfaces\n// ==============================================\n\nexport interface BtnType {\n show?: boolean;\n text?: string;\n\n btnStyle?: FormStyle;\n variant?: ButtonVariant;\n size?: BaseSize;\n icon?: string | null\n disabled?: boolean;\n}\nexport type BtnTypeDefault = Required<BtnType>;\nexport type Position = 'left top' | 'left bot' | 'right top' | 'right bot' | 'center' | 'top' | 'bot'\n\n// ==============================================\n// Maps\n// ==============================================\n\nconst positionMap: Record<Position, string> = {\n 'left top': 'zs:justify-start zs:items-start',\n 'left bot': 'zs:justify-start zs:items-end',\n 'right top': 'zs:justify-end zs:items-start',\n 'right bot': 'zs:justify-end zs:items-end',\n 'top': 'zs:justify-center zs:items-start',\n 'bot': 'zs:justify-center zs:items-end',\n 'center': 'zs:justify-center zs:items-center',\n};\n\n// ==============================================\n// Component Metadata\n// ==============================================\n\n@Component({\n selector: 'ZS-modal',\n imports: [Button, CommonModule],\n templateUrl: './modal.html',\n styleUrl: './modal.css'\n})\nexport class Modal {\n readonly zIndices: ZIndicesType = zIndices;\n\n // ==============================================\n // Model\n // ==============================================\n\n /** 🔹 Model لتحديد الفتح والإغلاق */\n readonly open = model<boolean>(false);\n\n\n // ==============================================\n // Inputs\n // ==============================================\n\n readonly title = input<string>('Modal Title');\n readonly modalStyle = input<FormStyle>('primary');\n\n readonly showCancelIcon = input<boolean>(true)\n readonly showFooter = input<boolean>(true);\n\n readonly cancelConfig = input<BtnType>();\n readonly confirmConfig = input<BtnType>();\n\n readonly position = input<Position>('center');\n readonly closeOnOverlay = input<boolean>(true);\n\n // ==============================================\n // Defaults\n // ==============================================\n\n readonly cancelConfigDefault: BtnTypeDefault = {\n show: true,\n text: 'Cancel',\n\n btnStyle: 'secondary',\n variant: 'outline',\n size: 'md',\n icon: null,\n disabled: false\n }\n readonly confirmConfigDefault: BtnTypeDefault = {\n show: true,\n text: 'Confirm',\n\n btnStyle: 'primary',\n variant: 'solid',\n size: 'md',\n icon: null,\n disabled: false\n }\n readonly cancelMerged = computed<{\n show: boolean;\n text: string;\n btnStyle: FormStyle;\n variant: ButtonVariant;\n size: BaseSize;\n icon: string | null;\n disabled: boolean;\n }>(() => ({\n ...this.cancelConfigDefault,\n ...(this.cancelConfig() ?? {})\n }));\n\n readonly confirmMerged = computed<{\n show: boolean;\n text: string;\n btnStyle: FormStyle;\n variant: ButtonVariant;\n size: BaseSize;\n icon: string | null;\n disabled: boolean;\n }>(() => ({\n ...this.confirmConfigDefault,\n ...(this.confirmConfig() ?? {})\n }));\n\n\n // ==============================================\n // Outputs\n // ==============================================\n\n readonly confirmEv = output<void>();\n readonly cancelEv = output<void>();\n readonly closedEv = output<void>();\n\n\n // ==============================================\n // Computed Signals\n // ==============================================\n\n readonly palette = computed<{\n border: string;\n text: string;\n }>(() => modalPaletteMap.get(this.modalStyle())!)\n\n readonly isOpen = signal<boolean>(false);\n readonly positionClass = computed<string>(() => positionMap[this.position()])\n\n private setTimeId?: ReturnType<typeof setTimeout>;\n constructor() {\n effect(() => {\n const state = this.open();\n if(state) this.isOpen.set(true)\n \n untracked(() => {\n clearTimeout(this.setTimeId);\n if (!state && this.isOpen()) {\n this.setTimeId = window.setTimeout(() => this.isOpen.set(false), 250);\n }\n })\n })\n }\n\n // ==============================================\n // Methods\n // ==============================================\n\n close() {\n this.open.set(false);\n this.closedEv.emit();\n }\n\n onOverlayClick(event: MouseEvent) {\n if (this.closeOnOverlay()) {\n this.close();\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape() {\n if (this.isOpen()) this.close();\n }\n}","<!-- ========================= Overlay ========================= -->\n@if (isOpen()) {\n <div #modalRef\n class=\"zs:fixed zs:inset-0 zs:flex {{ zIndices.modal }} zs:bg-black/50 zs:dark:bg-black/70 zs:transition-all zs:duration-300\"\n [ngClass]=\"[positionClass(), open() ? 'animate-fadeIn' : 'animate-fadeOut']\"\n (click)=\"onOverlayClick($event)\"\n role=\"presentation\"\n [attr.inert]=\"isOpen() ? null : ''\"\n >\n\n <!-- ========================= Modal Container ========================= -->\n <div\n class=\"zs:relative zs:m-4 zs:bg-white zs:dark:bg-slate-900 zs:w-full zs:max-w-lg zs:mx-4 \n zs:rounded-2xl zs:shadow-lg zs:transition-all zs:duration-300 zs:outline-hidden\"\n [ngClass]=\"[\n 'zs:border', \n palette().border,\n palette().text,\n open() ? 'animate-modalIn' : 'animate-modalOut'\n ]\"\n (click)=\"$event.stopPropagation()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"'modal-title'\"\n [attr.aria-describedby]=\"'modal-body'\"\n tabindex=\"0\"\n (keydown.escape)=\"close()\"\n >\n\n <!-- ========================= Modal Header ========================= -->\n <div\n class=\"zs:flex zs:items-center zs:justify-between zs:px-4 zs:py-3 zs:border-b\"\n [class]=\"palette().border\"\n >\n <h3 id=\"modal-title\" class=\"zs:font-semibold zs:text-lg\">\n {{ title() }}\n </h3>\n @if(showCancelIcon()) {\n <button \n class=\"zs:text-xl zs:hover:opacity-85 zs:cursor-pointer zs:transition-colors \n zs:duration-200 zs:focus:outline-hidden zs:focus-visible:ring-2 \n zs:focus-visible:ring-offset-2 zs:focus-visible:ring-blue-500 \n zs:rounded-md zs:hover:scale-[1.02] zs:active:scale-[0.97]\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n <!-- ========================= Modal Body ========================= -->\n <div id=\"modal-body\" class=\"zs:p-4 scroll zs:max-h-[75vh] scroll-{{ modalStyle() }}\">\n <ng-content></ng-content>\n </div>\n\n <!-- ========================= Modal Footer ========================= -->\n @if (showFooter()) {\n <div\n class=\"zs:flex zs:justify-end zs:gap-3 zs:p-4 zs:border-t\"\n [class]=\"palette().border\"\n >\n @if (cancelMerged().show) {\n <ZS-button\n [btnStyle]=\"cancelMerged().btnStyle\"\n variant=\"solid\"\n type=\"button\"\n (clickedEv)=\"cancelEv.emit()\"\n [icon]=\"cancelMerged().icon\"\n [disabled]=\"cancelMerged().disabled\"\n [size]=\"cancelMerged().size\"\n [variant]=\"cancelMerged().variant\"\n aria-label=\"Cancel\"\n >\n {{ cancelMerged().text}}\n </ZS-button>\n }\n @if (confirmMerged().show) {\n <ZS-button\n type=\"button\"\n [btnStyle]=\"confirmMerged().btnStyle\"\n (clickedEv)=\"confirmEv.emit()\"\n [icon]=\"confirmMerged().icon\"\n [disabled]=\"confirmMerged().disabled\"\n [size]=\"confirmMerged().size\"\n [variant]=\"confirmMerged().variant\"\n aria-label=\"Confirm\"\n >\n {{ confirmMerged().text}}\n </ZS-button>\n }\n </div>\n }\n </div>\n </div>\n}","// ==============================================\n// Imports\n// ==============================================\n\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, input, model, output, signal } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { NavItem, NavbarItem } from '../NavItemFolder/nav-item/nav-item';\nimport { ButtonVariant, Button } from '../FormCompFolder/button/button';\nimport { BaseSize, FormStyle } from '../palette-service';\nimport { zIndices, ZIndicesType } from '../z-index';\n\n// ==============================================\n// Interfaces & Types\n// ==============================================\n\nexport interface UserProfile {\n name: string;\n username?: string;\n email?: string;\n imageUrl?: string;\n [key: string]: any;\n}\n\nexport type NavbarItemExport = Omit<NavbarItem, 'childrenOpenWindow'>;\nexport interface navItemsType {\n routerLinkActive?: string;\n colorClass?: string;\n navItems: NavbarItemExport[];\n}\n\nexport interface SiteNameConfigType {\n siteName: string;\n siteNameColorClass?: string;\n routerLink?: string;\n}\n\nexport interface AuthButtonsType {\n showAuthButtons: boolean;\n login?: {\n btnStyle?: FormStyle,\n variant?: ButtonVariant,\n size?: BaseSize,\n icon?: string | null\n }\n signup?: {\n btnStyle?: FormStyle,\n variant?: ButtonVariant,\n size?: BaseSize,\n icon?: string | null\n }\n}\n\n// ==============================================\n// Component Decorator\n// ==============================================\n\n@Component({\n selector: 'ZS-navbar',\n imports: [RouterModule, CommonModule, NavItem, Button],\n templateUrl: './navbar.html',\n styleUrl: './navbar.css'\n})\nexport class Navbar {\n readonly zIndices: ZIndicesType = zIndices;\n \n // ==============================================\n // Inputs\n // ==============================================\n\n readonly fixed = input<boolean>(true);\n\n readonly logoUrl = input<string | undefined>();\n readonly siteNameConfig = input<SiteNameConfigType | undefined>();\n\n readonly authButtons = input<AuthButtonsType>({ showAuthButtons: false });\n readonly showUserSection = input<boolean>(true);\n readonly showSearchBar = input<boolean>(false);\n\n readonly navItems = input<navItemsType>();\n\n readonly isLoggedIn = input<boolean>(false);\n readonly userProfile = input<UserProfile | undefined>();\n\n readonly userMenuItems = input<NavbarItemExport[]>([]);\n\n readonly searchPlaceholder = input<string>('Search...');\n \n // ==============================================\n // Outputs\n // ==============================================\n\n readonly loginClickedEv = output<void>();\n readonly signupClickedEv = output<void>();\n readonly searchSubmittedEv = output<string | null>();\n readonly anyItemClickedEv = output<NavbarItem>();\n\n // ==============================================\n // Models\n // ==============================================\n\n readonly searchValue = model<string | null>(null);\n readonly isMobileMenuOpen = model<boolean>(false);\n\n // ==============================================\n // Internal State (Signals)\n // ==============================================\n\n readonly isUserMenuOpen = signal<boolean>(false);\n readonly isMoreOpen = signal<boolean>(false);\n\n // ==============================================\n // Computed Properties\n // ==============================================\n\n readonly visibleNavItems = computed<NavbarItem[]>(() => {\n const items = this.navItems()?.navItems ?? [];\n const limit = this.showSearchBar() ? 2 : 5;\n return items.slice(0, limit).map(item => this.toNavbarItem(item, true));\n });\n\n readonly moreNavItems = computed<NavbarItem[]>(() => {\n const items = this.navItems()?.navItems ?? [];\n const start = this.showSearchBar() ? 2 : 5;\n return items.slice(start).map(item => this.toNavbarItem(item, true));\n });\n\n readonly mobileNavItems = computed<NavbarItem[]>(() =>\n (this.navItems()?.navItems ?? []).map(item => this.toNavbarItem(item, false))\n );\n\n readonly getUserMenuItems = computed<NavbarItem[]>(() =>\n this.userMenuItems().map(item => this.toNavbarItem(item, false))\n );\n\n // ==============================================\n // Private Helper Methods\n // ==============================================\n\n private toNavbarItem(item: NavbarItemExport, childrenOpenWindow = false): NavbarItem {\n const routerLinkActive = this.navItems()?.routerLinkActive;\n const colorClass = this.navItems()?.colorClass;\n\n return {\n ...item,\n colorClass: item.colorClass ?? colorClass,\n routerLinkActive: item.routerLinkActive ?? routerLinkActive,\n childrenOpenWindow,\n children: item.children?.map(child => this.toNavbarItem(child, childrenOpenWindow)) ?? []\n };\n }\n\n // ==============================================\n // Event Handlers\n // ==============================================\n\n onSearchSubmit(): void {\n this.searchSubmittedEv.emit(this.searchValue());\n }\n\n onLogin(): void {\n this.loginClickedEv.emit();\n }\n\n onSignup(): void {\n this.signupClickedEv.emit();\n }\n\n toggleMobileMenu(): void {\n this.isMobileMenuOpen.update(value => !value);\n }\n\n toggleUserMenu(): void {\n this.isUserMenuOpen.update(value => !value);\n }\n\n closeAllMenus(): void {\n this.isMobileMenuOpen.set(false);\n this.isUserMenuOpen.set(false);\n this.isMoreOpen.set(false);\n }\n\n itemClicked(event: NavbarItem): void {\n this.anyItemClickedEv.emit(event)\n this.closeAllMenus();\n }\n\n // ==============================================\n // Lifecycle Hooks\n // ==============================================\n\n private resizeObserver!: ResizeObserver;\n\n ngOnInit(): void {\n this.resizeObserver = new ResizeObserver(() => {\n if (window.innerWidth >= 1024) {\n this.isMobileMenuOpen.set(false);\n }\n });\n this.resizeObserver.observe(document.body);\n }\n\n ngOnDestroy(): void {\n this.resizeObserver.disconnect();\n }\n}","<!-- ========================= Fixed Navbar Container ========================= -->\n\n<nav\n class=\"zs:bg-white zs:dark:bg-[#18202F] zs:top-0 zs:left-0 zs:right-0 {{ zIndices.navbar }} zs:shadow-md zs:dark:shadow-gray-400/30\"\n [ngClass]=\"fixed() ? 'zs:fixed' : 'zs:relative'\"\n role=\"navigation\"\n aria-label=\"Main Navigation\"\n>\n <div class=\"zs:max-w-7xl zs:mx-auto zs:px-4 zs:sm:px-6 zs:lg:px-8\">\n <div class=\"zs:flex zs:justify-between zs:h-16 zs:gap-4\">\n\n <!-- ========================= Logo & Site Name ========================= -->\n <div class=\"zs:flex zs:items-center\">\n @if (logoUrl() || siteNameConfig()) {\n <a\n [routerLink]=\"[siteNameConfig()?.routerLink ?? '/']\"\n class=\"zs:shrink-0 zs:flex zs:items-center zs:gap-2 zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-blue-500\"\n aria-label=\"Homepage\"\n >\n @if (logoUrl()) {\n <img\n [src]=\"logoUrl()\"\n alt=\"{{ siteNameConfig()?.siteName ?? 'Site Logo' }}\"\n class=\"zs:h-8 zs:w-auto\"\n />\n }\n @if (siteNameConfig()) {\n <span\n [class]=\"siteNameConfig()?.siteNameColorClass ?? 'zs:text-gray-800 zs:dark:text-gray-100'\"\n class=\"zs:font-bold zs:text-xl\"\n >\n {{ siteNameConfig()?.siteName }}\n </span>\n }\n </a>\n }\n </div>\n\n <!-- ========================= Desktop Navigation ========================= -->\n <div class=\"zs:hidden zs:lg:flex zs:items-center zs:gap-4\" role=\"menubar\">\n @for (item of visibleNavItems(); track $index) {\n <ZS-nav-item\n [item]=\"item\"\n [collectionName]=\"'navItems'\"\n (anyItemClickedEv)=\"itemClicked($event)\"\n role=\"menuitem\"\n />\n }\n\n @if (moreNavItems().length > 0) {\n <div class=\"zs:relative\" role=\"none\">\n <button\n (click)=\"isMoreOpen.set(!isMoreOpen())\"\n [attr.aria-expanded]=\"isMoreOpen()\"\n aria-haspopup=\"true\"\n aria-controls=\"more-menu\"\n class=\"zs:px-3 zs:py-2 zs:text-sm zs:font-bold zs:text-blue-600 zs:dark:text-blue-400 zs:hover:text-blue-700 zs:dark:hover:text-blue-300 zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-blue-500\"\n >\n More\n <i class=\"fas fa-chevron-down zs:ml-1 zs:text-xs zs:text-gray-500 zs:dark:text-gray-400\"></i>\n </button>\n <div\n id=\"more-menu\"\n [ngClass]=\"{ 'zs:block': isMoreOpen(), 'zs:hidden': !isMoreOpen() }\"\n class=\"zs:absolute zs:bg-white zs:dark:bg-[#18202F] shadow-md-all shadow-md-all-night zs:rounded-md zs:mt-1 zs:py-1 zs:min-w-48 zs:z-200\"\n role=\"menu\"\n >\n @for (item of moreNavItems(); track $index) {\n <ZS-nav-item\n [item]=\"item\"\n [collectionName]=\"'navItems'\"\n (anyItemClickedEv)=\"itemClicked($event)\"\n role=\"menuitem\"\n />\n }\n </div>\n </div>\n }\n </div>\n\n <!-- ========================= Right Controls ========================= -->\n <div class=\"zs:flex zs:items-center zs:gap-3\">\n\n <!-- Search Bar (Desktop) -->\n @if (showSearchBar()) {\n <div class=\"zs:hidden zs:lg:block\" role=\"search\">\n <div class=\"zs:relative\">\n <label for=\"desktop-search\" class=\"sr-only\">Search</label>\n <input\n id=\"desktop-search\"\n type=\"text\"\n [value]=\"searchValue()\"\n (input)=\"searchValue.set($any($event.target).value)\"\n (keyup.enter)=\"onSearchSubmit()\"\n [placeholder]=\"searchPlaceholder()\"\n class=\"zs:bg-gray-100 zs:dark:bg-gray-700 zs:text-gray-800 zs:dark:text-gray-200 zs:rounded-full zs:py-2 zs:px-4 zs:w-64\n zs:transition-all zs:duration-200 zs:focus:outline-hidden zs:focus:ring-2 zs:focus:ring-blue-500\n zs:focus:bg-white zs:dark:focus:bg-gray-600 zs:shadow-sm zs:dark:shadow-gray-500/40\n zs:hover:shadow-md zs:dark:hover:shadow-gray-500/50\"\n />\n <button\n (click)=\"onSearchSubmit()\"\n class=\"zs:absolute zs:py-1 zs:px-2 zs:right-2 zs:top-1/2 zs:-translate-y-1/2 zs:text-gray-500 zs:dark:text-gray-400\n zs:hover:text-gray-700 zs:dark:hover:text-gray-300 zs:transition-colors zs:duration-200\"\n aria-label=\"Submit search\"\n >\n <i class=\"fas fa-search\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- User Profile Dropdown -->\n @if (isLoggedIn() && userProfile() && showUserSection()) {\n <div class=\"zs:relative\">\n <button\n (click)=\"toggleUserMenu()\"\n class=\"zs:flex zs:items-center zs:gap-2 zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-blue-500\"\n aria-haspopup=\"true\"\n [attr.aria-expanded]=\"isUserMenuOpen()\"\n aria-controls=\"user-menu\"\n aria-label=\"User menu\"\n >\n @if (userProfile()?.imageUrl) {\n <img\n [src]=\"userProfile()?.imageUrl\"\n alt=\"{{ userProfile()?.name ?? 'User profile image' }}\"\n class=\"zs:h-8 zs:w-8 zs:rounded-full zs:object-cover\"\n />\n } @else {\n <div\n class=\"zs:h-8 zs:w-8 zs:rounded-full zs:bg-blue-500 zs:flex zs:items-center zs:justify-center zs:text-white zs:font-semibold\"\n aria-hidden=\"true\"\n >\n {{ userProfile()?.name?.charAt(0) || 'U' }}\n </div>\n }\n <i class=\"fas fa-chevron-down zs:text-xs zs:text-gray-600 zs:dark:text-gray-400\n zs:hover:text-gray-700 zs:dark:hover:text-gray-300\"></i>\n </button>\n\n @if (isUserMenuOpen() && userMenuItems().length > 0) {\n <div\n id=\"user-menu\"\n class=\"zs:absolute zs:right-0 zs:mt-2.5 zs:min-w-56 zs:bg-white zs:dark:bg-gray-800 zs:rounded-md\n shadow-md-all shadow-md-all-night zs:pt-2 zs:z-400\"\n role=\"menu\"\n >\n <!-- User Info Section -->\n <div class=\"zs:px-4 zs:py-2 zs:border-b zs:border-gray-200 zs:dark:border-gray-700\">\n @if (userProfile()?.name) {\n <div class=\"zs:font-semibold zs:text-gray-900 zs:dark:text-gray-100\">\n {{ userProfile()?.name }}\n </div>\n }\n @if (userProfile()?.username) {\n <div class=\"zs:text-sm zs:text-gray-600 zs:dark:text-gray-400\">\n @{{ userProfile()?.username }}\n </div>\n }\n @if (userProfile()?.email) {\n <div class=\"zs:text-sm zs:text-gray-500 zs:dark:text-gray-400\">\n {{ userProfile()?.email }}\n </div>\n }\n </div>\n\n <!-- Menu Items -->\n @if (userMenuItems().length > 0) {\n <div class=\"zs:py-1\">\n @for (item of getUserMenuItems(); track $index) {\n <ZS-nav-item\n [item]=\"item\"\n [collectionName]=\"'MenuItems'\"\n (anyItemClickedEv)=\"itemClicked($event)\"\n role=\"menuitem\"\n />\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Auth Buttons -->\n @else if (authButtons().showAuthButtons && !isLoggedIn()) {\n <div class=\"zs:hidden zs:lg:flex zs:items-center zs:gap-3\" role=\"group\" aria-label=\"Authentication\">\n <ZS-button\n [btnStyle]=\"authButtons().login?.btnStyle ?? 'secondary'\"\n [variant]=\"authButtons().login?.variant ?? 'outline'\"\n [size]=\"authButtons().login?.size ?? 'md'\"\n [icon]=\"authButtons().login?.icon ?? ''\"\n (clickedEv)=\"onLogin()\"\n >\n Login\n </ZS-button>\n\n <ZS-button\n [btnStyle]=\"authButtons().signup?.btnStyle ?? 'primary'\"\n [variant]=\"authButtons().signup?.variant ?? 'solid'\"\n [size]=\"authButtons().signup?.size ?? 'md'\"\n [icon]=\"authButtons().signup?.icon ?? ''\"\n (clickedEv)=\"onSignup()\"\n >\n Sign Up\n </ZS-button>\n </div>\n }\n\n <!-- Mobile Menu Toggle -->\n <div class=\"zs:lg:hidden\">\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"zs:p-2 zs:rounded-md zs:text-gray-600 zs:dark:text-gray-300\n zs:hover:text-gray-900 zs:dark:hover:text-gray-100\n zs:focus:outline-hidden zs:focus:ring-2 zs:focus:ring-inset\n zs:focus:ring-gray-200 zs:dark:focus:ring-gray-700\"\n aria-controls=\"mobile-menu\"\n aria-expanded=\"{{ isMobileMenuOpen() }}\"\n aria-label=\"Toggle mobile menu\"\n >\n <i class=\"fas fa-bars zs:px-1\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- ========================= Mobile Menu ========================= -->\n @if (isMobileMenuOpen()) {\n <div\n id=\"mobile-menu\"\n class=\"zs:lg:hidden zs:bg-white zs:dark:bg-[#18202F] \n zs:[box-shadow:0_8px_0_0_#364153] zs:dark:[box-shadow:0_8px_0_0_black]\"\n role=\"menu\"\n aria-label=\"Mobile navigation\"\n >\n <div class=\"zs:px-2 zs:pt-2 zs:pb-3 zs:flex zs:flex-col zs:gap-1 zs:sm:px-3\">\n\n <!-- Navigation Items -->\n <div class=\"zs:max-h-96 zs:overflow-y-auto\">\n @for (item of mobileNavItems(); track $index) {\n <ZS-nav-item\n [item]=\"item\"\n [collectionName]=\"'navItems'\"\n (anyItemClickedEv)=\"itemClicked($event)\"\n role=\"menuitem\"\n />\n }\n </div>\n\n <!-- Search Bar (Mobile) -->\n @if (showSearchBar()) {\n <div class=\"zs:px-3 zs:py-2\" role=\"search\">\n <label for=\"mobile-search\" class=\"sr-only\">Search</label>\n <div class=\"zs:relative\">\n <input\n id=\"mobile-search\"\n type=\"text\"\n [value]=\"searchValue()\"\n (input)=\"searchValue.set($any($event.target).value)\"\n (keyup.enter)=\"onSearchSubmit()\"\n [placeholder]=\"searchPlaceholder()\"\n class=\"zs:w-full zs:bg-gray-100 zs:dark:bg-gray-700 zs:text-gray-800 zs:dark:text-gray-200\n zs:rounded-full zs:py-2 zs:px-4 zs:transition-all zs:duration-200 zs:focus:outline-hidden\n zs:focus:ring-2 zs:focus:ring-blue-500 zs:focus:bg-white zs:dark:focus:bg-gray-600\n zs:shadow-sm zs:dark:shadow-gray-500/40 zs:hover:shadow-md zs:dark:hover:shadow-gray-500/50\"\n />\n <button\n (click)=\"onSearchSubmit()\"\n class=\"zs:absolute zs:py-1 zs:px-2 zs:right-2 zs:top-1/2 zs:-translate-y-1/2 zs:text-gray-500 zs:dark:text-gray-400\n zs:hover:text-gray-700 zs:dark:hover:text-gray-300 zs:transition-colors zs:duration-200\"\n aria-label=\"Submit search\"\n >\n <i class=\"fas fa-search\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- Auth Buttons (Mobile) -->\n @if (authButtons().showAuthButtons && !isLoggedIn()) {\n <div\n class=\"zs:pt-3 zs:pb-4 zs:border-t zs:border-gray-300 zs:dark:border-gray-500\n zs:flex zs:flex-wrap zs:justify-start zs:items-center zs:gap-2\"\n role=\"group\"\n aria-label=\"Authentication (mobile)\"\n >\n <ZS-button\n [btnStyle]=\"authButtons().login?.btnStyle ?? 'secondary'\"\n [variant]=\"authButtons().login?.variant ?? 'outline'\"\n [size]=\"authButtons().login?.size ?? 'md'\"\n [icon]=\"authButtons().login?.icon ?? ''\"\n (clickedEv)=\"onLogin(); isMobileMenuOpen.set(false)\"\n >\n Login\n </ZS-button>\n\n <ZS-button\n [btnStyle]=\"authButtons().signup?.btnStyle ?? 'primary'\"\n [variant]=\"authButtons().signup?.variant ?? 'solid'\"\n [size]=\"authButtons().signup?.size ?? 'md'\"\n [icon]=\"authButtons().signup?.icon ?? ''\"\n (clickedEv)=\"onSignup(); isMobileMenuOpen.set(false)\"\n >\n Sign Up\n </ZS-button>\n </div>\n }\n </div>\n </div>\n }\n</nav>\n\n<!-- ========================= Spacer for Fixed Navbar ========================= -->\n@if (fixed()) {\n <div class=\"zs:h-16\" aria-hidden=\"true\"></div>\n}\n\n<!-- ========================= Overlay for Menu Closing ========================= -->\n@if (isMobileMenuOpen()) {\n <div\n class=\"zs:fixed zs:inset-0 zs:bg-gray-700 zs:dark:bg-black zs:z-700\"\n (click)=\"closeAllMenus()\"\n aria-hidden=\"true\"\n ></div>\n}\n","import { RouterModule } from '@angular/router';\nimport { Component, computed, input, output } from '@angular/core';\nimport { FormStyle, page404PaletteMap } from '../palette-service';\nimport { CommonModule } from '@angular/common';\n\ninterface Page404StyleType {\n btnBG: string;\n btnBGHover: string;\n iconText: string;\n}\n\n@Component({\n selector: 'ZS-page404',\n imports: [RouterModule, CommonModule],\n templateUrl: './page404.html',\n styleUrl: './page404.css'\n})\nexport class Page404 {\n // ========================================================================\n // Inputs\n // ========================================================================\n readonly title = input<string>('Page Not Found');\n readonly message = input<string>('Hmm… this page doesn’t seem to exist. Try checking the URL or going back home.');\n readonly icon = input<string>('fa-ghost');\n readonly pageStyle = input<FormStyle | 'normal'>('normal')\n\n readonly showButton = input<boolean>(true);\n readonly buttonText = input<string>('Go Home');\n readonly routerLink = input<string>('/');\n\n // ========================================================================\n // Outputs\n // ========================================================================\n readonly style = computed<Page404StyleType>(() => {\n if(this.pageStyle() === 'normal') \n return {\n btnBG: 'zs:bg-sky-500 zs:dark:bg-sky-600',\n btnBGHover: 'zs:hover:bg-sky-600 zs:dark:hover:bg-sky-500',\n iconText: 'zs:text-sky-600 zs:dark:text-sky-500'\n }\n\n const pallete: Page404StyleType = page404PaletteMap.get(this.pageStyle() as FormStyle)!\n return {\n btnBG: pallete.btnBG,\n btnBGHover: pallete.btnBGHover,\n iconText: pallete.iconText\n }\n });\n\n // ========================================================================\n // Outputs\n // ========================================================================\n readonly onAction = output<void>();\n}\n","<!-- ========================= Page 404 Container ========================= -->\n<div class=\"zs:flex zs:flex-col zs:items-center zs:justify-center zs:min-h-[90vh]\n zs:text-center zs:transition-colors zs:duration-500 zs:animate-fadeIn\"\n [ngClass]=\"[style().iconText]\"\n >\n\n <!-- ========================= Icon ========================= --> \n <div class=\"zs:text-[136px] zs:mb-8 animate-float zs:opacity-90 zs:leading-none\">\n <i class=\"fa-solid\" [class]=\"icon()\"></i>\n </div>\n\n <!-- ========================= Title ========================= -->\n <h1 class=\"zs:text-6xl zs:font-black zs:tracking-widest zs:mb-2 \n zs:text-rose-600 zs:dark:text-rose-500 zs:select-none\n zs:drop-shadow-[0_0_8px_rgba(239,68,68,0.5)]\">\n 404\n </h1>\n\n\n <!-- ========================= Message ========================= -->\n <h2 class=\"zs:text-2xl zs:text-rose-600/80 zs:dark:text-rose-800/80 zs:font-semibold zs:mb-4\">\n {{ title() }}\n </h2>\n <p class=\"zs:text-base zs:max-w-md zs:text-gray-600 zs:dark:text-gray-400 zs:mb-8\">\n {{ message() }}\n </p>\n\n <!-- ========================= Button ========================= -->\n @if (showButton()) {\n <a\n [routerLink]=\"routerLink()\"\n (click)=\"onAction.emit()\"\n class=\"zs:px-6 zs:py-2 zs:rounded-full\n zs:text-white zs:font-medium zs:shadow-md\n zs:hover:shadow-lg zs:flex zs:items-center \n zs:justify-center zs:transition-all zs:duration-300 zs:ease-out \n zs:gap-1.5\"\n [ngClass]=\"[style().btnBG, style().btnBGHover]\"\n >\n <i class=\"fa-solid fa-house\"></i>\n {{ buttonText() }}\n </a>\n }\n</div>\n","// ========================================================================\n// Imports\n// ========================================================================\n\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, input, output } from '@angular/core';\n\n\n// ========================================================================\n// Component Declaration\n// ========================================================================\n\n@Component({\n selector: 'ZS-pagination',\n imports: [CommonModule],\n templateUrl: './pagination.html',\n styleUrl: './pagination.css'\n})\nexport class Pagination {\n\n // ========================================================================\n // Inputs\n // ========================================================================\n\n /**\n * Total number of pages (required).\n */\n readonly totalPages = input.required<number>();\n\n /**\n * Current active page (required).\n */\n readonly currentPage = input.required<number>();\n\n /**\n * Whether to display the total items count.\n */\n readonly showTotalItems = input<boolean>(false);\n\n /**\n * Message shown before the total items count.\n */\n readonly totalItemsMessage = input<string>('Total items:');\n\n /**\n * Total number of items (used when `showTotalItems` is true).\n */\n readonly totalItems = input<number>();\n\n\n // ========================================================================\n // Outputs\n // ========================================================================\n\n /**\n * Emits the new page number when the user navigates.\n */\n readonly pageChangeEv = output<number>();\n\n\n // ========================================================================\n // Computed Properties\n // ========================================================================\n\n /**\n * Generates an array of page numbers from 1 to `totalPages`.\n */\n readonly pages = computed<number[]>(() =>\n Array.from({ length: this.totalPages() }, (_, i) => i + 1)\n );\n\n\n // ========================================================================\n // Event Handlers\n // ========================================================================\n\n /**\n * Navigates to the specified page if it's within valid range.\n */\n goToPage(page: number): void {\n if (page < 1 || page > this.totalPages()) return;\n this.pageChangeEv.emit(page);\n }\n\n /**\n * Navigates to the next page.\n */\n nextPage(): void {\n this.goToPage(this.currentPage() + 1);\n }\n\n /**\n * Navigates to the previous page.\n */\n prevPage(): void {\n this.goToPage(this.currentPage() - 1);\n }\n}","<!-- ========================= Top Spacing ========================= -->\n<div class=\"zs:mt-6\"></div>\n\n<!-- ========================= Total Items Count ========================= -->\n@if (showTotalItems()) {\n <div\n class=\"zs:text-center zs:text-sm zs:text-gray-500 zs:dark:text-gray-300 zs:mb-2\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {{ totalItemsMessage() }} {{ totalItems() }}\n </div>\n}\n\n<!-- ========================= Pagination Navigation ========================= -->\n<nav\n class=\"zs:flex zs:flex-wrap zs:justify-center zs:items-center zs:gap-1\"\n role=\"navigation\"\n aria-label=\"Pagination\"\n>\n <!-- ========================= Previous Button ========================= -->\n <button\n type=\"button\"\n class=\"zs:flex zs:items-center zs:justify-center zs:size-9 zs:sm:size-10 \n zs:rounded-lg zs:border zs:border-gray-300 zs:dark:border-gray-600 zs:hover:bg-blue-100 \n zs:dark:hover:bg-blue-700 zs:disabled:opacity-50 zs:disabled:cursor-not-allowed zs:transition-all \n zs:duration-200\"\n (click)=\"prevPage()\"\n [disabled]=\"currentPage() === 1\"\n [attr.aria-disabled]=\"currentPage() === 1\"\n aria-label=\"Go to previous page\"\n >\n <i class=\"fas fa-chevron-left zs:text-gray-600 zs:dark:text-gray-200\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Previous</span>\n </button>\n\n <!-- ========================= Page Numbers ========================= -->\n @for (page of pages(); track page) {\n <button\n type=\"button\"\n (click)=\"goToPage(page)\"\n class=\"zs:flex zs:items-center zs:justify-center zs:size-9 zs:sm:size-10 zs:rounded-lg \n zs:border zs:border-gray-300 zs:dark:border-gray-600 zs:hover:bg-blue-100 zs:dark:hover:bg-blue-700 \n zs:transition-all zs:duration-200\"\n [ngClass]=\"{\n 'zs:bg-blue-500 zs:text-white zs:dark:bg-blue-400 zs:dark:text-black': page === currentPage()\n }\"\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\n [attr.aria-label]=\"'Go to page ' + page\"\n >\n {{ page }}\n </button>\n }\n\n <!-- ========================= Next Button ========================= -->\n <button\n type=\"button\"\n class=\"zs:flex zs:items-center zs:justify-center zs:size-9 zs:sm:size-10 zs:rounded-lg zs:border \n zs:border-gray-300 zs:dark:border-gray-600 zs:hover:bg-blue-100 zs:dark:hover:bg-blue-700 \n zs:disabled:opacity-50 zs:disabled:cursor-not-allowed zs:transition-all zs:duration-200\"\n (click)=\"nextPage()\"\n [disabled]=\"currentPage() === totalPages()\"\n [attr.aria-disabled]=\"currentPage() === totalPages()\"\n aria-label=\"Go to next page\"\n >\n <i class=\"fas fa-chevron-right zs:text-gray-600 zs:dark:text-gray-200\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Next</span>\n </button>\n</nav>","// ========================================================================\n// Imports\n// ========================================================================\n\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, HostListener, inject, input, signal } from '@angular/core';\nimport { BaseColors, ColorMapping } from '../palette-service';\nimport { zIndices, ZIndicesType } from '../z-index';\n\n\n// ========================================================================\n// Types\n// ========================================================================\n\nexport type PositionType = 'left' | 'right';\n\n\n// ========================================================================\n// Component Declaration\n// ========================================================================\n\n@Component({\n selector: 'ZS-scroll-to-top',\n imports: [CommonModule],\n templateUrl: './scroll-to-top.html',\n styleUrl: './scroll-to-top.css'\n})\nexport class ScrollToTop {\n readonly zIndices: ZIndicesType = zIndices;\n \n // ========================================================================\n // Inputs\n // ========================================================================\n\n /**\n * Determines the horizontal position of the button ('left' or 'right').\n * Default: 'right'\n */\n readonly position = input<PositionType>('right');\n\n /**\n * Tailwind CSS class for the circle's color (background ring).\n */\n readonly circleColorClass = input<string>('zs:text-gray-400/60 zs:dark:text-gray-600/70 zs:group-hover:brightness-110');\n\n /**\n * BaseColors class for the arrow and progress indicator color.\n */\n readonly arrowProgressColor = input<BaseColors>('blue');\n\n\n // ========================================================================\n // Constants\n // ========================================================================\n\n private readonly circleRadius: number = 22;\n readonly circleCircumference: number = 2 * Math.PI * this.circleRadius;\n\n\n // ========================================================================\n // Internal State\n // ========================================================================\n\n readonly scrollY = signal<number>(0);\n\n\n // ========================================================================\n // Computed Properties\n // ========================================================================\n readonly arrowProgressColorClass = computed<string>(() => \n ColorMapping.get(this.arrowProgressColor())?.text ?? 'zs:text-blue-600'\n );\n\n /**\n * Computes the stroke-dashoffset for the progress circle based on scroll position.\n */\n readonly progressOffset = computed<number>(() => {\n const _ = this.scrollY();\n const maxScroll = document.documentElement.scrollHeight - window.innerHeight;\n const progress = maxScroll > 0 ? this.scrollY() / maxScroll : 0;\n return this.circleCircumference * (1 - progress);\n });\n\n /**\n * Returns Tailwind classes to position the button horizontally.\n */\n readonly positionClass = computed<{\n 'zs:right-4': boolean;\n 'zs:left-4': boolean;\n }>(() => ({\n 'zs:right-4': this.position() === 'right',\n 'zs:left-4': this.position() === 'left',\n }));\n\n\n // ========================================================================\n // Lifecycle Hooks\n // ========================================================================\n @HostListener('window:scroll', ['$event'])\n onScroll(event: Event) {\n this.scrollY.set(window.scrollY);\n }\n\n\n // ========================================================================\n // Event Handlers\n // ========================================================================\n scrollToTop() {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n }\n}","<!-- ========================= Scroll-to-Top Container ========================= -->\n<div\n [ngClass]=\"positionClass()\"\n class=\"zs:fixed zs:group zs:bottom-4 {{ zIndices.scrollToTop }} \n zs:transition-opacity zs:duration-300\"\n [style.opacity]=\"scrollY() > 200 ? 1 : 0\"\n>\n <!-- ========================= Scroll Button ========================= -->\n <button\n (click)=\"scrollToTop()\"\n class=\"zs:w-12 zs:h-12 zs:group-hover:scale-105 zs:rounded-full zs:flex zs:items-center \n zs:justify-center zs:relative zs:overflow-hidden zs:focus:outline-hidden\"\n type=\"button\"\n role=\"button\"\n aria-label=\"Scroll to top\"\n title=\"Scroll to top\"\n >\n <!-- ========================= Progress Ring (SVG) ========================= -->\n <svg\n class=\"zs:absolute zs:inset-0 zs:w-full zs:h-full zs:transform zs:-rotate-90\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Background Circle -->\n <circle\n cx=\"24\"\n cy=\"24\"\n r=\"22\"\n stroke=\"transparent\"\n stroke-width=\"5\"\n fill=\"currentColor\"\n [ngClass]=\"circleColorClass()\"\n />\n\n <!-- Animated Progress Circle -->\n <circle\n cx=\"24\"\n cy=\"24\"\n r=\"22\"\n stroke=\"currentColor\"\n stroke-width=\"5\"\n fill=\"transparent\"\n [attr.stroke-dasharray]=\"circleCircumference\"\n [attr.stroke-dashoffset]=\"progressOffset()\"\n [ngClass]=\"arrowProgressColorClass()\"\n class=\"zs:transition-all zs:duration-300 zs:ease-out\"\n stroke-linecap=\"round\"\n />\n </svg>\n\n <!-- ========================= Up Arrow Icon ========================= -->\n <i\n class=\"fas fa-arrow-up zs:relative zs:z-100 zs:text-lg\"\n [ngClass]=\"arrowProgressColorClass()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n</div>","// =================================================================================================\n// Types\n// =================================================================================================\n\nexport type LoaderType = 'spinner' | 'pro' | 'double' | 'gear' | 'fan' | 'pulse' | 'dots' | 'bars';\n\n// =================================================================================================\n// Component Definition\n// =================================================================================================\n\nimport { Component, computed, inject, input } from '@angular/core';\nimport { BaseColors, BaseSize, ColorMapping } from '../palette-service';\nimport { zIndices, ZIndicesType } from '../z-index';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ZS-spinner',\n imports: [CommonModule],\n templateUrl: './spinner.html',\n styleUrl: './spinner.css'\n})\nexport class Spinner {\n readonly zIndices: ZIndicesType = zIndices;\n \n // =================================================================================================\n // Inputs\n // =================================================================================================\n\n readonly loading = input<boolean>(false);\n readonly isFloating = input<boolean>(false);\n readonly color = input<BaseColors>('blue');\n readonly withBox = input<boolean>(false);\n readonly boxColorClass = input<string>('zs:bg-gray-300/90 zs:dark:bg-gray-400/80');\n readonly type = input<LoaderType>('spinner');\n readonly size = input<BaseSize>('md');\n\n // =================================================================================================\n // Computed Properties\n // =================================================================================================\n\n readonly wrapperClasses = computed<string>(() =>\n this.isFloating()\n ? `zs:fixed zs:inset-0 zs:flex zs:items-center zs:justify-center \n ${ this.zIndices.spinner } zs:bg-black/50 zs:dark:bg-black/70`\n : 'zs:flex zs:items-center zs:justify-center'\n );\n\n readonly boxClasses = computed<string>(() =>\n this.withBox()\n ? `zs:p-5 zs:rounded-lg zs:shadow-md ${this.boxColorClass()}`\n : ''\n );\n\n readonly spinnerSizeTextClass = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:text-3xl',\n md: 'zs:text-5xl',\n lg: 'zs:text-7xl'\n };\n return sizes[this.size()];\n });\n\n readonly spinnerSizeDotsClass = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:size-2',\n md: 'zs:size-4',\n lg: 'zs:size-6'\n };\n return sizes[this.size()];\n });\n\n readonly spinnerSizeBarsClass = (num: number): string => {\n const sizes: Record<BaseSize, string[]> = {\n sm: ['zs:w-1 zs:h-3', 'zs:w-1 zs:h-3.5', 'zs:w-1 zs:h-4'],\n md: ['zs:w-1.5 zs:h-6', 'zs:w-1.5 zs:h-8', 'zs:w-1.5 zs:h-10'],\n lg: ['zs:w-2 zs:h-8', 'zs:w-2 zs:h-9', 'zs:w-2 zs:h-10']\n };\n return sizes[this.size()][num - 1];\n };\n\n readonly spinnerSizeProClass = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:border-t-3 zs:border-b-3 zs:size-7',\n md: 'zs:border-t-5 zs:border-b-5 zs:size-12',\n lg: 'zs:border-t-7 zs:border-b-7 zs:size-18'\n };\n return sizes[this.size()];\n });\n\n readonly spinnerSizePulseClass = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:border-3 zs:size-7',\n md: 'zs:border-5 zs:size-12',\n lg: 'zs:border-7 zs:size-18'\n };\n return sizes[this.size()];\n });\n\n readonly spinnerSizeDoubleClass = (num: 1 | 2): string => {\n const sizes: Record<BaseSize, { 1: string; 2: string }> = {\n sm: { 1: 'zs:border-3 zs:size-7', 2: 'zs:border-3 zs:size-5' },\n md: { 1: 'zs:border-5 zs:size-12', 2: 'zs:border-5 zs:size-8.5' },\n lg: { 1: 'zs:border-7 zs:size-18', 2: 'zs:border-7 zs:size-13' }\n };\n return sizes[this.size()][num];\n };\n\n readonly bgColor = computed<string | undefined>(() =>\n ColorMapping.get(this.color())?.bg\n );\n\n readonly borderColor = computed<string | undefined>(() =>\n ColorMapping.get(this.color())?.border\n );\n\n readonly textColor = computed<string | undefined>(() =>\n ColorMapping.get(this.color())?.text\n );\n}","<!-- ========================= Loader Wrapper ========================= -->\n@if(loading()) {\n <div \n [class]=\"wrapperClasses()\" \n role=\"status\" \n aria-live=\"polite\" \n aria-busy=\"true\"\n >\n <div [class]=\"boxClasses()\">\n \n @switch (type()) {\n \n <!-- ========================= Spinner ========================= -->\n @case ('spinner') {\n <i \n [ngClass]=\"['fas fa-spinner fa-spin', spinnerSizeTextClass(), textColor()]\" \n aria-hidden=\"true\"\n ></i>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Pro Spinner ========================= -->\n @case ('pro') {\n <div \n [ngClass]=\"['zs:animate-spin zs:rounded-full zs:border-solid', spinnerSizeProClass(), borderColor()]\" \n aria-hidden=\"true\"\n ></div>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Gear ========================= -->\n @case ('gear') {\n <i \n [ngClass]=\"['fas fa-gear fa-spin', spinnerSizeTextClass(), textColor()]\" \n aria-hidden=\"true\"\n ></i>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Fan ========================= -->\n @case ('fan') {\n <i \n [ngClass]=\"['fas fa-fan fa-spin', spinnerSizeTextClass(), textColor()]\" \n aria-hidden=\"true\"\n ></i>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Pulse ========================= -->\n @case ('pulse') {\n <div \n [ngClass]=\"[\n 'zs:animate-spin zs:rounded-full zs:border-solid',\n spinnerSizePulseClass(),\n borderColor(),\n 'zs:border-t-transparent!'\n ]\" \n aria-hidden=\"true\"\n ></div>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Dots ========================= -->\n @case ('dots') {\n <div class=\"zs:flex zs:gap-2 zs:items-center\" aria-hidden=\"true\">\n <span \n class=\"zs:rounded-full zs:animate-bounce\" \n [ngClass]=\"[bgColor(), spinnerSizeDotsClass()]\" \n style=\"animation-delay: 0s\"\n ></span>\n <span \n class=\"zs:rounded-full zs:animate-bounce\" \n [ngClass]=\"[bgColor(), spinnerSizeDotsClass()]\" \n style=\"animation-delay: 0.2s\"\n ></span>\n <span \n class=\"zs:rounded-full zs:animate-bounce\" \n [ngClass]=\"[bgColor(), spinnerSizeDotsClass()]\" \n style=\"animation-delay: 0.4s\"\n ></span>\n </div>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Bars ========================= -->\n @case ('bars') {\n <div class=\"zs:flex zs:gap-1 zs:items-center zs:h-6\" aria-hidden=\"true\">\n <span \n class=\"zs:rounded-sm animate-bar-scale\" \n [ngClass]=\"[bgColor(), spinnerSizeBarsClass(1)]\" \n style=\"animation-delay: 0s\"\n ></span>\n <span \n class=\"zs:rounded-sm animate-bar-scale\" \n [ngClass]=\"[bgColor(), spinnerSizeBarsClass(2)]\" \n style=\"animation-delay: 0.2s\"\n ></span>\n <span \n class=\"zs:rounded-sm animate-bar-scale\" \n [ngClass]=\"[bgColor(), spinnerSizeBarsClass(3)]\" \n style=\"animation-delay: 0.4s\"\n ></span>\n </div>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Double Spinner ========================= -->\n @case ('double') {\n <div class=\"zs:relative\" aria-hidden=\"true\">\n <!-- Outer ring -->\n <div \n [ngClass]=\"[\n 'zs:animate-spin zs:rounded-full zs:border-solid',\n spinnerSizeDoubleClass(1),\n borderColor(), \n 'zs:border-t-transparent!'\n ]\"\n ></div>\n <!-- Inner ring (reversed animation) -->\n <div \n [ngClass]=\"[\n 'zs:animate-spin zs:opacity-75 zs:rounded-full zs:border-solid zs:absolute \n zs:top-1/2 zs:left-1/2 zs:-translate-x-1/2 zs:-translate-y-1/2',\n spinnerSizeDoubleClass(2),\n borderColor(), \n 'zs:border-b-transparent!'\n ]\"\n style=\"animation-direction: reverse;\"\n ></div>\n </div>\n <span class=\"sr-only\">Loading...</span>\n }\n \n }\n \n </div>\n </div>\n}","import { Component, signal, HostListener, effect, output, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { zIndices, ZIndicesType } from '../z-index';\n\n\n// ==============================================\n// Types\n// ==============================================\nexport type themeTypes = 'light' | 'dark';\n\n\n// ==============================================\n// Component Metadata\n// ==============================================\n@Component({\n selector: 'ZS-theme-toggle',\n imports: [CommonModule],\n templateUrl: './theme-toggle.html',\n styleUrl: './theme-toggle.css'\n})\nexport class ThemeToggle {\n readonly zIndices: ZIndicesType = zIndices;\n\n // ==============================================\n // Signals\n // ==============================================\n readonly currentTheme = signal<themeTypes>('light');\n readonly isOpen = signal<boolean>(false);\n private readonly userSelectedTheme = signal<boolean>(false);\n \n private lastEmittedTheme: themeTypes | null = null;\n private lastManualTheme: themeTypes | null = null;\n \n // ==============================================\n // Inputs\n // ==============================================\n readonly bodyClass = input<string>('zs:bg-white zs:dark:bg-gray-900 zs:text-gray-900 zs:dark:text-gray-100');\n readonly showDefaultUI = input<boolean>(true);\n readonly setManualTheme = input<themeTypes | null>(null);\n\n\n // ==============================================\n // Outputs\n // ==============================================\n readonly themeChangeEv = output<themeTypes>();\n\n\n // ==============================================\n // Lifecycle & Side Effects\n // ==============================================\n constructor() {\n // ① تهيئة الثيم\n const savedTheme = localStorage.getItem('theme') as themeTypes | null;\n const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');\n\n if (savedTheme) {\n this.currentTheme.set(savedTheme);\n this.userSelectedTheme.set(true);\n } else {\n this.currentTheme.set(systemPrefersDark.matches ? 'dark' : 'light');\n }\n\n // ② مراقبة تغيّر ثيم النظام (لو المستخدم لم يختر يدويًا)\n effect((onCleanup) => {\n const listener = (e: MediaQueryListEvent) => {\n if (!this.userSelectedTheme()) {\n this.currentTheme.set(e.matches ? 'dark' : 'light');\n }\n };\n\n systemPrefersDark.addEventListener('change', listener);\n onCleanup(() => systemPrefersDark.removeEventListener('change', listener));\n });\n\n // ③ مزامنة الثيم مع DOM و localStorage\n effect(() => {\n const theme = this.currentTheme();\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n const classes = this.bodyClass().split(' ');\n document.body.classList.value = ''; // clear only what YOU set \n classes.forEach(c => document.body.classList.add(c));\n\n if (this.userSelectedTheme()) {\n localStorage.setItem('theme', theme);\n }\n });\n\n effect(() => {\n const manual = this.setManualTheme();\n\n if (manual && manual !== this.lastManualTheme) {\n this.lastManualTheme = manual;\n this.setTheme(manual);\n }\n });\n\n effect(() => {\n const theme = this.currentTheme();\n if (theme !== this.lastEmittedTheme) {\n this.lastEmittedTheme = theme;\n this.themeChangeEv.emit(theme);\n }\n });\n }\n\n // ==============================================\n // Component Methods\n // ==============================================\n toggleOpen(): void {\n this.isOpen.set(!this.isOpen());\n }\n\n setTheme(theme: themeTypes): void {\n if (this.currentTheme() !== theme) {\n this.currentTheme.set(theme);\n this.userSelectedTheme.set(true);\n }\n this.isOpen.set(false);\n }\n\n // ==============================================\n // Host Listeners\n // ==============================================\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (!target.closest('zs-theme-toggle') && this.isOpen()) {\n this.isOpen.set(false);\n }\n }\n}","<!-- ========================= Theme Switcher Panel ========================= -->\n@if(showDefaultUI()) {\n <div \n class=\"zs:fixed zs:left-0 zs:top-1/6 {{ zIndices.themeToggle }} zs:transform \n zs:-translate-y-1/2 zs:transition-all zs:duration-300\"\n [ngClass]=\"!isOpen() ? 'zs:-translate-x-24' : ''\"\n role=\"complementary\"\n aria-label=\"Theme switcher panel\"\n >\n <!-- ========================= Theme Selection Buttons ========================= -->\n <div class=\"zs:flex zs:items-center\">\n <div \n class=\"zs:flex zs:overflow-hidden zs:transition-all zs:duration-300\"\n role=\"group\"\n aria-label=\"Theme selection\"\n >\n <!-- Light Theme Button -->\n <button\n (click)=\"setTheme('light')\"\n type=\"button\"\n class=\"zs:px-3 zs:py-2 zs:rounded-l-none zs:border-l-0 zs:border-y \n zs:transition-colors zs:shrink-0\n zs:bg-white zs:text-gray-900 zs:border-gray-300\n zs:dark:bg-gray-800 zs:dark:text-gray-100 zs:dark:border-gray-600\n zs:hover:bg-gray-100 zs:dark:hover:bg-gray-700 zs:w-12\n zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-offset-2 \n zs:focus-visible:ring-blue-500\"\n aria-label=\"Activate light theme\"\n [attr.aria-pressed]=\"currentTheme() === 'light'\"\n >\n <i class=\"fas fa-sun zs:text-yellow-500\" aria-hidden=\"true\"></i>\n </button>\n \n <!-- Dark Theme Button -->\n <button\n (click)=\"setTheme('dark')\"\n type=\"button\"\n class=\"zs:px-3 zs:py-2 zs:rounded-r-lg zs:border-y zs:border-r \n zs:transition-colors zs:shrink-0\n zs:bg-white zs:text-gray-900 zs:border-gray-300\n zs:dark:bg-gray-800 zs:dark:text-gray-100 zs:dark:border-gray-600\n zs:hover:bg-gray-100 zs:dark:hover:bg-gray-700 zs:w-12\n zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-offset-2 \n zs:focus-visible:ring-blue-500\"\n aria-label=\"Activate dark theme\"\n [attr.aria-pressed]=\"currentTheme() === 'dark'\"\n >\n <i class=\"fas fa-moon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n \n <!-- ========================= Toggle Button with Connector ========================= -->\n <div \n class=\"zs:relative\"\n [ngClass]=\"isOpen() ? 'zs:hidden' : ''\"\n >\n <!-- Connector Line -->\n <div\n class=\"zs:absolute zs:top-1/2 zs:right-0 zs:h-0.5 zs:w-3 zs:transform zs:-translate-y-1/2\n zs:bg-gray-300 zs:dark:bg-gray-600\"\n aria-hidden=\"true\"\n ></div>\n \n <!-- Toggle Button -->\n <button\n (click)=\"toggleOpen()\"\n type=\"button\"\n class=\"zs:relative zs:z-100 zs:w-12 zs:h-12 zs:rounded-full zs:rounded-l-none zs:border-l-0 \n zs:border-2\n zs:transition-all zs:duration-300 zs:flex zs:items-center zs:justify-center\n zs:bg-white zs:text-gray-900 zs:border-gray-300\n zs:dark:bg-gray-800 zs:dark:text-gray-100 zs:dark:border-gray-600\n zs:hover:bg-gray-100 zs:dark:hover:bg-gray-700\n zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-offset-2 \n zs:focus-visible:ring-blue-500\"\n aria-label=\"Toggle theme switcher\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-controls=\"theme-panel\"\n >\n @if (currentTheme() === 'dark') {\n <i class=\"fas fa-moon\" aria-hidden=\"true\"></i>\n } @else {\n <i class=\"fas fa-sun zs:text-yellow-500\" aria-hidden=\"true\"></i>\n }\n </button>\n </div>\n </div>\n </div>\n}","// ==============================================\n// Component Metadata\n// ==============================================\nimport { Component, computed, input } from '@angular/core';\nimport { BaseSize } from '../../palette-service';\nimport { CommonModule } from '@angular/common';\n\ntype sizeClassesType = Record<BaseSize, { label: string; hint: string }>;\n\n@Component({\n selector: 'ZS-label',\n imports: [CommonModule],\n templateUrl: './label.html',\n styleUrl: './label.css'\n})\nexport class Label {\n\n // ==============================================\n // Label & Hint Configuration\n // ==============================================\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n readonly hintId = input<string | null>(null);\n readonly size = input<BaseSize>('md')\n\n // ==============================================\n // Accessibility & State Inputs\n // ==============================================\n readonly required = input<boolean>(false);\n readonly for = input<string | null>(null);\n\n \n // ==============================================\n // Computed Classes\n // ==============================================\n readonly sizeClasses = computed<{ label: string; hint: string }>(() => {\n const sizes: sizeClassesType = {\n sm: { label: 'zs:text-xs', hint: 'zs:text-[10px]' },\n md: { label: 'zs:text-sm', hint: 'zs:text-xs' },\n lg: { label: 'zs:text-base', hint: 'zs:text-sm' },\n };\n return sizes[this.size()];\n });\n}","<!-- ================= Label Wrapper ================= -->\n@if (label() || hint()) {\n <label \n [for]=\"for()\" \n class=\"zs:flex zs:items-center zs:gap-2\"\n >\n\n <!-- ========== Label Text ========== -->\n @if (label()) {\n <span class=\"zs:font-semibold zs:truncate\" [ngClass]=\"sizeClasses().label\">\n {{ label() }}\n\n <!-- Required Indicator -->\n @if (required()) {\n <span class=\"zs:text-red-500\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">(required)</span>\n }\n </span>\n }\n\n <!-- ========== Hint Text ========== -->\n @if (hint()) {\n <small\n [id]=\"hintId()\"\n class=\"zs:text-slate-500 zs:dark:text-slate-400\" \n [ngClass]=\"sizeClasses().hint\"\n >\n {{ hint() }}\n </small>\n }\n <!-- ========== End Hint Text ========== -->\n\n </label>\n}\n<!-- ================= End Label Wrapper ================= -->","import { CommonModule } from '@angular/common';\nimport { Component, computed, input, model } from '@angular/core';\nimport { BaseSize, checkboxTextPaletteMap, ringPaletteMap, FormStyle } from '../../palette-service';\nimport { Label } from '../label/label';\n\n// ==============================================\n// Types\n// ==============================================\n\nexport type ChVariantType = 'solid' | 'regular'\nexport type ShapeType = 'square' | 'circle'\n\n\n// ==============================================\n// Class\n// ==============================================\n\n@Component({\n selector: 'ZS-checkbox',\n imports: [Label, CommonModule],\n templateUrl: './checkbox.html',\n styleUrl: './checkbox.css'\n})\nexport class Checkbox {\n // ==============================================\n // Inputs\n // ==============================================\n\n readonly Id = input<string>(crypto.randomUUID());\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n readonly inputStyle = input<FormStyle>('secondary');\n readonly size = input<BaseSize>('md');\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n\n readonly variant = input<ChVariantType>('regular');\n readonly shape = input<ShapeType>('square');\n\n\n // ==============================================\n // Model\n // ==============================================\n\n readonly value = model<boolean>(false);\n\n\n // ==============================================\n // Computed Signals\n // ==============================================\n\n readonly palette = computed<{\n checkboxTextPalette: { checkBoxText: string, checkBoxTextHover: string },\n ringPalette: { ring: string }\n }>(\n () => {\n const checkboxTextPalette = checkboxTextPaletteMap.get(this.inputStyle())!;\n const ringPalette = ringPaletteMap.get(this.inputStyle())!;\n return { checkboxTextPalette, ringPalette }\n }\n );\n\n readonly iconClasses = computed<string>(() => {\n const v: ChVariantType = this.variant()\n const s: ShapeType = this.shape()\n\n const variantClass: Record<'true' | 'false', Record<ChVariantType, string>> = {\n true: {\n solid: 'fa-solid',\n regular: 'fa-regular'\n },\n false: {\n solid: 'fa-regular',\n regular: 'fa-regular'\n }\n }\n const shapeClass: Record<'true' | 'false', Record<ShapeType, string>> = {\n true: {\n square: 'fa-square-check',\n circle: 'fa-circle-check'\n },\n false: {\n square: 'fa-square',\n circle: 'fa-circle'\n },\n }\n\n const disabledClass = this.disabled() ? 'zs:opacity-60' : '';\n const interactionClass = this.disabledOrReadonly() ? 'zs:cursor-not-allowed' : '';\n\n const state = this.value() ? 'true' : 'false' as ('true' | 'false');\n return [\n variantClass[state][v],\n shapeClass[state][s],\n disabledClass,\n interactionClass\n ].filter(Boolean).join(' ')\n })\n\n readonly sizeClass = computed<string>(() => {\n const sizeClasses: Record<BaseSize, string> = {\n sm: 'zs:text-[20px]',\n md: 'zs:text-[30px]',\n lg: 'zs:text-[45px]'\n }\n return sizeClasses[this.size()]\n });\n\n readonly isChecked = computed<boolean>(() => this.value());\n readonly disabledOrReadonly = computed<boolean>(() => this.disabled() || this.isReadonly());\n\n\n // ==============================================\n // Handlers\n // ==============================================\n\n toggleChecked() {\n if (this.disabledOrReadonly()) return;\n this.value.update(v => !v);\n }\n\n onKeyDown(event: KeyboardEvent) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.toggleChecked();\n }\n }\n}","<div class=\"zs:flex zs:items-center zs:justify-start zs:w-full zs:select-none\">\n <!-- ===================== Checkbox Wrapper ===================== -->\n <div\n class=\"zs:cursor-pointer group leading-none\"\n >\n <!-- ===================== Hidden Input (Native for screen readers) ===================== -->\n <input\n type=\"checkbox\"\n class=\"zs:hidden\"\n [id]=\"Id()\"\n [checked]=\"isChecked()\"\n [disabled]=\"disabledOrReadonly()\"\n (change)=\"toggleChecked()\"\n />\n\n <!-- ===================== Custom Accessible Checkbox ===================== -->\n <span\n role=\"'checkbox'\"\n tabindex=\"0\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.aria-disabled]=\"disabledOrReadonly()\"\n [attr.aria-labelledby]=\"Id() + '-label'\"\n [ngClass]=\"[\n sizeClass(),\n palette().checkboxTextPalette.checkBoxText,\n palette().checkboxTextPalette.checkBoxTextHover,\n palette().ringPalette.ring,\n 'zs:leading-none zs:inline-flex zs:items-center zs:justify-center zs:focus:outline-hidden zs:focus-visible:ring-2'\n ]\"\n (click)=\"toggleChecked()\"\n (keydown)=\"onKeyDown($event)\"\n >\n <i [class]=\"iconClasses()\"></i>\n </span>\n </div>\n\n <!-- ===================== Label (ZS-label component) ===================== -->\n <ZS-label [class]=\"(label() || hint()) ? 'zs:ml-1' : ''\"\n [id]=\"Id() + '-label'\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [hintId]=\"Id() + '-hint'\"\n [size]=\"size()\"\n [for]=\"Id()\"\n ></ZS-label>\n</div>","import { Component, computed, inject, input } from '@angular/core';\nimport { ExtractorService } from '../../extractor-service/extractor-service';\n\n// ==============================================================================\n// Component Definition\n// ==============================================================================\n\n@Component({\n selector: 'ZS-input-errors',\n imports: [],\n templateUrl: './input-errors.html',\n styleUrl: './input-errors.css'\n})\nexport class InputErrors {\n // ==============================================================================\n // Service\n // ==============================================================================\n readonly extractorService: ExtractorService = inject(ExtractorService)\n\n\n // ==============================================================================\n // Inputs\n // ==============================================================================\n\n readonly Id = input<string>(crypto.randomUUID());\n readonly errors = input<(string[])[]>([]);\n\n // ==============================================================================\n // Computed Signals\n // ==============================================================================\n\n readonly extractedErrors = computed<string[]>(() => this.extractorService.extract(this.errors()))\n}\n","<!-- ========================= Error Messages ========================= -->\n@if (extractedErrors().length) {\n <ul\n [id]=\"Id() + '-error'\"\n class=\"zs:mt-1 zs:text-xs zs:text-red-500 zs:flex zs:flex-col zs:gap-1\"\n role=\"status\"\n aria-live=\"polite\"\n >\n @for (err of extractedErrors(); track $index) {\n <li class=\"zs:flex zs:items-center zs:gap-2\">\n <i class=\"fa fa-circle zs:text-[6px]\" aria-hidden=\"true\"></i>\n <span>{{ err }}</span>\n </li>\n }\n </ul>\n}","// ==============================================================================\n// Imports\n// ==============================================================================\n\nimport { Component, computed, ElementRef, input, model, output, viewChild } from '@angular/core';\nimport { FormStyle, inputPaletteMap, ringPaletteMap } from '../../palette-service';\nimport { ChangeEventType, ValidatorFn } from '../input/input';\nimport { Label } from '../label/label';\nimport { InputErrors } from '../input-errors/input-errors';\nimport { CommonModule } from '@angular/common';\nimport { Button } from '../button/button';\n\n// ==============================================================================\n// Types & Interfaces\n// ==============================================================================\n\nexport interface FileData {\n name: string;\n size: number;\n type: string;\n url?: string;\n}\n\nexport type FilesType = Map<string, FileData>;\n\n// ==============================================================================\n// Component Metadata\n// ==============================================================================\n\n@Component({\n selector: 'ZS-file',\n imports: [Label, InputErrors, CommonModule, Button],\n templateUrl: './file.html',\n styleUrl: './file.css'\n})\nexport class FileInput {\n\n // ==============================================================================\n // Inputs\n // ==============================================================================\n\n readonly Id = input<string>(crypto.randomUUID());\n readonly iName = input<string | null>(null);\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n readonly placeholder = input<string | null>(null);\n readonly inputStyle = input<FormStyle>('secondary');\n\n readonly autofocus = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly validateFns = input<ValidatorFn<FileData[]>[]>([]);\n\n readonly accept = input<string>('');\n readonly multiple = input<boolean>(false);\n readonly maxSize = input<number>(5 * 1024 * 1024); // 5MB\n readonly allowPreview = input<boolean>(true);\n readonly maxFiles = input<number | 'infinity'>('infinity');\n\n // ==============================================================================\n // Outputs\n // ==============================================================================\n\n readonly changeEv = output<ChangeEventType<FileData[]>>();\n\n // ==============================================================================\n // Model\n // ==============================================================================\n\n readonly files = model<FilesType>(new Map());\n readonly touched = model<boolean>(false); // Tracks if the user has interacted with the input\n\n // ==============================================================================\n // ViewChild\n // ==============================================================================\n\n readonly fileInputRef = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n // ==============================================================================\n // Computed Properties\n // ==============================================================================\n\n readonly palette = computed<{\n inputPalette: {\n border: string;\n borderHover: string;\n inputBg: string;\n text: string;\n };\n ringPalette: {\n ring: string;\n };\n }>(() => {\n const inputPalette = inputPaletteMap.get(this.inputStyle())!;\n const ringPalette = ringPaletteMap.get(this.inputStyle())!;\n return { inputPalette, ringPalette};\n });\n\n readonly hasFiles = computed<boolean>(() => this.files().size > 0);\n\n readonly totalSize = computed<number>(() =>\n this.filesMapToList().reduce((sum, f) => sum + f.size, 0)\n );\n\n readonly disabledOrReadonly = computed<boolean>(() => this.disabled() || this.isReadonly());\n\n readonly error = computed<string[]>(() => {\n const hasFiles = this.hasFiles();\n const files = this.files();\n const required = this.required();\n const totalSize = this.totalSize();\n const maxSize = this.maxSize();\n const maxFiles = this.maxFiles();\n const accept = this.accept();\n\n // Only validate after user interaction\n if (!this.touched()) return [];\n\n const errors: string[] = [];\n\n // Required validation\n if (required && !hasFiles) {\n errors.push('This field is required');\n }\n\n // Max size validation\n if (totalSize > maxSize) {\n errors.push(`Total file size exceeds ${this.formatSize(maxSize)}`);\n }\n\n // Max files validation\n if (maxFiles !== 'infinity' && files.size > maxFiles) {\n errors.push(`Total number of files exceeds ${maxFiles}`);\n }\n\n // Accept (file type) validation\n const invalidFiles = this.filesMapToList().filter(f => !this.matchesAccept(f, accept));\n if (invalidFiles.length > 0) {\n const names = invalidFiles.map(f => f.name).join(', ');\n errors.push(`Some files have unsupported types: ${names}`);\n }\n\n // Custom validators\n for (const fn of this.validateFns()) {\n const result = fn(this.filesMapToList());\n if (Array.isArray(result)) errors.push(...result);\n }\n\n return errors.length > 0 ? errors : [];\n });\n\n readonly filesMapToList = computed<FileData[]>(() => {\n const files = this.files();\n return files.size ? Array.from(files.values()) : [];\n });\n\n // ==============================================================================\n // Event Handlers\n // ==============================================================================\n\n handleFileChange(event: Event): void {\n if (this.disabledOrReadonly()) return;\n\n const input = event.target as HTMLInputElement;\n if (!input.files) return;\n\n const selected: FileData[] = Array.from(input.files).map(f => ({\n name: f.name,\n size: f.size,\n type: f.type,\n url: this.allowPreview() ? URL.createObjectURL(f) : undefined,\n }));\n\n this.files.update((prev: FilesType) => {\n const multiple = this.multiple();\n const next = multiple ? new Map(prev) : new Map<string, FileData>();\n\n for (const nf of selected) {\n next.set(this.fileKey(nf), nf);\n }\n\n return next;\n });\n\n this.touched.set(true);\n this.emitChangeValue(this.filesMapToList(), false);\n\n // Reset native <input> value to allow re-selecting the same file\n input.value = '';\n }\n\n removeFile(id: string): void {\n if (this.isReadonly() || this.disabled()) return;\n\n this.files.update((prev: FilesType) => {\n const next = new Map(prev);\n const file = prev.get(id);\n\n if (file?.url?.startsWith('blob:')) {\n URL.revokeObjectURL(file.url);\n }\n\n next.delete(id);\n return next;\n });\n\n this.emitChangeValue(this.filesMapToList(), false);\n\n // Reset native file input\n const inputEl = this.fileInputRef()?.nativeElement;\n if (inputEl) {\n inputEl.value = '';\n }\n }\n\n // ==============================================================================\n // Public Methods\n // ==============================================================================\n\n /** Forces the input to trigger a manual change event */\n public forceChange(fromForce: boolean = true): void {\n this.touched.set(true);\n this.emitChangeValue(this.filesMapToList(), fromForce);\n }\n\n\n // ==============================================================================\n // Private Helpers\n // ==============================================================================\n\n formatSize(size: number): string {\n if (size < 1024) return `${size} B`;\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`;\n return `${(size / 1024 / 1024).toFixed(1)} MB`;\n }\n\n preview(url: string | undefined): void {\n if (!url) return;\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n\n private fileKey(f: FileData): string {\n return `${f.name}_${f.size}_${f.type}`;\n }\n\n private emitChangeValue(value: FileData[], fromForce: boolean = true): void {\n const valid = this.error().length === 0;\n this.changeEv.emit({ value, valid, fromForce });\n }\n\n private matchesAccept(file: FileData, accept: string): boolean {\n if (!accept) return true;\n\n const types = accept.split(',').map(t => t.trim().toLowerCase());\n\n return types.some(type => {\n if (type === '*/*') return true;\n\n // Wildcard MIME types (e.g., image/*)\n if (type.endsWith('/*')) {\n const baseType = type.split('/')[0];\n return file.type.startsWith(`${baseType}/`);\n }\n\n // Exact MIME type match\n if (type.includes('/') && !type.startsWith('.')) {\n return file.type === type;\n }\n\n // File extension match (e.g., .jpg)\n if (type.startsWith('.')) {\n return file.name.toLowerCase().endsWith(type);\n }\n\n // Fallback: partial match in MIME type\n return file.type.includes(type);\n });\n }\n\n // ==============================================================================\n // Lifecycle Hooks\n // ==============================================================================\n\n ngOnDestroy(): void {\n this.files().forEach(f => {\n if (f.url?.startsWith('blob:')) {\n URL.revokeObjectURL(f.url);\n }\n });\n }\n}","<div\n class=\"zs:flex zs:flex-col zs:gap-2 zs:w-full\"\n [ngClass]=\"disabled() ? 'zs:opacity-60' : ''\"\n role=\"group\"\n [attr.aria-labelledby]=\"Id() + '-label'\"\n [attr.aria-describedby]=\"Id() + '-hint ' + Id() + '-error'\"\n>\n <!-- ========================= Label & Hint ========================= -->\n <ZS-label [class]=\"(label() || hint()) ? 'zs:mb-1' : ''\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [required]=\"required()\"\n [hintId]=\"Id() + '-hint'\"\n [for]=\"Id()\"\n [id]=\"Id() + '-label'\"\n >\n </ZS-label>\n\n <!-- ================= Input ================= -->\n <div\n [class]=\"[\n 'zs:relative zs:rounded-xl zs:flex zs:flex-col zs:justify-center zs:items-center zs:gap-2 zs:border-2 zs:border-dashed zs:transition-all zs:duration-200',\n palette().inputPalette.border,\n palette().ringPalette.ring,\n palette().inputPalette.borderHover,\n palette().inputPalette.inputBg\n ].join(' ')\"\n [ngClass]=\"disabledOrReadonly() ? 'cursor-not-allowed' : 'cursor-pointer'\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-disabled]=\"disabledOrReadonly()\"\n [attr.aria-label]=\"placeholder() || 'Upload file'\"\n (keydown.enter)=\"!disabledOrReadonly() && fileInput.click()\"\n (keydown.space)=\"!disabledOrReadonly() && fileInput.click()\"\n >\n <input\n #fileInput\n type=\"file\"\n [id]=\"Id()\"\n [name]=\"iName()\"\n [attr.accept]=\"accept()\"\n [attr.multiple]=\"multiple() ? '' : null\"\n [attr.autofocus]=\"autofocus() ? true : null\"\n class=\"zs:absolute zs:inset-0 zs:opacity-0 zs:cursor-pointer\"\n [disabled]=\"disabledOrReadonly()\"\n (change)=\"handleFileChange($event)\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"!!error().length\"\n [attr.aria-describedby]=\"Id() + '-hint ' + Id() + '-error'\"\n />\n\n <div class=\"zs:flex zs:flex-col zs:items-center zs:justify-center zs:text-center zs:py-6 zs:pointer-events-none zs:select-none\">\n <i class=\"fa-solid fa-upload text-3xl mb-2\" [ngClass]=\"palette().inputPalette.text\" aria-hidden=\"true\"></i>\n <p class=\"zs:text-sm zs:text-gray-500 zs:dark:text-gray-400\">\n {{ placeholder() }}\n </p>\n </div>\n </div>\n\n <!-- ================= Files Preview ================= -->\n @if (hasFiles()) {\n <div\n class=\"zs:flex zs:flex-col zs:gap-2 zs:mt-3\"\n role=\"list\"\n aria-label=\"Uploaded files\"\n >\n @for (entry of files().entries(); track entry[0]) {\n <div\n class=\"zs:flex zs:flex-col zs:gap-1 zs:p-2 zs:rounded-lg zs:border zs:focus:outline-hidden zs:focus:ring-2 zs:focus:ring-offset-2\"\n [ngClass]=\"[palette().inputPalette.border, palette().inputPalette.inputBg]\"\n role=\"listitem\"\n tabindex=\"0\"\n >\n <span class=\"zs:block zs:text-sm zs:font-medium zs:truncate\">\n {{ entry[1].name }}\n </span>\n\n <div class=\"zs:flex zs:items-center zs:justify-between zs:gap-4\">\n <div class=\"zs:flex zs:items-center zs:gap-1\">\n <i class=\"text-lg fa-solid fa-file\" [ngClass]=\"palette().inputPalette.text\" aria-hidden=\"true\"></i>\n <span class=\"zs:text-xs zs:text-gray-500\">\n {{ formatSize(entry[1].size) }}\n </span>\n </div>\n\n <div class=\"zs:flex zs:gap-2\">\n @if (allowPreview() && entry[1].url?.startsWith('blob:')) {\n <ZS-button\n type=\"button\"\n (clickedEv)=\"preview(entry[1].url)\"\n [btnStyle]=\"inputStyle()\"\n size=\"sm\"\n aria-label=\"Preview {{ entry[1].name }}\"\n >\n Preview\n </ZS-button>\n }\n\n @if (!disabledOrReadonly()) {\n <ZS-button\n type=\"button\"\n variant=\"outline\"\n btnStyle=\"danger\"\n (clickedEv)=\"removeFile(entry[0])\"\n icon=\"fa-solid fa-trash\"\n aria-label=\"Remove {{ entry[1].name }}\"\n >\n </ZS-button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- ========================= Error Messages ========================= -->\n <ZS-input-errors\n [Id]=\"Id() + '-error'\"\n [errors]=\"[error()]\"\n aria-live=\"assertive\"\n role=\"alert\"\n >\n </ZS-input-errors>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { inputPaletteMap, BaseSize, FormStyle, ringPaletteMap } from '../../palette-service';\nimport { Label } from '../label/label';\nimport { InputErrors } from '../input-errors/input-errors';\n\n// ==============================================================================\n// Types\n// ==============================================================================\n\nexport type DateType = \n | 'date' \n | 'datetime-local' \n | 'month' \n | 'week' \n | 'time';\n\nexport type InputType = \n | DateType \n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'tel'\n | 'phone'\n | 'url'\n | 'search';\n\nexport type ValidatorFn<T = string | null> = (value: T) => string[];\nexport type FormatterFn = (value: string | null) => string | null;\n\ntype SizeClassesType = 'container' | 'field' | 'leftIcon' | 'rightIcon';\n\nexport interface ChangeEventType<T = string | null> {\n value: T;\n valid: boolean;\n fromForce: boolean;\n}\n// ==============================================================================\n// Constants & Regex\n// ==============================================================================\n\nconst SIZE_CLASSES_MAP = new Map<SizeClassesType, Record<BaseSize, string>>([\n [\n 'container',\n {\n sm: 'zs:px-2 zs:py-1 zs:rounded-md',\n md: 'zs:px-3 zs:py-2 zs:rounded-lg',\n lg: 'zs:px-4 zs:py-3 zs:rounded-lg',\n },\n ],\n [\n 'field',\n {\n sm: 'zs:text-xs',\n md: 'zs:text-sm',\n lg: 'zs:text-base',\n },\n ],\n [\n 'leftIcon',\n {\n sm: 'zs:text-sm zs:mr-1.5',\n md: 'zs:text-base zs:mr-2',\n lg: 'zs:text-lg zs:mr-2.5',\n },\n ],\n [\n 'rightIcon',\n {\n sm: 'zs:text-xs',\n md: 'zs:text-sm',\n lg: 'zs:text-base',\n },\n ],\n]);\n\nconst DATE_ICON_MAP: Record<DateType, string> = {\n date: 'fas fa-calendar',\n 'datetime-local': 'fas fa-calendar',\n month: 'fas fa-calendar-days',\n week: 'fas fa-calendar-week',\n time: 'fas fa-clock',\n};\n\nconst ICONS = {\n spinner: 'fas fa-spinner fa-spin',\n};\n\nconst PHONE_REGEX: RegExp = /^\\+?[0-9\\s\\-()]{7,20}$/;\nconst EMAIL_REGEX: RegExp = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n// ==============================================================================\n// Component Definition\n// ==============================================================================\n\n@Component({\n selector: 'ZS-input',\n imports: [CommonModule, Label, InputErrors],\n templateUrl: './input.html',\n styleUrl: './input.css'\n})\nexport class Input {\n // ==============================================================================\n // Inputs\n // ==============================================================================\n\n readonly Id = input<string>(crypto.randomUUID());\n readonly iName = input<string | null>(null);\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n readonly placeholder = input<string | null>(null);\n readonly type = input<InputType>('text');\n readonly inputStyle = input<FormStyle>('secondary');\n\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n readonly autocomplete = input<string | null>('off');\n readonly required = input<boolean>(false);\n readonly inputmode = input<string | null>(null);\n\n readonly icon = input<string | null>(null);\n readonly showSearchIcon = input<boolean>(false);\n readonly showLoaderIconOnSearchInput = input<boolean>(false);\n\n readonly maxlength = input<number | null>(null);\n readonly minlength = input<number | null>(null);\n readonly spellcheck = input<boolean>(false);\n\n readonly min = input<string | number | null>(null);\n readonly max = input<string | number | null>(null);\n readonly step = input<number | null>(null);\n\n readonly validateFns = input<ValidatorFn<string | null>[]>([]);\n readonly formatFn = input<FormatterFn>((val) => val?.trim() ?? null);\n\n readonly autofocus = input<boolean>(false);\n readonly searchDebounceDelay = input<number>(300);\n readonly size = input<BaseSize>('md');\n\n // ==============================================================================\n // ViewChild\n // ==============================================================================\n\n readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n\n // ==============================================================================\n // Model\n // ==============================================================================\n\n readonly value = model<string | null>(null);\n readonly touched = model<boolean>(false); // Tracks if the user has interacted with the input\n\n // ==============================================================================\n // Outputs\n // ==============================================================================\n\n readonly enterEv = output<void>();\n readonly focusEv = output<void>();\n readonly blurEv = output<void>();\n readonly changedEv = output<ChangeEventType<string | null>>();\n readonly searchEv = output<string | null>();\n readonly clearedEv = output<void>();\n readonly keydownEv = output<KeyboardEvent>();\n\n // ==============================================================================\n // Internal State (Signals)\n // ==============================================================================\n\n readonly showPassword = signal<boolean>(false);\n private searchDebounceTimer?: ReturnType<typeof setTimeout>;\n readonly loaderIconOnSearchInput = signal<string | null>(null); // Fixed typo: \"Serach\" → \"Search\"\n\n // ==============================================================================\n // Computed Properties\n // ==============================================================================\n\n readonly disabledOrReadonly = computed<boolean>(() => this.disabled() || this.isReadonly());\n\n readonly containerClasses = computed<string>(() => {\n const baseClasses = 'zs:border zs:transition-all zs:duration-150 zs:focus-within:ring-2';\n const hasError = this.error().length;\n\n let styleConfig = inputPaletteMap.get(this.inputStyle())!;\n const ringConfig = ringPaletteMap.get(this.inputStyle())!;\n if (hasError) {\n styleConfig = inputPaletteMap.get('danger')!;\n }\n\n const disabledClass = this.disabled() ? 'zs:opacity-60' : '';\n const interactionClass = this.disabledOrReadonly()\n ? 'zs:cursor-not-allowed'\n : 'zs:cursor-text';\n\n return [\n baseClasses,\n styleConfig.border,\n styleConfig.borderHover,\n styleConfig.inputBg,\n styleConfig.text,\n ringConfig.ring,\n disabledClass,\n interactionClass,\n ]\n .filter(Boolean)\n .join(' ');\n });\n\n // Computed date icon\n readonly isDate = computed<boolean>(() => {\n const dateTypes: DateType[] = ['date', 'datetime-local', 'month', 'week', 'time'];\n return dateTypes.includes(this.type() as DateType);\n });\n \n readonly dateIcon = computed<string>(() => {\n if (this.icon()) return '';\n return DATE_ICON_MAP[this.type() as DateType] || 'fas fa-calendar';\n });\n\n readonly showClear = computed<boolean>(() => this.type() !== 'password' && !!this.value());\n\n readonly error = computed<string[]>(() => {\n const val = this.value();\n const type = this.type();\n const required = this.required();\n const minlength = this.minlength();\n const maxlength = this.maxlength();\n const min = this.min();\n const max = this.max();\n\n // Only validate after user interaction\n if (!this.touched()) return [];\n\n const errors: string[] = [];\n\n // Required validation\n if (required && !val) {\n errors.push('This field is required');\n }\n\n // Min length\n if (minlength !== null && val && val.length < minlength) {\n errors.push(`The value must be at least ${minlength} characters`);\n }\n\n // Max length\n if (maxlength !== null && val && val.length > maxlength) {\n errors.push(`The value must be at most ${maxlength} characters`);\n }\n\n // Email format\n if (type === 'email' && val && !EMAIL_REGEX.test(val)) {\n errors.push('Please enter a valid email address');\n }\n\n // Number range & validity\n if (type === 'number' && val) {\n const num = Number(val);\n if (Number.isNaN(num)) {\n errors.push('Please enter a valid number');\n } else {\n if (min !== null && num < Number(min)) {\n errors.push(`The value must be at least ${min}`);\n }\n if (max !== null && num > Number(max)) {\n errors.push(`The value must be at most ${max}`);\n }\n }\n }\n\n // Date/Time Range Validation\n if (this.isDate() && val) {\n const valueTime = new Date(val).getTime();\n\n const minDate = min ? new Date(min as string).getTime() : null;\n const maxDate = max ? new Date(max as string).getTime() : null;\n\n if (minDate !== null && valueTime < minDate) {\n errors.push(`The date must be on or after ${min}`);\n }\n if (maxDate !== null && valueTime > maxDate) {\n errors.push(`The date must be on or before ${max}`);\n }\n }\n\n // Phone format\n if (type === 'phone' && val && !PHONE_REGEX.test(val)) {\n errors.push('Please enter a valid phone number');\n }\n\n // URL validity\n if (type === 'url' && val) {\n try {\n new URL(val);\n } catch {\n errors.push('Please enter a valid URL');\n }\n }\n\n // Custom validator\n for (const fn of this.validateFns()) {\n const result = fn(val);\n if (Array.isArray(result)) errors.push(...result);\n }\n\n return errors.length > 0 ? errors : [];\n });\n\n readonly supportsMinMaxStep = computed<boolean>(() => {\n const t = this.type();\n return this.isDate() || ['number'].includes(t);\n })\n\n // ==============================================================================\n // Getters\n // ==============================================================================\n\n get actualType(): string {\n if (this.type() === 'phone') return 'tel';\n if (this.type() === 'search') return 'text';\n if (this.type() === 'password' && this.showPassword()) return 'text';\n return this.type();\n }\n\n getSize(type: SizeClassesType): string {\n return SIZE_CLASSES_MAP.get(type)?.[this.size()] ?? '';\n }\n\n // ==============================================================================\n // Lifecycle Hooks\n // ==============================================================================\n\n ngAfterViewInit() {\n if (this.autofocus()) {\n queueMicrotask(() => this.inputEl()?.nativeElement.focus());\n }\n }\n\n // ==============================================================================\n // Event Handlers\n // ==============================================================================\n focusInput(event: MouseEvent): void {\n const input = (event.currentTarget as HTMLElement).querySelector('input');\n input?.focus();\n }\n\n onInput(event: Event): void {\n if (this.disabledOrReadonly()) return;\n\n const value = (event.target as HTMLInputElement).value;\n this.value.set(value);\n\n // Handle search input with debounce and loader\n if (this.type() === 'search') {\n if (this.showLoaderIconOnSearchInput()) {\n this.loaderIconOnSearchInput.set(ICONS.spinner);\n }\n\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n }\n\n this.searchDebounceTimer = setTimeout(() => {\n this.searchEv.emit(this.value());\n this.loaderIconOnSearchInput.set(null);\n }, this.searchDebounceDelay());\n }\n }\n\n onEnter(): void {\n if (this.disabledOrReadonly()) return;\n this.enterEv.emit();\n }\n\n onFocus(): void {\n this.focusEv.emit();\n }\n\n onBlur(): void {\n if (this.disabledOrReadonly()) return;\n this.touched.set(true);\n this.value.set(this.formatFn()(this.value()));\n this.blurEv.emit();\n }\n\n onChange(): void {\n if (this.disabledOrReadonly()) return;\n this.touched.set(true);\n\n this.emitChangeValue(this.value(), false);\n }\n\n onSearch(): void {\n if (this.disabledOrReadonly()) return;\n this.searchEv.emit(this.value());\n }\n\n clear(): void {\n if (this.disabledOrReadonly()) return;\n this.value.set(null);\n\n this.emitChangeValue(null, false);\n\n this.searchEv.emit(null);\n this.clearedEv.emit();\n }\n\n togglePassword(): void {\n if (this.disabledOrReadonly()) return;\n this.showPassword.update((v) => !v);\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.disabledOrReadonly()) return;\n this.keydownEv.emit(event);\n }\n\n /** Forces the input to trigger a manual change event */\n public forceChange(fromForce: boolean = true): void {\n // Applies the same logic as natural change.\n this.touched.set(true);\n this.value.set(this.formatFn()(this.value()));\n\n this.emitChangeValue(this.value(), fromForce);\n }\n\n private emitChangeValue(value: string | null, fromForce: boolean = true): void {\n const valid = this.error().length === 0;\n this.changedEv.emit({ value, valid, fromForce });\n }\n}","<!-- ==============================================\n Input Field Component (ZS-Input)\n ============================================== -->\n\n<div class=\"zs:w-full\">\n\n <!-- ========================= Label & Hint ========================= -->\n <ZS-label [class]=\"(label() || hint()) ? 'zs:mb-1' : ''\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [required]=\"required()\"\n [hintId]=\"Id() + '-hint'\"\n [size]=\"size()\"\n [for]=\"Id()\"\n >\n </ZS-label>\n\n <!-- ========================= Input Container ========================= -->\n <div\n class=\"zs:relative zs:flex zs:items-center zs:w-full\"\n [class]=\"containerClasses() + ' ' + getSize('container')\"\n (click)=\"focusInput($event)\"\n >\n\n <!-- ========================= Left Icon ========================= -->\n @if (icon() || loaderIconOnSearchInput() || isDate()) {\n <i\n [ngClass]=\"(\n loaderIconOnSearchInput()\n ? loaderIconOnSearchInput()\n : \n icon() ? icon() : dateIcon()\n ) + ' ' + getSize('leftIcon')\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <!-- ========================= Input Field ========================= -->\n <input\n #inputEl\n [id]=\"Id()\"\n [name]=\"iName()\"\n [type]=\"actualType\"\n [attr.placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"disabled() ? true : null\"\n [attr.min]=\"supportsMinMaxStep() ? min() : null\"\n [attr.max]=\"supportsMinMaxStep() ? max() : null\"\n [attr.step]=\"supportsMinMaxStep() ? step() : null\"\n [attr.required]=\"required() ? true : null\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"onEnter()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (change)=\"onChange()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.minlength]=\"minlength()\"\n [attr.autofocus]=\"autofocus() ? true : null\"\n [attr.readonly]=\"isReadonly() ? true : null\"\n [attr.aria-invalid]=\"!!error()\"\n [attr.inputmode]=\"inputmode()\"\n [spellcheck]=\"spellcheck()\"\n class=\"zs:flex-1 zs:bg-transparent zs:outline-hidden zs:caret-current zs:w-full\"\n [class]=\"getSize('field')\"\n [attr.aria-describedby]=\"\n (hint() ? Id() + '-hint' : '') +\n (hint() && error() ? ' ' : '') +\n (error() ? Id() + '-error' : '')\n \"\n />\n\n <!-- ========================= Spacer (Maintains Height) ========================= -->\n <div class=\"zs:h-6\"></div>\n\n <!-- ========================= Password Toggle ========================= -->\n @if (type() === 'password') {\n <button\n type=\"button\"\n (click)=\"togglePassword()\"\n [attr.aria-pressed]=\"showPassword()\"\n class=\"zs:ml-1 zs:px-1 zs:text-slate-500 zs:hover:text-slate-700 \n zs:dark:text-slate-400 zs:dark:hover:text-slate-200\"\n [attr.aria-label]=\"showPassword() ? 'Hide password' : 'Show password'\"\n >\n <i\n class=\"fa\"\n [class]=\"(showPassword() ? 'fa-eye-slash' : 'fa-eye') + ' ' + getSize('rightIcon')\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n\n <!-- ========================= Clear Button ========================= -->\n @if (showClear() && !disabledOrReadonly()) {\n <button\n type=\"button\"\n (click)=\"clear()\"\n class=\"zs:ml-1 zs:px-1 zs:text-slate-500 zs:hover:text-slate-700 \n zs:dark:text-slate-400 zs:dark:hover:text-slate-200\"\n [attr.aria-label]=\"'Clear ' + (label() || 'input')\"\n >\n <i\n class=\"fa fa-times\"\n [class]=\"getSize('rightIcon')\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n\n <!-- ========================= Search Icon ========================= -->\n @if (type() === 'search' || showSearchIcon()) {\n <button\n type=\"button\"\n (click)=\"onSearch()\"\n class=\"zs:ml-1 zs:px-1 zs:text-slate-500 zs:hover:text-slate-700 \n zs:dark:text-slate-400 zs:dark:hover:text-slate-200\"\n aria-label=\"Search\"\n >\n <i\n class=\"fa fa-search\"\n [class]=\"getSize('rightIcon')\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n\n </div>\n\n <!-- ========================= Error Messages ========================= -->\n <ZS-input-errors\n [Id]=\"Id()\"\n [errors]=\"[error()]\"\n >\n </ZS-input-errors>\n\n</div>","// ==============================================\n// Imports\n// ==============================================\nimport {\n Component,\n ChangeDetectionStrategy,\n computed,\n input,\n model,\n signal,\n ElementRef,\n viewChild,\n effect,\n} from '@angular/core';\nimport { BaseSize, buttonSolidPaletteMap, FormStyle, inputPaletteMap } from '../../palette-service';\nimport { Label } from '../label/label';\nimport { CommonModule } from '@angular/common';\n\n// ==============================================\n// Component Metadata\n// ==============================================\n@Component({\n selector: 'ZS-range',\n imports: [Label, CommonModule],\n templateUrl: './range.html',\n styleUrl: './range.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Range {\n\n // ==============================================\n // Inputs\n // ==============================================\n readonly Id = input<string>(crypto.randomUUID());\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n\n readonly min = input<number>(10);\n readonly max = input<number>(400);\n readonly step = input<number>(10);\n\n readonly inputStyle = input<FormStyle>('secondary');\n readonly size = input<BaseSize>('md');\n\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n\n readonly showValue = input<boolean>(true);\n\n // ==============================================\n // Model\n // ==============================================\n readonly value = model<number>(200);\n\n // ==============================================\n // References & Internal State\n // ==============================================\n readonly trackRef = viewChild<ElementRef<HTMLDivElement>>('track');\n readonly dragging = signal<boolean>(false);\n\n // ==============================================\n // Computed Properties\n // ==============================================\n readonly disabledOrReadonly = computed<boolean>(() => this.disabled() || this.isReadonly());\n\n readonly percent = computed<number>(() => {\n const range = this.max() - this.min();\n return ((this.value() - this.min()) / range) * 100;\n });\n\n rangeSizeClasses = (type: 'size' | 'height'): string => {\n const sizeClasses: Record<'size' | 'height', Record<BaseSize, string>> = {\n height: {\n sm: 'zs:h-1.5',\n md: 'zs:h-2.5',\n lg: 'zs:h-3.5',\n },\n size: {\n sm: 'zs:size-3.5',\n md: 'zs:size-5',\n lg: 'zs:size-7',\n }\n }\n return sizeClasses[type][this.size()]\n }\n\n readonly dotCLasses = computed<string>(() => {\n const sizeClasses: Record<BaseSize, string> = {\n sm: 'zs:text-[6px]',\n md: 'zs:text-[10px]',\n lg: 'zs:text-[14px]',\n }\n return sizeClasses[this.size()]\n })\n\n readonly gapCLasses = computed<string>(() => {\n const sizeClasses: Record<BaseSize, string> = {\n sm: 'zs:gap-3.5',\n md: 'zs:gap-4',\n lg: 'zs:gap-6',\n }\n return sizeClasses[this.size()]\n })\n\n readonly palette = computed<{\n buttonSolidPalette: {\n btnBG: string;\n btnBGHover: string;\n };\n inputPalette: {\n border: string;\n borderHover: string;\n inputBg: string;\n text: string;\n };\n }>(() => {\n const buttonSolidPalette = buttonSolidPaletteMap.get(this.inputStyle())!;\n const inputPalette = inputPaletteMap.get(this.inputStyle())!;\n return { buttonSolidPalette, inputPalette }\n })\n\n readonly rangeClasses = computed<string>(() => {\n const base = 'zs:relative zs:w-full zs:rounded-full zs:cursor-pointer';\n const sizeClasses = this.rangeSizeClasses('height');\n const disabledClass = this.disabled() ? 'zs:opacity-60' : '';\n const interactionClass = !this.disabledOrReadonly() ? 'zs:group' : '';\n\n return [\n sizeClasses,\n this.palette().inputPalette.border,\n this.palette().inputPalette.inputBg,\n this.palette().inputPalette.text,\n base,\n disabledClass,\n interactionClass\n ].join(' ');\n });\n\n readonly ThumbClasses = computed<string>(() => {\n return [\n this.palette().buttonSolidPalette.btnBG,\n this.palette().buttonSolidPalette.btnBGHover,\n this.dragging() ? 'zs:scale-110 zs:shadow-lg' : '',\n this.rangeSizeClasses('size')\n ].join(' ')\n })\n\n // ==============================================\n // Event Handlers\n // ==============================================\n onMouseDown(event: MouseEvent): void {\n if (this.disabledOrReadonly()) return;\n this.dragging.set(true);\n this.updateValueFromEvent(event);\n }\n\n onMouseMove(event: MouseEvent): void {\n if (this.disabledOrReadonly() || !this.dragging()) return;\n this.updateValueFromEvent(event);\n }\n\n onMouseUp(): void {\n if (this.disabledOrReadonly()) return;\n this.dragging.set(false);\n }\n\n // ==============================================\n // Private Helpers\n // ==============================================\n private updateValueFromEvent(event: MouseEvent): void {\n if (this.disabledOrReadonly()) return;\n\n const track = this.trackRef()?.nativeElement;\n if (!track) return;\n\n const rect = track.getBoundingClientRect();\n const x = Math.min(Math.max(event.clientX - rect.left, 0), rect.width);\n const percent = x / rect.width;\n const rawValue = this.min() + percent * (this.max() - this.min());\n\n const stepped = Math.round(rawValue / this.step()) * this.step();\n this.value.set(Math.min(this.max(), Math.max(this.min(), stepped)));\n }\n\n calcThumbPosition(): string {\n const p = this.percent();\n const track = this.trackRef()?.nativeElement;\n if (!track) return `${p}%`;\n\n const trackWidth = track.offsetWidth; // عرض الشريط بالبكسل\n const displacementSizes: Record<BaseSize, number> = {\n sm: 6,\n md: 10,\n lg: 14,\n };\n\n const displacementPx = displacementSizes[this.size()];\n const displacementPercent = (displacementPx / trackWidth) * 100;\n\n const displacement = p - displacementPercent;\n return `${displacement}%`;\n }\n\n // ==============================================\n // Lifecycle & Side Effects\n // ==============================================\n constructor() {\n const mouseUpHandler = this.onMouseUp.bind(this);\n const mouseMoveHandler = this.onMouseMove.bind(this);\n\n effect((): (() => void) | void => {\n if (!this.dragging()) return;\n\n window.addEventListener('mouseup', mouseUpHandler);\n window.addEventListener('mousemove', mouseMoveHandler);\n\n return () => {\n window.removeEventListener('mouseup', mouseUpHandler);\n window.removeEventListener('mousemove', mouseMoveHandler);\n };\n });\n }\n}","<!-- ========================= Label ========================= -->\n<div class=\"zs:flex zs:flex-col zs:w-full zs:select-none\">\n <ZS-label [class]=\"(label() || hint()) ? 'zs:mb-1' : ''\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [hintId]=\"Id() + '-hint'\"\n [size]=\"size()\"\n [for]=\"Id()\"\n ></ZS-label>\n\n <!-- ========================= Slider Container ========================= -->\n <div class=\"zs:flex zs:items-center\"\n [class]=\"gapCLasses()\">\n \n <!-- ========================= Track ========================= -->\n <div\n #track\n [class]=\"rangeClasses()\"\n (mousedown)=\"onMouseDown($event)\"\n >\n \n <!-- ========================= Track Background ========================= -->\n <div\n class=\"zs:absolute zs:inset-0 zs:rounded-full zs:bg-linear-to-r zs:from-gray-200 zs:to-gray-300 zs:transition-all zs:duration-300 zs:group-hover:brightness-110\"\n [ngClass]=\"[\n ['secondary', 'dark'].includes(inputStyle()) ? 'zs:dark:from-gray-500 zs:dark:to-gray-600' : 'zs:dark:from-gray-700 zs:dark:to-gray-800',\n disabledOrReadonly() ? 'zs:cursor-not-allowed' : ''\n ]\"\n ></div>\n\n <!-- ========================= Fill (Progress) ========================= -->\n <div\n class=\"zs:absolute zs:left-0 zs:rounded-full zs:top-0 zs:h-full zs:transition-all zs:duration-200 zs:ease-out zs:shadow-sm\"\n [style.width.%]=\"percent()\"\n [ngClass]=\"[\n disabledOrReadonly() ? 'zs:cursor-not-allowed' : '',\n palette().buttonSolidPalette.btnBG,\n palette().buttonSolidPalette.btnBGHover\n ]\"\n ></div>\n\n <!-- ========================= Thumb (Handle) ========================= -->\n <div\n class=\"zs:absolute zs:top-1/2 zs:rounded-full zs:flex zs:items-center zs:justify-center \n zs:-translate-y-1/2 zs:transition-all zs:duration-200 zs:ease-out zs:shadow-md \n zs:group-hover:scale-110\"\n [style.left]=\"calcThumbPosition()\"\n [ngClass]=\"[ThumbClasses(), disabledOrReadonly() ? 'zs:cursor-not-allowed' : '']\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.id]=\"Id()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-disabled]=\"disabledOrReadonly() || null\"\n [attr.aria-readonly]=\"isReadonly() || null\"\n [attr.aria-labelledby]=\"Id() + '-label'\"\n [attr.aria-describedby]=\"hint() ? Id() + '-hint' : null\"\n aria-orientation=\"horizontal\"\n >\n <i class=\"fa-solid fa-circle zs:text-white\" [ngClass]=\"dotCLasses()\"></i>\n </div>\n </div>\n\n <!-- ========================= Value Display ========================= -->\n @if (showValue()) {\n <div class=\"zs:text-sm zs:text-gray-600 zs:dark:text-gray-300 zs:font-medium\">\n {{ value() }}\n </div>\n }\n </div>\n</div>","// =================================================================================================\n// Imports\n// =================================================================================================\nimport { \n Component, \n signal, \n computed, \n input, \n model, \n output, \n effect, \n inject\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { ChangeEventType, Input, ValidatorFn } from '../input/input';\nimport { Label } from '../label/label';\nimport { FormStyle, inputPaletteMap, selectPaletteMap } from '../../palette-service';\nimport { InputErrors } from '../input-errors/input-errors';\nimport { zIndices, ZIndicesType } from '../../z-index';\n\n\n// =================================================================================================\n// Interfaces\n// =================================================================================================\nexport interface DropdownItem<T> {\n id: T;\n name: string;\n [key: string]: any;\n}\n\n// =================================================================================================\n// Component Declaration\n// =================================================================================================\n@Component({\n selector: 'ZS-select',\n imports: [CommonModule, FormsModule, Input, Label, InputErrors],\n templateUrl: './select.html',\n styleUrl: './select.css'\n})\nexport class Select<T> {\n readonly zIndices: ZIndicesType = zIndices;\n\n // =================================================================================================\n // Inputs\n // =================================================================================================\n readonly Id = input<string>(crypto.randomUUID());\n readonly items = input.required<DropdownItem<T>[]>();\n\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n\n readonly required = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n\n readonly inputStyle = input<FormStyle>('secondary');\n readonly placeholder = input<string>('Select an option...');\n\n readonly showSearch = input<boolean>(true);\n readonly searchPlaceholder = input<string>('Search...');\n\n readonly noResultsText = input<string>('No results found');\n readonly showClearButton = input<boolean>(true);\n\n readonly searchDebounceDelay = input<number>(300);\n readonly showLoaderIconOnSearchInput = input<boolean>(false);\n\n readonly preselectedIds = input<(number | string)[]>([]);\n readonly multiple = input<boolean>(false);\n readonly validateFns = input<ValidatorFn<DropdownItem<T>[]>[]>([]);\n\n // =================================================================================================\n // Model (Two-way Binding)\n // =================================================================================================\n readonly selectedItems = model<DropdownItem<T>[]>([]);\n readonly touched = model<boolean>(false); // Tracks if the user has interacted with the input\n\n\n // =================================================================================================\n // Outputs\n // =================================================================================================\n readonly selectedItemsEv = output<ChangeEventType<DropdownItem<T>[]>>();\n readonly selectionClearedEv = output<void>();\n\n\n // =================================================================================================\n // Local Signals\n // =================================================================================================\n readonly isOpen = signal<boolean>(false);\n readonly searchQuery = signal<string | null>(null);\n\n\n // =================================================================================================\n // Computed Signals\n // =================================================================================================\n readonly styleEntry = computed<{\n inputEntry: {\n border: string;\n borderHover: string;\n inputBg: string;\n text: string;\n };\n selectEntry: {\n bgSelect: string;\n cleartext: string;\n cleartexthover: string;\n };\n }>(() => {\n const hasError = this.error().length;\n\n let inputEntry: {\n border: string;\n borderHover: string;\n inputBg: string;\n text: string;\n } = inputPaletteMap.get(this.inputStyle())!;\n\n let selectEntry: {\n bgSelect: string,\n cleartext: string,\n cleartexthover: string,\n } = selectPaletteMap.get(this.inputStyle())!;\n\n if(hasError) {\n selectEntry = selectPaletteMap.get('danger')!;\n inputEntry = inputPaletteMap.get('danger')!;\n }\n\n return { inputEntry, selectEntry }\n })\n\n readonly disabledOrReadonly = computed<boolean>(\n () => this.disabled() || this.isReadonly()\n );\n\n readonly filteredItems = computed<DropdownItem<T>[]>(() => {\n const query = this.searchQuery();\n if (!query) return this.items();\n\n const lowerQuery = query.toLowerCase();\n return this.items().filter(item =>\n item.name.toLowerCase().includes(lowerQuery)\n );\n });\n\n readonly containerClasses = computed<string>(() => {\n const base = `\n zs:border zs:transition-all zs:duration-150\n zs:flex zs:items-center zs:justify-between\n zs:w-full zs:min-w-48 zs:px-3 zs:py-2\n zs:rounded-lg zs:shadow-sm\n `.trim();\n\n const disabledCls = this.disabled() ? 'zs:opacity-60' : '';\n const cursorCls = this.disabledOrReadonly()\n ? 'zs:cursor-not-allowed'\n : 'zs:cursor-text';\n\n const inputEntry = this.styleEntry().inputEntry;\n return [\n base,\n inputEntry.border,\n inputEntry.borderHover,\n inputEntry.inputBg,\n inputEntry.text,\n disabledCls,\n cursorCls\n ].filter(Boolean).join(' ');\n });\n\n readonly clearClass = computed<string>(() => {\n const base = 'zs:mt-2 zs:text-sm zs:flex zs:items-center zs:transition-colors';\n return [\n base,\n this.styleEntry().selectEntry.cleartext,\n this.styleEntry().selectEntry.cleartexthover\n ].filter(Boolean).join(' ');\n });\n\n readonly showItemsClass = computed<string>(() => {\n return this.styleEntry().selectEntry.bgSelect ?? '';\n });\n\n readonly error = computed<string[]>(() => {\n const selectedItems = this.selectedItems();\n const required = this.required();\n\n // Only validate after user interaction\n if (!this.touched()) return [];\n\n const errors: string[] = [];\n\n // Required validation\n if (required && !selectedItems.length) {\n errors.push('This field is required');\n }\n\n // Custom validator\n for (const fn of this.validateFns()) {\n const result = fn(selectedItems);\n if (Array.isArray(result)) errors.push(...result);\n }\n\n return errors.length > 0 ? errors : [];\n });\n\n\n // =================================================================================================\n // Utility Methods\n // =================================================================================================\n readonly getBgSelectClasses = (selected: boolean): string => {\n return selected\n ? `${this.styleEntry().selectEntry.bgSelect} zs:hover:opacity-80`\n : 'zs:hover:bg-gray-200/50 zs:dark:hover:bg-gray-600/40';\n };\n\n\n // =================================================================================================\n // Lifecycle & Effects\n // =================================================================================================\n constructor() {\n effect(() => {\n const ids = this.preselectedIds();\n const items: DropdownItem<T>[] = ids\n ?.map(id => this.items().find(item => item.id === id))\n .filter((item): item is DropdownItem<T> => item !== undefined) ?? [];\n\n if (items.length > 0) {\n this.selectItem(items, true);\n } else if (ids.length === 0) {\n this.clearSelection();\n }\n });\n }\n\n\n // =================================================================================================\n // Public Methods\n // =================================================================================================\n toggleDropdown(): void {\n if (this.disabledOrReadonly()) return;\n\n this.isOpen.set(!this.isOpen());\n if (this.isOpen()) {\n this.searchQuery.set(null);\n }\n if (!this.isOpen()) this.touched.set(true)\n }\n\n selectItem(items: DropdownItem<T>[], isPreselectedIds: boolean = false): void {\n if (!items?.length || !items[0]) return;\n\n if (this.multiple()) {\n this.selectedItems.update(current => {\n const existing = current ?? [];\n const clicked = items[0];\n\n const alreadySelected = existing.some(i => i?.id === clicked.id);\n if (alreadySelected) {\n return existing.filter(i => i?.id !== clicked.id);\n } else {\n return [...existing, clicked];\n }\n });\n } else {\n this.selectedItems.set([items[0]]);\n this.isOpen.set(false);\n this.searchQuery.set(null);\n }\n\n if(isPreselectedIds) return;\n this.touched.set(true)\n this.emitChangeValue(this.selectedItems(), false);\n }\n\n clearSelection(): void {\n if (this.disabledOrReadonly()) return;\n\n this.selectedItems.set([]);\n this.selectionClearedEv.emit();\n }\n\n inSelectItems(item?: DropdownItem<T>): boolean {\n if (!item) return false;\n return this.selectedItems()?.some(i => i?.id === item.id) ?? false;\n }\n\n trackByFn(_index: number, item: DropdownItem<T>): T {\n return item.id;\n }\n\n /** Forces the input to trigger a manual change event */\n public forceChange(fromForce: boolean = true): void {\n // Applies the same logic as natural change.\n this.touched.set(true);\n this.emitChangeValue(this.selectedItems(), fromForce);\n }\n\n emitChangeValue(value: DropdownItem<T>[], fromForce: boolean = true): void {\n const valid = this.error().length === 0;\n this.selectedItemsEv.emit({ value, valid, fromForce });\n }\n}","<!-- ========================= Label & Hint ========================= -->\n<div class=\"zs:relative zs:w-full\">\n <ZS-label [class]=\"(label() || hint()) ? 'zs:mb-1' : ''\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [required]=\"required()\"\n [hintId]=\"Id() + '-hint'\"\n [for]=\"Id() + '-trigger'\">\n </ZS-label>\n\n <!-- ========================= Trigger Button (Combobox) ========================= -->\n <button\n id=\"{{ Id() + '-trigger' }}\"\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"Id() + '-options'\"\n [attr.aria-describedby]=\"hint() ? Id() + '-hint' : null\"\n [disabled]=\"disabledOrReadonly()\"\n [class]=\"containerClasses()\"\n (click)=\"toggleDropdown()\">\n\n @if (selectedItems().length) {\n @if (!multiple()) {\n <!-- Single Selection -->\n <span class=\"zs:truncate\">{{ selectedItems()[0].name }}</span>\n } @else {\n <!-- Multiple Selection -->\n <div class=\"zs:flex zs:flex-wrap zs:gap-2 zs:items-center zs:max-w-full\">\n @for (item of selectedItems().slice(0, 6); track item.id) {\n <span\n [ngClass]=\"showItemsClass()\"\n class=\"zs:flex zs:gap-1 zs:justify-center zs:items-center zs:text-gray-900 \n zs:dark:text-gray-100 zs:pl-3 zs:pr-2 zs:py-1.5 zs:rounded-full zs:text-sm \n zs:max-w-[140px]\">\n <span class=\"zs:truncate\">{{ item.name }}</span>\n <button\n type=\"button\"\n [attr.aria-label]=\"'Remove ' + item.name\"\n class=\"zs:px-1 zs:text-gray-950 zs:hover:text-gray-600 zs:dark:text-gray-50 zs:dark:hover:text-gray-300\"\n (click)=\"selectItem([item]); $event.stopPropagation()\">\n <i class=\"fas fa-times text-xs\"></i>\n </button>\n </span>\n }\n\n @if (selectedItems().length > 6) {\n <!-- +More Indicator -->\n <span class=\"zs:text-gray-500 zs:text-sm\">\n +{{ selectedItems().length - 6 }} more\n </span>\n }\n </div>\n }\n } @else {\n <!-- Placeholder -->\n <span>{{ placeholder() }}</span>\n }\n\n @if (!disabledOrReadonly()) {\n <!-- Dropdown Toggle Icon -->\n <i class=\"fas zs:ml-2\"\n [ngClass]=\"[isOpen() ? 'fa-chevron-up' : 'fa-chevron-down']\"\n >\n </i>\n }\n </button>\n\n <!-- ========================= Dropdown Menu ========================= -->\n @if (isOpen()) {\n <div\n id=\"{{ Id() + '-options' }}\"\n role=\"listbox\"\n [attr.aria-multiselectable]=\"multiple() ? 'true' : null\"\n class=\"zs:absolute {{ zIndices.selectDropdown }} zs:w-full zs:mt-1 zs:rounded-lg \n zs:shadow-lg zs:dark:shadow-gray-400/30 zs:overflow-hidden zs:bg-white zs:border \n zs:border-gray-300 zs:dark:bg-gray-900 zs:dark:border-gray-600 zs:dark:text-gray-100\">\n\n @if (showSearch()) {\n <!-- Search Input -->\n <div class=\"zs:relative zs:p-2 zs:border-b zs:border-gray-200 zs:dark:border-gray-700\">\n <ZS-input\n role=\"searchbox\"\n aria-label=\"Search options\"\n [iName]=\"'ZS-select-[' + Id() + ']'\"\n type=\"search\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (searchEv)=\"searchQuery.set($event)\"\n (click)=\"$event.stopPropagation()\"\n [autofocus]=\"true\"\n [inputStyle]=\"this.error().length ? 'danger' : inputStyle()\"\n [searchDebounceDelay]=\"searchDebounceDelay()\"\n [showLoaderIconOnSearchInput]=\"showLoaderIconOnSearchInput()\">\n </ZS-input>\n </div>\n }\n\n <!-- Options List -->\n <div class=\"zs:max-h-60 zs:overflow-y-auto\">\n @for (item of filteredItems(); track trackByFn($index, item)) {\n <div\n role=\"option\"\n [attr.aria-selected]=\"inSelectItems(item)\"\n class=\"zs:px-4 zs:py-2 zs:cursor-pointer zs:flex zs:items-center zs:justify-between zs:transition-colors zs:text-gray-900 zs:dark:text-gray-100\"\n [ngClass]=\"getBgSelectClasses(inSelectItems(item))\"\n (click)=\"selectItem([item]); $event.stopPropagation()\">\n <span class=\"zs:truncate\">{{ item.name }}</span>\n @if (inSelectItems(item)) {\n <i class=\"fas fa-check zs:text-gray-950 zs:dark:text-gray-50 zs:ml-2\"></i>\n }\n </div>\n }\n\n @if (filteredItems().length === 0) {\n <!-- No Results Message -->\n <div class=\"zs:px-4 zs:py-3 zs:text-center zs:text-gray-500 zs:dark:text-gray-400\">\n {{ noResultsText() }}\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ========================= Clear Selection Button ========================= -->\n @if (selectedItems().length && showClearButton() && !disabledOrReadonly()) {\n <button\n type=\"button\"\n aria-label=\"Clear all selections\"\n [class]=\"clearClass()\"\n (click)=\"clearSelection()\">\n <i class=\"fas fa-times zs:mr-1\"></i> Clear selection\n </button>\n }\n\n <!-- ========================= Error Messages ========================= -->\n <ZS-input-errors\n [Id]=\"Id()\"\n [errors]=\"[error()]\"\n >\n </ZS-input-errors>\n</div>","import { Component, computed, input, model } from '@angular/core';\nimport { BaseColors, BaseSize, ColorMapping } from '../../palette-service';\nimport { Label } from '../label/label';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ZS-toggle',\n imports: [Label, CommonModule],\n templateUrl: './toggle.html',\n styleUrl: './toggle.css'\n})\nexport class Toggle {\n // ==============================================\n // Inputs\n // ==============================================\n readonly Id = input<string>(crypto.randomUUID());\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n readonly color = input<BaseColors>('blue');\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n readonly icon = input<string>('')\n readonly size = input<BaseSize>('md')\n\n // ==============================================\n // Model\n // ==============================================\n readonly value = model<boolean>(false);\n\n // ==============================================\n // Computed Signals\n // ==============================================\n readonly toggleClasses = computed<string>(() => {\n const disabledClass = this.disabled() ? 'zs:opacity-60' : '';\n const interactionClass = this.disabledOrReadonly() ? 'zs:cursor-not-allowed' : '';\n\n return [\n disabledClass,\n interactionClass\n ].join(' ')\n })\n\n readonly colorClasses = (type: 'border' | 'bg' | 'text') => {\n const color = ColorMapping.get(this.color());\n if (!color) return '';\n\n return color[type]\n };\n\n readonly btnSize = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:w-16 zs:h-8',\n md: 'zs:w-20 zs:h-10',\n lg: 'zs:w-24 zs:h-12'\n }\n return sizes[this.size()];\n })\n\n readonly wrapperSize = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:size-6 zs:text-[10px]',\n md: 'zs:size-8 zs:text-sm',\n lg: 'zs:size-10 zs:text-base'\n }\n return sizes[this.size()];\n })\n\n readonly transSize = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:translate-x-7',\n md: 'zs:translate-x-9',\n lg: 'zs:translate-x-11'\n }\n return sizes[this.size()];\n })\n\n readonly isChecked = computed<boolean>(() => this.value());\n readonly disabledOrReadonly = computed<boolean>(() => this.disabled() || this.isReadonly());\n\n // ==============================================\n // Handlers\n // ==============================================\n toggleChecked() {\n if (this.disabledOrReadonly()) return;\n this.value.update(v => !v);\n }\n\n onKeyDown(event: KeyboardEvent) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.toggleChecked();\n }\n }\n}\n","<div class=\"zs:flex zs:items-center zs:justify-start zs:w-full zs:select-none\">\n <!-- ===================== Checkbox Wrapper ===================== -->\n <div\n class=\"zs:cursor-pointer zs:leading-none\"\n >\n <!-- ===================== Hidden Input (Native for screen readers) ===================== -->\n <input\n type=\"checkbox\"\n class=\"zs:hidden\"\n [id]=\"Id()\"\n [checked]=\"isChecked()\"\n [disabled]=\"disabledOrReadonly()\"\n (change)=\"toggleChecked()\"\n />\n\n <!-- ===================== Custom Accessible Toggle ===================== -->\n <button\n (click)=\"value.set(!value())\"\n class=\"zs:relative zs:rounded-full zs:border-2 zs:flex zs:items-center zs:transition-all zs:duration-500 zs:ease-in-out zs:overflow-hidden\"\n [ngClass]=\"[\n toggleClasses(),\n colorClasses('border'),\n value() ? colorClasses('bg') : '', \n value() ? '' : 'zs:bg-gray-100 zs:dark:bg-gray-700',\n btnSize(),\n ]\"\n >\n <div\n class=\"zs:absolute zs:left-1 zs:top-1/2 zs:-translate-1/2 zs:rounded-full zs:flex zs:items-center zs:justify-center zs:transition-all zs:duration-500 zs:ease-in-out zs:shadow-md\"\n [ngClass]=\"[\n value() ? '' : colorClasses('bg'),\n value() ? colorClasses('text') : 'zs:text-gray-100 zs:dark:text-gray-300',\n value() ? 'zs:bg-gray-100 zs:dark:bg-gray-300' : '',\n wrapperSize(),\n value() ? transSize() : 'zs:translate-x-0',\n ]\"\n >\n <i [class]=\"icon()\"></i>\n </div>\n </button>\n </div>\n\n <!-- ===================== Label (ZS-label component) ===================== -->\n <ZS-label [class]=\"(label() || hint()) ? 'zs:ml-1' : ''\"\n [id]=\"Id() + '-label'\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [size]=\"size()\"\n [hintId]=\"Id() + '-hint'\"\n [for]=\"Id()\"\n ></ZS-label>\n</div>","/*\n * Public API Surface of ngx-zs-component\n */\n\nexport * from './lib/ngx-zs-component';\nexport * from './lib/ngx-zs-component/AlertFolder/alert/alert'\nexport * from './lib/ngx-zs-component/AlertFolder/alert-service/alert-service'\nexport * from './lib/ngx-zs-component/NavItemFolder/nav-item/nav-item'\nexport * from './lib/ngx-zs-component/NavItemFolder/nav-item-service/nav-item-service'\nexport * from './lib/ngx-zs-component/card/card'\nexport * from './lib/ngx-zs-component/carousel/carousel'\nexport * from './lib/ngx-zs-component/connection/connection'\nexport * from './lib/ngx-zs-component/extractor-service/extractor-service'\nexport * from './lib/ngx-zs-component/form-service/form-service'\nexport * from './lib/ngx-zs-component/modal/modal'\nexport * from './lib/ngx-zs-component/navbar/navbar'\nexport * from './lib/ngx-zs-component/page404/page404'\nexport * from './lib/ngx-zs-component/pagination/pagination'\nexport * from './lib/ngx-zs-component/palette-service'\nexport * from './lib/ngx-zs-component/scroll-to-top/scroll-to-top'\nexport * from './lib/ngx-zs-component/spinner/spinner'\nexport * from './lib/ngx-zs-component/theme-toggle/theme-toggle'\nexport * from './lib/ngx-zs-component/FormCompFolder/button/button'\nexport * from './lib/ngx-zs-component/FormCompFolder/checkbox/checkbox'\nexport * from './lib/ngx-zs-component/FormCompFolder/file/file'\nexport * from './lib/ngx-zs-component/FormCompFolder/input/input'\nexport * from './lib/ngx-zs-component/FormCompFolder/input-errors/input-errors'\nexport * from './lib/ngx-zs-component/FormCompFolder/label/label'\nexport * from './lib/ngx-zs-component/FormCompFolder/range/range'\nexport * from './lib/ngx-zs-component/FormCompFolder/select/select'\nexport * from './lib/ngx-zs-component/FormCompFolder/toggle/toggle'","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ziadshalaby-ngx-zs-component.mjs","sources":["../../../projects/ngx-zs-component/src/lib/ngx-zs-component.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/AlertFolder/alert-service/alert-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/z-index.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/AlertFolder/alert/alert.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/AlertFolder/alert/alert.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/NavItemFolder/nav-item-service/nav-item-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/NavItemFolder/nav-item/nav-item.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/NavItemFolder/nav-item/nav-item.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/palette-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/visibility-observer/visibility-observer-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/card/card.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/card/card.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/carousel/carousel.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/carousel/carousel.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/connection/connection.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/connection/connection.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/extractor-service/extractor-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/form-service/form-service.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/button/button.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/button/button.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/modal/modal.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/modal/modal.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/navbar/navbar.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/navbar/navbar.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/page404/page404.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/page404/page404.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/pagination/pagination.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/pagination/pagination.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/scroll-to-top/scroll-to-top.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/scroll-to-top/scroll-to-top.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/spinner/spinner.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/spinner/spinner.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/theme-toggle/theme-toggle.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/theme-toggle/theme-toggle.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/label/label.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/label/label.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/checkbox/checkbox.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/checkbox/checkbox.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/input-errors/input-errors.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/input-errors/input-errors.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/file/file.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/file/file.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/input/input.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/input/input.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/range/range.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/range/range.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/select/select.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/select/select.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/toggle/toggle.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/FormCompFolder/toggle/toggle.html","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/footer/footer.ts","../../../projects/ngx-zs-component/src/lib/ngx-zs-component/footer/footer.html","../../../projects/ngx-zs-component/src/public-api.ts","../../../projects/ngx-zs-component/src/ziadshalaby-ngx-zs-component.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ngx-zs-component',\n imports: [],\n template: `\n <p>\n ngx-zs-component works!\n </p>\n `,\n styles: ``,\n})\nexport class NgxZsComponent {\n\n}\n","// ==============================================\n// Types\n// ==============================================\n\nimport { Injectable, signal } from '@angular/core';\nimport { AlertType } from '../alert/alert';\n\nexport interface NewAlert extends Omit<AlertType, 'id' | 'progress'> {}\nexport interface BulkAlert extends Omit<AlertType, 'id' | 'progress' | 'message'> {}\n\n// ==============================================\n// Service\n// ==============================================\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AlertService {\n\n // ==============================================\n // State\n // ==============================================\n\n readonly alerts = signal<AlertType[]>([]);\n\n // ==============================================\n // Public Methods\n // ==============================================\n\n addAlert(newAlert: NewAlert): void {\n const newAlertToAdd: AlertType = {\n ...newAlert,\n id: crypto.randomUUID(),\n };\n\n this.alerts.update((alerts: AlertType[]) => [...alerts, newAlertToAdd]);\n }\n\n bulkAlert(newAlerts: string[], options: BulkAlert): void {\n const alertsToAdd: AlertType[] = newAlerts.map((message) => ({\n ...options,\n message,\n id: crypto.randomUUID(),\n }));\n\n this.alerts.update((alerts: AlertType[]) => [...alerts, ...alertsToAdd]);\n }\n\n onAlertClosed(id: string | number): void {\n this.alerts.update((alerts: AlertType[]) => {\n return alerts.filter(a => a.id !== id);\n });\n }\n}","export type KeyType = \n| 'alert'\n| 'spinner'\n| 'modal'\n| 'themeToggle'\n| 'navbar'\n| 'scrollToTop'\n| 'navItemDropdown'\n| 'selectDropdown'\n\nexport type ZIndicesType = Record<KeyType, `zs:z-${number}`>\n\nexport const zIndices: ZIndicesType = {\n alert: 'zs:z-1600',\n spinner: 'zs:z-1400',\n modal: 'zs:z-1200',\n themeToggle: 'zs:z-1000',\n navbar: 'zs:z-800',\n scrollToTop: 'zs:z-600',\n navItemDropdown: 'zs:z-200',\n selectDropdown: 'zs:z-200'\n};\n\n","// ==============================================\n// Types\n// ==============================================\n\nimport { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n effect,\n inject,\n input,\n signal\n} from '@angular/core';\nimport { AlertService } from '../alert-service/alert-service';\nimport { zIndices, ZIndicesType } from '../../z-index';\n\nexport interface AlertType {\n id: number | string;\n message: string;\n type: 'success' | 'danger' | 'warning' | 'info';\n autoClose?: boolean;\n duration?: number;\n showCloseButton?: boolean;\n progress?: number;\n}\n\nexport interface AlertFullType extends AlertType {\n icon: string;\n bgColor: string;\n textColor: string;\n borderColor: string;\n}\n\nexport type OldAlertsType = Set<number | string>;\n\nexport const ALERT_CONFIG: Record<\n AlertType['type'],\n Omit<AlertFullType, keyof AlertType>\n> = {\n success: {\n icon: 'fas fa-check-circle',\n bgColor: 'zs:bg-green-100 zs:dark:bg-green-800',\n textColor: 'zs:text-green-800 zs:dark:text-green-100',\n borderColor: 'zs:border-green-500 zs:dark:border-green-300'\n },\n danger: {\n icon: 'fas fa-exclamation-circle',\n bgColor: 'zs:bg-red-100 zs:dark:bg-red-800',\n textColor: 'zs:text-red-800 zs:dark:text-red-100',\n borderColor: 'zs:border-red-500 zs:dark:border-red-300'\n },\n warning: {\n icon: 'fas fa-exclamation-triangle',\n bgColor: 'zs:bg-yellow-100 zs:dark:bg-yellow-800',\n textColor: 'zs:text-yellow-800 zs:dark:text-yellow-100',\n borderColor: 'zs:border-yellow-500 zs:dark:border-yellow-300'\n },\n info: {\n icon: 'fas fa-info-circle',\n bgColor: 'zs:bg-blue-100 zs:dark:bg-blue-800',\n textColor: 'zs:text-blue-800 zs:dark:text-blue-100',\n borderColor: 'zs:border-blue-500 zs:dark:border-blue-300'\n }\n};\n\nexport type PositionClassType = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\nconst PositionClasses: Record<PositionClassType, string> = {\n 'top-left': 'zs:top-4 zs:left-4',\n 'top-right': 'zs:top-4 zs:right-4',\n 'bottom-left': 'zs:bottom-4 zs:left-4',\n 'bottom-right': 'zs:bottom-4 zs:right-4',\n}\n\n// ==============================================\n// Component Decorator\n// ==============================================\n\n@Component({\n selector: 'ZS-alert',\n imports: [CommonModule],\n templateUrl: './alert.html',\n styleUrl: './alert.css'\n})\nexport class Alert {\n \n // ==============================================\n // Dependencies\n // ==============================================\n readonly zIndices: ZIndicesType = zIndices;\n readonly alertService: AlertService = inject(AlertService);\n\n // ==============================================\n // Inputs\n // ==============================================\n\n readonly positionClass = input<PositionClassType>('top-right');\n readonly defaultShowCloseButton = input<boolean>(true);\n readonly defaultAutoClose = input<boolean>(true);\n readonly defaultDuration = input<number>(5000);\n\n // ==============================================\n // Signals & Computed Properties\n // ==============================================\n\n private readonly oldAlerts = signal<OldAlertsType>(new Set());\n\n private readonly direction = computed<'top' | 'bottom'>(() => \n this.positionClass().startsWith('top') ? 'top' : 'bottom'\n );\n\n readonly positionClasses = computed<string>(() => \n PositionClasses[this.positionClass()]\n );\n\n readonly alerts = computed<AlertType[]>(() => {\n const list = this.alertService.alerts();\n return this.direction() === 'bottom' ? [...list].reverse() : list;\n });\n\n readonly alertConfig: ReturnType<typeof computed<AlertFullType[]>> =\n computed((): AlertFullType[] => {\n return this.alerts().map((alert: AlertType) => {\n const config = ALERT_CONFIG[alert.type] ?? ALERT_CONFIG.info;\n return { ...alert, ...config };\n });\n });\n\n // ==============================================\n // Private Properties\n // ==============================================\n\n private activeIntervals = new Map<string | number, number>();\n\n // ==============================================\n // Lifecycle & Effects\n // ==============================================\n\n constructor() {\n effect(() => {\n const alerts = this.alerts();\n const oldIds = this.oldAlerts();\n\n // استخرج التنبيهات الجديدة فقط\n const newOnes = alerts.filter(a => !oldIds.has(a.id));\n\n // سجّل كل تنبيه جديد\n for (const alert of newOnes) {\n this.registerAlert(alert);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.activeIntervals.forEach(clearInterval);\n this.activeIntervals.clear();\n }\n\n // ==============================================\n // Private Methods\n // ==============================================\n\n private registerAlert(alert: AlertType): void {\n // Mark alert as processed\n const updatedSet = new Set(this.oldAlerts());\n updatedSet.add(alert.id);\n this.oldAlerts.set(updatedSet);\n\n const autoClose = alert.autoClose ?? this.defaultAutoClose();\n const duration = alert.duration ?? this.defaultDuration();\n\n if (autoClose) {\n let progress = 100;\n const step = 100 / (duration / 100);\n\n const interval = window.setInterval(() => {\n progress = Math.max(0, progress - step);\n\n this.alertService.alerts.update((all: AlertType[]) =>\n all.map((a: AlertType) =>\n a.id === alert.id ? { ...a, progress } as AlertType : a\n )\n );\n\n if (progress <= 0) {\n this.closeAlert(alert.id);\n }\n }, 100);\n\n this.activeIntervals.set(alert.id, interval);\n }\n }\n\n // ==============================================\n // Public Methods\n // ==============================================\n\n closeAlert(id: string | number): void {\n // Clear active interval if exists\n const interval = this.activeIntervals.get(id);\n if (interval) {\n clearInterval(interval);\n this.activeIntervals.delete(id);\n }\n\n // Remove from processed alerts\n const updatedSet = new Set(this.oldAlerts());\n updatedSet.delete(id);\n this.oldAlerts.set(updatedSet);\n\n // Remove from service\n this.alertService.onAlertClosed(id);\n }\n}","<!-- ========================= Alert Container ========================= -->\n<div\n class=\"zs:fixed zs:ml-4 zs:break-all {{ zIndices.alert }} zs:flex zs:flex-col \n zs:overflow-y-auto custom-scrollbar zs:p-2 zs:gap-3 zs:max-h-[calc(100vh-1rem)]\"\n [ngClass]=\"positionClasses()\"\n role=\"region\"\n aria-label=\"Notification area\"\n aria-live=\"polite\"\n>\n\n @for (alert of alertConfig(); track alert.id) {\n\n <!-- ========================= Alert Card ========================= -->\n <div\n class=\"zs:pointer-events-auto zs:max-w-sm zs:min-h-14 zs:rounded-lg zs:border zs:p-4 zs:shadow-md zs:dark:shadow-gray-400/30\n zs:transition-all zs:duration-300 zs:ease-in-out animate-fade-in zs:relative zs:overflow-hidden\"\n [class]=\"alert.bgColor + ' ' + alert.textColor + ' ' + alert.borderColor\"\n role=\"alert\"\n >\n\n <!-- ========================= Alert Content ========================= -->\n <div class=\"zs:flex zs:items-center\">\n\n <!-- Icon -->\n <i\n [class]=\"alert.icon + ' zs:mt-0.5 zs:me-3'\"\n aria-hidden=\"true\"\n ></i>\n\n <!-- Message -->\n <div class=\"zs:flex-1 zs:text-sm zs:font-medium\">\n {{ alert.message }}\n </div>\n\n <!-- Close Button -->\n @if (alert.showCloseButton ?? defaultShowCloseButton()) {\n <button\n type=\"button\"\n class=\"zs:ms-2 zs:inline-flex zs:h-6 zs:w-6 zs:items-center zs:justify-center zs:rounded-full\n zs:text-gray-500 zs:dark:text-gray-300\n zs:hover:bg-gray-200 zs:dark:hover:bg-gray-700\n zs:hover:text-gray-700 zs:dark:hover:text-gray-100\n zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-within:ring-indigo-500\"\n (click)=\"closeAlert(alert.id!)\"\n aria-label=\"Close alert\"\n >\n <i class=\"fas fa-times zs:text-xs\" aria-hidden=\"true\"></i>\n </button>\n }\n\n </div>\n\n <!-- ========================= Auto-Close Progress Bar ========================= -->\n @if (alert.autoClose ?? defaultAutoClose()) {\n <div\n class=\"zs:absolute zs:bottom-0 zs:left-0 zs:h-1 zs:bg-gray-300 zs:dark:bg-gray-700 zs:w-full\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"alert.progress ?? 100\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <div\n class=\"zs:h-1 zs:bg-current zs:transition-[width] zs:duration-100\"\n [style.width.%]=\"alert.progress ?? 100\"\n ></div>\n </div>\n }\n\n </div>\n\n }\n\n</div>","// ==============================================\n// Types\n// ==============================================\n\ninterface CollectionEntry {\n openIndex: string;\n indexes: string[];\n}\n\n// ==============================================\n// Imports\n// ==============================================\n\nimport { Injectable, signal } from '@angular/core';\n\n// ==============================================\n// Injectable Metadata\n// ==============================================\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NavItemService {\n\n // ==============================================\n // State\n // ==============================================\n\n /**\n * Map of collections, where each collection tracks:\n * - openIndex: the currently open item's unique index\n * - indexes: list of all registered item indexes in this collection\n */\n readonly collections = signal<Map<string, CollectionEntry>>(new Map());\n\n // ==============================================\n // Public Read API\n // ==============================================\n\n openIndex(collectionName: string): string {\n const entry = this.collections().get(collectionName);\n return entry ? entry.openIndex : '';\n }\n\n // ==============================================\n // Public Write API\n // ==============================================\n\n addItemInCollection(collectionName: string, index: string): void {\n this.collections.update((prev) => {\n const updated = new Map(prev);\n const entry = updated.get(collectionName);\n\n if (entry) {\n updated.set(collectionName, {\n ...entry,\n indexes: [...entry.indexes, index]\n });\n } else {\n updated.set(collectionName, {\n openIndex: '',\n indexes: [index]\n });\n }\n\n return updated;\n });\n }\n\n onOpenIndexChange(collectionName: string, index: string): void {\n this.collections.update((prev) => {\n const updated = new Map(prev);\n const entry = updated.get(collectionName);\n\n if (entry) {\n updated.set(collectionName, {\n ...entry,\n openIndex: index\n });\n } else {\n updated.set(collectionName, {\n openIndex: index,\n indexes: []\n });\n }\n\n return updated;\n });\n }\n}","// ==============================================\n// Types\n// ==============================================\n\nexport interface NavbarItem {\n label: string;\n\n routerLink?: string;\n routerLinkActive?: string;\n\n action?: () => void;\n\n children?: NavbarItem[];\n childrenOpenWindow?: boolean;\n closeMenuAfterClick?: boolean\n\n icon?: string;\n iconClass?: string;\n\n colorClass?: string;\n useDefaultColorClass?: 'text' | 'bg';\n}\n\n// ==============================================\n// Imports\n// ==============================================\n\nimport { Component, computed, effect, inject, input, output, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { NavItemService } from '../nav-item-service/nav-item-service';\nimport { zIndices, ZIndicesType } from '../../z-index';\n\n// ==============================================\n// Component Metadata\n// ==============================================\n\n@Component({\n selector: 'ZS-nav-item',\n imports: [CommonModule, RouterModule],\n templateUrl: './nav-item.html',\n styleUrl: './nav-item.css'\n})\nexport class NavItem {\n readonly zIndices: ZIndicesType = zIndices;\n\n // ==============================================\n // Injection & Services\n // ==============================================\n private readonly znavItemService = inject(NavItemService);\n\n // ==============================================\n // Inputs & Outputs\n // ==============================================\n\n readonly item = input.required<NavbarItem>();\n readonly collectionName = input.required<string>();\n readonly anyItemClickedEv = output<NavbarItem>();\n\n // ==============================================\n // Signals & Computed Properties\n // ==============================================\n\n readonly index = signal<string>(crypto.randomUUID());\n\n readonly isOpen = computed<boolean>(() =>\n this.znavItemService.openIndex(this.collectionName()) === this.index()\n );\n\n // ==============================================\n // Lifecycle & Effects\n // ==============================================\n\n constructor() {\n effect(() => {\n const collection = this.collectionName();\n if (collection) {\n this.znavItemService.addItemInCollection(collection, this.index());\n }\n });\n }\n\n // ==============================================\n // Event Handlers\n // ==============================================\n\n toggle(): void {\n const currentOpen = this.znavItemService.openIndex(this.collectionName());\n const myIndex = this.index();\n\n if (currentOpen === myIndex) {\n this.znavItemService.onOpenIndexChange(this.collectionName(), '');\n } else {\n this.znavItemService.onOpenIndexChange(this.collectionName(), myIndex);\n }\n }\n\n onItemClick(): void {\n const item = this.item();\n\n item.action?.();\n if(this.item().closeMenuAfterClick){\n this.toggle()\n }\n\n this.anyItemClickedEv.emit(this.item());\n }\n\n handleChildClick(child: NavbarItem) {\n // أعد إرسال الحدث لأعلى (لو فيه levels أكثر)\n this.anyItemClickedEv.emit(child);\n\n // إن كان الطفل يريد غلق القائمة، أغلق نفسي\n if (child.closeMenuAfterClick) {\n this.toggle();\n }\n }\n\n // ==============================================\n // Helper Methods\n // ==============================================\n\n getItemClasses = (item: NavbarItem): string => {\n const defaultTextClass =\n 'zs:text-gray-600 zs:dark:text-gray-300 zs:hover:text-gray-900 zs:dark:hover:text-gray-100';\n const defaultBgClass =\n 'zs:hover:bg-gray-100 zs:dark:hover:bg-gray-700';\n\n if (item.colorClass) {\n return item.colorClass;\n }\n\n return item.useDefaultColorClass === 'bg'\n ? defaultBgClass\n : defaultTextClass;\n };\n\n labelLineClass(item: NavbarItem) {\n return item.label.length > 60 ? 'zs:text-xs' \n : item.label.length > 40 ? 'zs:text-sm' \n : ''\n }\n}","<!-- ========================= Conditional Rendering ========================= -->\n@if (item()) {\n @if (item().children?.length) {\n\n <!-- ========================= Parent Item with Dropdown ========================= -->\n <div class=\"zs:relative zs:w-full\">\n\n <!-- ========================= Main Toggle Button ========================= -->\n <button\n type=\"button\"\n (click)=\"toggle()\"\n [ngClass]=\"getItemClasses(item())\"\n class=\"zs:flex zs:w-full zs:items-center zs:gap-2 zs:rounded-md zs:px-3 zs:py-2 zs:text-left \n zs:text-sm zs:font-medium zs:md:text-base\"\n aria-haspopup=\"true\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"'submenu-' + index()\"\n >\n <div class=\"zs:flex zs:items-center\">\n @if (item().icon) {\n <i [ngClass]=\"[\n item().icon, \n item().iconClass ?? '',\n (item().icon && item().label) ? 'zs:mr-2' : ''\n ]\" aria-hidden=\"true\"></i>\n }\n <span class=\"zs:wrap-break-word\" [ngClass]=\"labelLineClass(item())\">{{ item().label }}</span>\n </div>\n <i class=\"fas fa-chevron-down zs:ml-auto zs:p-0.5 zs:text-xs\" aria-hidden=\"true\"></i>\n </button>\n\n <!-- ========================= Dropdown Menu ========================= -->\n <div\n [id]=\"'submenu-' + index()\"\n [ngClass]=\"{\n 'zs:block': isOpen(),\n 'zs:hidden': !isOpen(),\n 'zs:absolute zs:left-6 zs:w-50 zs:mt-1 zs:py-1 zs:bg-white zs:dark:bg-gray-800 \n zs:rounded-md shadow-md-all shadow-md-all-night': item().childrenOpenWindow,\n 'zs:px-4 zs:mt-1': !item().childrenOpenWindow\n }\"\n class=\"{{ zIndices.navItemDropdown }}\"\n role=\"menu\"\n [attr.aria-label]=\"item().label + ' submenu'\"\n >\n @for (child of item().children; track $index) {\n <ZS-nav-item\n [item]=\"child\"\n [collectionName]=\"collectionName() + '-' + index()\"\n (anyItemClickedEv)=\"handleChildClick($event)\"\n role=\"menuitem\"\n ></ZS-nav-item>\n }\n </div>\n\n </div>\n\n } @else {\n\n <!-- ========================= Leaf Item (No Children) ========================= -->\n <a\n [routerLink]=\"item().routerLink\"\n [routerLinkActive]=\"item().routerLinkActive ?? ''\"\n #rla=\"routerLinkActive\"\n [ngClass]=\"rla.isActive ? '' : getItemClasses(item())\"\n class=\"zs:flex zs:items-center zs:rounded-md zs:px-3 zs:py-2 \n zs:text-sm zs:font-medium zs:md:text-base\"\n (click)=\"onItemClick()\"\n role=\"menuitem\"\n >\n @if (item().icon) {\n <i [ngClass]=\"[\n item().icon,\n rla.isActive ? '' : item().iconClass ?? '',\n (item().icon && item().label) ? 'zs:mr-2' : ''\n ]\"\n aria-hidden=\"true\"></i>\n }\n <span class=\"zs:wrap-break-word zs:line-clamp-3\" [ngClass]=\"labelLineClass(item())\">{{ item().label }}</span>\n </a>\n }\n}","export type BaseSize = 'sm' | 'md' | 'lg';\n\nexport type FormStyle =\n | 'primary'\n | 'secondary'\n | 'warning'\n | 'success'\n | 'danger'\n | 'dark'\n | 'info'\n | 'violet'\n | 'teal';\n\n// Unified palette map with all configurations\nexport const unifiedPaletteMap = new Map<FormStyle, {\n // Input palette\n input: {\n border: string;\n borderHover: string;\n inputBg: string;\n text: string;\n };\n // Ring palette\n ring: {\n ring: string;\n };\n // Solid Button palette\n buttonSolid: {\n btnBG: string;\n btnBGHover: string;\n };\n // Outline Button palette\n buttonOutline: {\n border: string;\n btnBGHover: string;\n text: string;\n };\n // Select palette\n select: {\n bgSelect: string;\n cleartext: string;\n cleartexthover: string;\n };\n // Checkbox / Radio Palette\n checkbox: {\n checkBoxText: string;\n checkBoxTextHover: string;\n };\n // Card Palette\n card: {\n border: string;\n borderHover: string;\n };\n // Modal Palette\n modal: {\n border: string;\n text: string;\n };\n // Page404 palette\n page404: {\n btnBG: string;\n btnBGHover: string;\n iconText: string;\n };\n}>([\n [\n 'secondary',\n {\n input: {\n border: 'zs:border-slate-300 zs:dark:border-slate-600',\n borderHover: 'zs:hover:border-slate-500 zs:dark:hover:border-slate-400',\n inputBg: 'zs:bg-slate-50 zs:dark:bg-slate-900',\n text: 'zs:text-slate-800 zs:dark:text-slate-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-slate-400 zs:dark:focus-within:ring-slate-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-slate-500 zs:dark:bg-slate-700',\n btnBGHover: 'zs:hover:bg-slate-600',\n },\n buttonOutline: {\n border: 'zs:border-slate-500 zs:dark:border-slate-500',\n btnBGHover: 'zs:hover:bg-slate-600 zs:dark:hover:bg-slate-600',\n text: 'zs:text-slate-500 zs:dark:text-slate-500'\n },\n select: {\n bgSelect: 'zs:bg-slate-200 zs:dark:bg-slate-800',\n cleartext: 'zs:text-slate-700 zs:dark:text-slate-500',\n cleartexthover: 'zs:hover:text-slate-500 zs:dark:hover:text-slate-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-slate-500 zs:dark:text-slate-700',\n checkBoxTextHover: 'zs:hover:text-slate-600',\n },\n card: {\n border: 'zs:border-slate-300 zs:dark:border-slate-700',\n borderHover: 'zs:hover:border-slate-600 zs:dark:hover:border-slate-500',\n },\n modal: {\n border: 'zs:border-slate-300 zs:dark:border-slate-600',\n text: 'zs:text-slate-800 zs:dark:text-slate-300',\n },\n page404: {\n btnBG: 'zs:bg-slate-500 zs:dark:bg-slate-700',\n btnBGHover: 'zs:hover:bg-slate-600',\n iconText: 'zs:text-slate-500 zs:dark:text-slate-700',\n },\n },\n ],\n [\n 'primary',\n {\n input: {\n border: 'zs:border-blue-200 zs:dark:border-blue-700',\n borderHover: 'zs:hover:border-blue-400 zs:dark:hover:border-blue-500',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-blue-900 zs:dark:text-blue-100',\n },\n ring: {\n ring: 'zs:focus-within:ring-blue-400 zs:dark:focus-within:ring-blue-500',\n },\n buttonSolid: {\n btnBG: 'zs:bg-blue-500 zs:dark:bg-blue-700',\n btnBGHover: 'zs:hover:bg-blue-600',\n },\n buttonOutline: {\n border: 'zs:border-blue-500 zs:dark:border-blue-600',\n btnBGHover: 'zs:hover:bg-blue-600',\n text: 'zs:text-blue-500 zs:dark:text-blue-500'\n },\n select: {\n bgSelect: 'zs:bg-blue-200 zs:dark:bg-blue-800',\n cleartext: 'zs:text-blue-800 zs:dark:text-blue-500',\n cleartexthover: 'zs:hover:text-blue-600 zs:dark:hover:text-blue-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-blue-500 zs:dark:text-blue-700',\n checkBoxTextHover: 'zs:hover:text-blue-600',\n },\n card: {\n border: 'zs:border-blue-300 zs:dark:border-blue-700',\n borderHover: 'zs:hover:border-blue-600 zs:dark:hover:border-blue-500',\n },\n modal: {\n border: 'zs:border-blue-200 zs:dark:border-blue-700',\n text: 'zs:text-blue-900 zs:dark:text-blue-100',\n },\n page404: {\n btnBG: 'zs:bg-blue-500 zs:dark:bg-blue-700',\n btnBGHover: 'zs:hover:bg-blue-600',\n iconText: 'zs:text-blue-500 zs:dark:text-blue-700',\n },\n },\n ],\n [\n 'success',\n {\n input: {\n border: 'zs:border-green-300 zs:dark:border-green-600',\n borderHover: 'zs:hover:border-green-500 zs:dark:hover:border-green-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-green-800 zs:dark:text-green-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-green-400 zs:dark:focus-within:ring-green-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-green-500 zs:dark:bg-green-700',\n btnBGHover: 'zs:hover:bg-green-600',\n },\n buttonOutline: {\n border: 'zs:border-green-500 zs:dark:border-green-600',\n btnBGHover: 'zs:hover:bg-green-600',\n text: 'zs:text-green-500 zs:dark:text-green-600'\n },\n select: {\n bgSelect: 'zs:bg-green-200 zs:dark:bg-green-800',\n cleartext: 'zs:text-green-800 zs:dark:text-green-500',\n cleartexthover: 'zs:hover:text-green-600 zs:dark:hover:text-green-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-green-500 zs:dark:text-green-700',\n checkBoxTextHover: 'zs:hover:text-green-600',\n },\n card: {\n border: 'zs:border-green-300 zs:dark:border-green-700',\n borderHover: 'zs:hover:border-green-600 zs:dark:hover:border-green-500',\n },\n modal: {\n border: 'zs:border-green-300 zs:dark:border-green-600',\n text: 'zs:text-green-800 zs:dark:text-green-300',\n },\n page404: {\n btnBG: 'zs:bg-green-500 zs:dark:bg-green-700',\n btnBGHover: 'zs:hover:bg-green-600',\n iconText: 'zs:text-green-500 zs:dark:text-green-700',\n },\n },\n ],\n [\n 'danger',\n {\n input: {\n border: 'zs:border-red-300 zs:dark:border-red-600',\n borderHover: 'zs:hover:border-red-500 zs:dark:hover:border-red-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-red-800 zs:dark:text-red-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-red-400 zs:dark:focus-within:ring-red-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-red-500 zs:dark:bg-red-700',\n btnBGHover: 'zs:hover:bg-red-600',\n },\n buttonOutline: {\n border: 'zs:border-red-500 zs:dark:border-red-600',\n btnBGHover: 'zs:hover:bg-red-600',\n text: 'zs:text-red-500 zs:dark:text-red-600'\n },\n select: {\n bgSelect: 'zs:bg-red-200 zs:dark:bg-red-800',\n cleartext: 'zs:text-red-800 zs:dark:text-red-500',\n cleartexthover: 'zs:hover:text-red-600 zs:dark:hover:text-red-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-red-500 zs:dark:text-red-700',\n checkBoxTextHover: 'zs:hover:text-red-600',\n },\n card: {\n border: 'zs:border-red-300 zs:dark:border-red-700',\n borderHover: 'zs:hover:border-red-600 zs:dark:hover:border-red-500',\n },\n modal: {\n border: 'zs:border-red-300 zs:dark:border-red-600',\n text: 'zs:text-red-800 zs:dark:text-red-300',\n },\n page404: {\n btnBG: 'zs:bg-red-500 zs:dark:bg-red-700',\n btnBGHover: 'zs:hover:bg-red-600',\n iconText: 'zs:text-red-500 zs:dark:text-red-700',\n },\n },\n ],\n [\n 'warning',\n {\n input: {\n border: 'zs:border-yellow-300 zs:dark:border-yellow-600',\n borderHover: 'zs:hover:border-yellow-500 zs:dark:hover:border-yellow-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-amber-800 zs:dark:text-amber-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-yellow-400 zs:dark:focus-within:ring-yellow-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-amber-500 zs:dark:bg-amber-700',\n btnBGHover: 'zs:hover:bg-amber-600',\n },\n buttonOutline: {\n border: 'zs:border-amber-500 zs:dark:border-amber-600',\n btnBGHover: 'zs:hover:bg-amber-600',\n text: 'zs:text-amber-500 zs:dark:text-amber-600'\n },\n select: {\n bgSelect: 'zs:bg-amber-200 zs:dark:bg-amber-800',\n cleartext: 'zs:text-amber-800 zs:dark:text-amber-500',\n cleartexthover: 'zs:hover:text-amber-600 zs:dark:hover:text-amber-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-amber-500 zs:dark:text-amber-700',\n checkBoxTextHover: 'zs:hover:text-amber-600',\n },\n card: {\n border: 'zs:border-yellow-300 zs:dark:border-yellow-700',\n borderHover: 'zs:hover:border-yellow-600 zs:dark:hover:border-yellow-500',\n },\n modal: {\n border: 'zs:border-yellow-300 zs:dark:border-yellow-600',\n text: 'zs:text-amber-800 zs:dark:text-amber-300',\n },\n page404: {\n btnBG: 'zs:bg-amber-500 zs:dark:bg-amber-700',\n btnBGHover: 'zs:hover:bg-amber-600',\n iconText: 'zs:text-amber-500 zs:dark:text-amber-700',\n },\n },\n ],\n [\n 'info',\n {\n input: {\n border: 'zs:border-cyan-300 zs:dark:border-cyan-600',\n borderHover: 'zs:hover:border-cyan-500 zs:dark:hover:border-cyan-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-cyan-800 zs:dark:text-cyan-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-cyan-400 zs:dark:focus-within:ring-cyan-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-cyan-500 zs:dark:bg-cyan-700',\n btnBGHover: 'zs:hover:bg-cyan-600',\n },\n buttonOutline: {\n border: 'zs:border-cyan-500 zs:dark:border-cyan-600',\n btnBGHover: 'zs:hover:bg-cyan-600',\n text: 'zs:text-cyan-500 zs:dark:text-cyan-600'\n },\n select: {\n bgSelect: 'zs:bg-cyan-200 zs:dark:bg-cyan-800',\n cleartext: 'zs:text-cyan-800 zs:dark:text-cyan-500',\n cleartexthover: 'zs:hover:text-cyan-600 zs:dark:hover:text-cyan-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-cyan-500 zs:dark:text-cyan-700',\n checkBoxTextHover: 'zs:hover:text-cyan-600',\n },\n card: {\n border: 'zs:border-cyan-300 zs:dark:border-cyan-700',\n borderHover: 'zs:hover:border-cyan-600 zs:dark:hover:border-cyan-500',\n },\n modal: {\n border: 'zs:border-cyan-300 zs:dark:border-cyan-600',\n text: 'zs:text-cyan-800 zs:dark:text-cyan-300',\n },\n page404: {\n btnBG: 'zs:bg-cyan-500 zs:dark:bg-cyan-700',\n btnBGHover: 'zs:hover:bg-cyan-600',\n iconText: 'zs:text-cyan-500 zs:dark:text-cyan-700',\n },\n },\n ],\n [\n 'dark',\n {\n input: {\n border: 'zs:border-slate-900 zs:dark:border-slate-700',\n borderHover: 'zs:hover:border-gray-500 zs:dark:hover:border-slate-500',\n inputBg: 'zs:bg-slate-300 zs:dark:bg-slate-900',\n text: 'zs:text-slate-900 zs:dark:text-slate-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-slate-700 zs:dark:focus-within:ring-slate-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-slate-900 zs:dark:bg-slate-700',\n btnBGHover: 'zs:hover:bg-slate-800 zs:dark:hover:bg-slate-700/70',\n },\n buttonOutline: {\n border: 'zs:border-slate-900 zs:dark:border-slate-500',\n btnBGHover: 'zs:hover:bg-slate-800 zs:dark:hover:bg-slate-700/70',\n text: 'zs:text-slate-900 zs:dark:text-slate-500'\n },\n select: {\n bgSelect: 'zs:bg-slate-400 zs:dark:bg-slate-800',\n cleartext: 'zs:text-slate-700 zs:dark:text-slate-500',\n cleartexthover: 'zs:hover:text-slate-900 zs:dark:hover:text-slate-700',\n },\n checkbox: {\n checkBoxText: 'zs:text-slate-900 zs:dark:text-slate-700',\n checkBoxTextHover: 'zs:hover:text-slate-700/70',\n },\n card: {\n border: 'zs:border-slate-900 zs:dark:border-slate-700',\n borderHover: 'zs:hover:border-gray-600 zs:dark:hover:border-slate-500',\n },\n modal: {\n border: 'zs:border-slate-900 zs:dark:border-slate-700',\n text: 'zs:text-slate-900 zs:dark:text-slate-300',\n },\n page404: {\n btnBG: 'zs:bg-slate-900 zs:dark:bg-slate-700',\n btnBGHover: 'zs:hover:bg-slate-800 zs:dark:hover:bg-slate-700/70',\n iconText: 'zs:text-slate-900 zs:dark:text-slate-700',\n },\n },\n ],\n [\n 'violet',\n {\n input: {\n border: 'zs:border-violet-300 zs:dark:border-violet-600',\n borderHover: 'zs:hover:border-violet-500 zs:dark:hover:border-violet-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-violet-800 zs:dark:text-violet-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-violet-400 zs:dark:focus-within:ring-violet-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-violet-500 zs:dark:bg-violet-700',\n btnBGHover: 'zs:hover:bg-violet-600',\n },\n buttonOutline: {\n border: 'zs:border-violet-500 zs:dark:border-violet-600',\n btnBGHover: 'zs:hover:bg-violet-600',\n text: 'zs:text-violet-500 zs:dark:text-violet-600'\n },\n select: {\n bgSelect: 'zs:bg-violet-200 zs:dark:bg-violet-800',\n cleartext: 'zs:text-violet-800 zs:dark:text-violet-500',\n cleartexthover: 'zs:hover:text-violet-600 zs:dark:hover:text-violet-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-violet-500 zs:dark:text-violet-700',\n checkBoxTextHover: 'zs:hover:text-violet-600',\n },\n card: {\n border: 'zs:border-violet-300 zs:dark:border-violet-700',\n borderHover: 'zs:hover:border-violet-600 zs:dark:hover:border-violet-500',\n },\n modal: {\n border: 'zs:border-violet-300 zs:dark:border-violet-600',\n text: 'zs:text-violet-800 zs:dark:text-violet-300',\n },\n page404: {\n btnBG: 'zs:bg-violet-500 zs:dark:bg-violet-700',\n btnBGHover: 'zs:hover:bg-violet-600',\n iconText: 'zs:text-violet-500 zs:dark:text-violet-700',\n },\n },\n ],\n [\n 'teal',\n {\n input: {\n border: 'zs:border-teal-300 zs:dark:border-teal-600',\n borderHover: 'zs:hover:border-teal-500 zs:dark:hover:border-teal-400',\n inputBg: 'zs:bg-white zs:dark:bg-slate-900',\n text: 'zs:text-teal-800 zs:dark:text-teal-300',\n },\n ring: {\n ring: 'zs:focus-within:ring-teal-400 zs:dark:focus-within:ring-teal-600',\n },\n buttonSolid: {\n btnBG: 'zs:bg-teal-500 zs:dark:bg-teal-700',\n btnBGHover: 'zs:hover:bg-teal-600',\n },\n buttonOutline: {\n border: 'zs:border-teal-500 zs:dark:border-teal-600',\n btnBGHover: 'zs:hover:bg-teal-600',\n text: 'zs:text-teal-500 zs:dark:text-teal-600'\n },\n select: {\n bgSelect: 'zs:bg-teal-200 zs:dark:bg-teal-800',\n cleartext: 'zs:text-teal-800 zs:dark:text-teal-500',\n cleartexthover: 'zs:hover:text-teal-600 zs:dark:hover:text-teal-300',\n },\n checkbox: {\n checkBoxText: 'zs:text-teal-500 zs:dark:text-teal-700',\n checkBoxTextHover: 'zs:hover:text-teal-600',\n },\n card: {\n border: 'zs:border-teal-300 zs:dark:border-teal-700',\n borderHover: 'zs:hover:border-teal-600 zs:dark:hover:border-teal-500',\n },\n modal: {\n border: 'zs:border-teal-300 zs:dark:border-teal-600',\n text: 'zs:text-teal-800 zs:dark:text-teal-300',\n },\n page404: {\n btnBG: 'zs:bg-teal-500 zs:dark:bg-teal-700',\n btnBGHover: 'zs:hover:bg-teal-600',\n iconText: 'zs:text-teal-500 zs:dark:text-teal-700',\n },\n },\n ],\n]);\n\n// Helper functions for backward compatibility\nexport const inputPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.input]));\nexport const ringPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.ring]));\nexport const buttonSolidPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.buttonSolid]));\nexport const buttonOutlinePaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.buttonOutline]));\nexport const selectPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.select]));\nexport const checkboxTextPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.checkbox]));\nexport const cardPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.card]));\nexport const modalPaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.modal]));\nexport const page404PaletteMap = new Map(Array.from(unifiedPaletteMap).map(([key, value]) => [key, value.page404]));\n\n// ==================================================================================\n// ==================================================================================\n\nexport type BaseColors =\n | 'slate' | 'gray' | 'zinc' | 'neutral' | 'stone'\n | 'red' | 'orange' | 'amber' | 'yellow' | 'rose'\n | 'lime' | 'green' | 'emerald' | 'teal'\n | 'cyan' | 'sky' | 'blue' | 'indigo'\n | 'violet'| 'purple' | 'fuchsia' | 'pink';\n\nexport type BaseColorPrefixes = 'text' | 'bg' | 'border';\n\nexport const ColorMapping: Map<BaseColors, Record<BaseColorPrefixes, string>> = new Map([\n ['slate', { text: 'zs:text-slate-600 zs:dark:text-slate-400', bg: 'zs:bg-slate-600 zs:dark:bg-slate-400', border: 'zs:border-slate-600 zs:dark:border-slate-400' }],\n ['gray', { text: 'zs:text-gray-600 zs:dark:text-gray-400', bg: 'zs:bg-gray-600 zs:dark:bg-gray-400', border: 'zs:border-gray-600 zs:dark:border-gray-400' }],\n ['zinc', { text: 'zs:text-zinc-600 zs:dark:text-zinc-400', bg: 'zs:bg-zinc-600 zs:dark:bg-zinc-400', border: 'zs:border-zinc-600 zs:dark:border-zinc-400' }],\n ['neutral', { text: 'zs:text-neutral-600 zs:dark:text-neutral-400', bg: 'zs:bg-neutral-600 zs:dark:bg-neutral-400', border: 'zs:border-neutral-600 zs:dark:border-neutral-400' }],\n ['stone', { text: 'zs:text-stone-600 zs:dark:text-stone-400', bg: 'zs:bg-stone-600 zs:dark:bg-stone-400', border: 'zs:border-stone-600 zs:dark:border-stone-400' }],\n ['red', { text: 'zs:text-red-600 zs:dark:text-red-400', bg: 'zs:bg-red-600 zs:dark:bg-red-400', border: 'zs:border-red-600 zs:dark:border-red-400' }],\n ['orange', { text: 'zs:text-orange-600 zs:dark:text-orange-400', bg: 'zs:bg-orange-600 zs:dark:bg-orange-400', border: 'zs:border-orange-600 zs:dark:border-orange-400' }],\n ['amber', { text: 'zs:text-amber-600 zs:dark:text-amber-400', bg: 'zs:bg-amber-600 zs:dark:bg-amber-400', border: 'zs:border-amber-600 zs:dark:border-amber-400' }],\n ['yellow', { text: 'zs:text-yellow-600 zs:dark:text-yellow-400', bg: 'zs:bg-yellow-600 zs:dark:bg-yellow-400', border: 'zs:border-yellow-600 zs:dark:border-yellow-400' }],\n ['lime', { text: 'zs:text-lime-600 zs:dark:text-lime-400', bg: 'zs:bg-lime-600 zs:dark:bg-lime-400', border: 'zs:border-lime-600 zs:dark:border-lime-400' }],\n ['green', { text: 'zs:text-green-600 zs:dark:text-green-400', bg: 'zs:bg-green-600 zs:dark:bg-green-400', border: 'zs:border-green-600 zs:dark:border-green-400' }],\n ['emerald', { text: 'zs:text-emerald-600 zs:dark:text-emerald-400', bg: 'zs:bg-emerald-600 zs:dark:bg-emerald-400', border: 'zs:border-emerald-600 zs:dark:border-emerald-400' }],\n ['teal', { text: 'zs:text-teal-600 zs:dark:text-teal-400', bg: 'zs:bg-teal-600 zs:dark:bg-teal-400', border: 'zs:border-teal-600 zs:dark:border-teal-400' }],\n ['cyan', { text: 'zs:text-cyan-600 zs:dark:text-cyan-400', bg: 'zs:bg-cyan-600 zs:dark:bg-cyan-400', border: 'zs:border-cyan-600 zs:dark:border-cyan-400' }],\n ['sky', { text: 'zs:text-sky-600 zs:dark:text-sky-400', bg: 'zs:bg-sky-600 zs:dark:bg-sky-400', border: 'zs:border-sky-600 zs:dark:border-sky-400' }],\n ['blue', { text: 'zs:text-blue-600 zs:dark:text-blue-400', bg: 'zs:bg-blue-600 zs:dark:bg-blue-400', border: 'zs:border-blue-600 zs:dark:border-blue-400' }],\n ['indigo', { text: 'zs:text-indigo-600 zs:dark:text-indigo-400', bg: 'zs:bg-indigo-600 zs:dark:bg-indigo-400', border: 'zs:border-indigo-600 zs:dark:border-indigo-400' }],\n ['violet', { text: 'zs:text-violet-600 zs:dark:text-violet-400', bg: 'zs:bg-violet-600 zs:dark:bg-violet-400', border: 'zs:border-violet-600 zs:dark:border-violet-400' }],\n ['purple', { text: 'zs:text-purple-600 zs:dark:text-purple-400', bg: 'zs:bg-purple-600 zs:dark:bg-purple-400', border: 'zs:border-purple-600 zs:dark:border-purple-400' }],\n ['fuchsia', { text: 'zs:text-fuchsia-600 zs:dark:text-fuchsia-400', bg: 'zs:bg-fuchsia-600 zs:dark:bg-fuchsia-400', border: 'zs:border-fuchsia-600 zs:dark:border-fuchsia-400' }],\n ['pink', { text: 'zs:text-pink-600 zs:dark:text-pink-400', bg: 'zs:bg-pink-600 zs:dark:bg-pink-400', border: 'zs:border-pink-600 zs:dark:border-pink-400' }],\n ['rose', { text: 'zs:text-rose-600 zs:dark:text-rose-400', bg: 'zs:bg-rose-600 zs:dark:bg-rose-400', border: 'zs:border-rose-600 zs:dark:border-rose-400' }],\n]);\n","import { Injectable } from \"@angular/core\";\n\n@Injectable({ providedIn: 'root' })\nexport class VisibilityObserverService {\n private observer: IntersectionObserver;\n private callbacks = new WeakMap<Element, () => void>();\n\n constructor() {\n this.observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const callback = this.callbacks.get(entry.target);\n if (callback) {\n callback();\n this.callbacks.delete(entry.target);\n this.observer.unobserve(entry.target);\n }\n }\n }\n }, {\n threshold: 0.2,\n rootMargin: '0px 0px 0px 0px'\n });\n }\n\n observe(el: Element, callback: () => void): void {\n this.callbacks.set(el, callback);\n this.observer.observe(el);\n }\n\n unobserve(el: Element): void {\n this.callbacks.delete(el);\n this.observer.unobserve(el);\n }\n}","import { Component, computed, ElementRef, inject, input, signal, viewChild } from '@angular/core';\nimport { cardPaletteMap, FormStyle, ringPaletteMap } from '../palette-service';\nimport { VisibilityObserverService } from '../visibility-observer/visibility-observer-service';\nimport { CommonModule } from '@angular/common';\n\n// ==============================================================================\n// Types\n// ==============================================================================\nexport interface VariantType {\n border?: boolean,\n border_hover?: boolean,\n shadow?: boolean,\n}\n\nexport type AnimationType =\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n | 'none';\n\n// ==============================================================================\n// Component\n// ==============================================================================\n@Component({\n selector: 'ZS-card',\n standalone: true,\n templateUrl: './card.html',\n styleUrl: './card.css',\n imports: [CommonModule]\n})\nexport class Card {\n readonly visibility = inject(VisibilityObserverService)\n\n // ==========================================================================\n // Inputs\n // ==========================================================================\n readonly cardStyle = input<FormStyle>('primary');\n readonly variant = input<VariantType>();\n readonly clickable = input<boolean>(false);\n readonly animation = input<AnimationType>('none');\n readonly bodyClass = input<string>('zs:bg-gray-100 zs:dark:bg-gray-800');\n\n // ==========================================================================\n // Local State\n // ==========================================================================\n readonly cardRef = viewChild<ElementRef>('cardRef');\n readonly isVisible = signal<boolean>(false);\n\n constructor() {\n queueMicrotask(() => {\n const el = this.cardRef()?.nativeElement;\n if (!el) return;\n\n this.visibility.observe(el, () => {\n this.isVisible.set(true);\n })\n });\n }\n\n // ==========================================================================\n // Computed Classes\n // ==========================================================================\n\n readonly animationClasses = computed<string>(() => {\n const animation = this.animation();\n const visible = this.isVisible();\n\n const animateMap: Record<AnimationType, string> = {\n 'top': 'zs:-translate-y-8',\n 'bottom': 'zs:translate-y-8',\n 'left': 'zs:-translate-x-8',\n 'right': 'zs:translate-x-8',\n 'top-left': 'zs:-translate-y-8 zs:-translate-x-8',\n 'top-right': 'zs:-translate-y-8 zs:translate-x-8',\n 'bottom-left': 'zs:translate-y-8 zs:-translate-x-8',\n 'bottom-right': 'zs:translate-y-8 zs:translate-x-8',\n 'none': ''\n };\n\n if (visible) {\n return `zs:opacity-100\n zs:transform-gpu\n zs:will-change-transform\n zs:translate-x-0\n zs:translate-y-0\n zs:transition zs:duration-500`;\n }\n\n // Hidden state\n if (animation === 'none') {\n return 'zs:opacity-100';\n }\n\n return [\n 'zs:opacity-0',\n animateMap[animation],\n 'zs:transform-gpu',\n 'zs:will-change-transform'\n ].filter(Boolean).join(' ');\n });\n\n readonly classList = computed<string>(() => {\n const style = this.cardStyle();\n const variant = this.variant();\n const clickable = this.clickable();\n const bodyClass = this.bodyClass();\n\n const ringPalette = ringPaletteMap.get(style)!;\n const cardPalette = cardPaletteMap.get(style)!;\n\n const base = 'zs:w-full zs:h-full zs:overflow-hidden zs:flex zs:flex-col zs:gap-4 zs:rounded-lg zs:transition-all zs:duration-300';\n\n // ---------------------\n // Border Handling\n // ---------------------\n const border = (variant?.border ?? true) ? `zs:border ${cardPalette.border}` : 'zs:border-0';\n\n // ---------------------\n // Shadow Handling\n // ---------------------\n const shadowClasses = (variant?.shadow ?? true)\n ? 'zs:shadow-md zs:dark:shadow-slate-700/50 zs:hover:shadow-lg'\n : 'zs:shadow-none';\n\n // ---------------------\n // Hover Border Handling\n // ---------------------\n const hoverBorder = (variant?.border_hover ?? true) ? cardPalette.borderHover : '';\n\n // ---------------------\n // Clickable / Focus Effects\n // ---------------------\n const clickEffects = clickable\n ? `zs:cursor-pointer zs:hover:scale-[1.02] zs:active:scale-[0.97] zs:focus-visible:ring-2 ${ringPalette.ring}`\n : '';\n\n // ---------------------\n // Combine Classes\n // ---------------------\n return [\n base,\n border,\n hoverBorder,\n bodyClass,\n shadowClasses,\n clickEffects,\n ]\n .filter(Boolean)\n .join(' ');\n });\n}","<div #cardRef \n[ngClass]=\"[classList(), animationClasses()]\"\nrole=\"group\"\ntabindex=\"0\"\n[attr.aria-label]=\"clickable() ? 'Interactive card' : 'Information card'\"\n[attr.aria-pressed]=\"clickable() ? 'false' : null\"\n>\n <ng-content></ng-content>\n</div>","// ==============================================\n// Types\n// ==============================================\n\nexport interface CarouselItem {\n id: number | string;\n name: string;\n image: string;\n description?: string;\n [key: string]: any; // Allow for additional properties\n}\n\nexport type ItemShapeType = 'rect' | 'circle';\n\n// ==============================================\n// Component\n// ==============================================\n\nimport { Component, input, output, model, viewChild, ElementRef, computed, effect, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BaseColors, ColorMapping } from '../palette-service';\n\n@Component({\n selector: 'ZS-carousel',\n imports: [CommonModule],\n templateUrl: './carousel.html',\n styleUrl: './carousel.css'\n})\nexport class Carousel {\n\n // ==============================================\n // Inputs\n // ==============================================\n\n readonly itemsNumber = input.required<number>();\n\n readonly arrows = input<boolean>(true); // Show/hide navigation arrows\n readonly arrowColor = input<BaseColors>('gray'); // Arrow color CSS class\n\n readonly showIndicators = input<boolean>(true);\n\n readonly autoPlay = input<boolean>(true);\n readonly duration = input<number>(3000);\n\n readonly maxItemsPerBox = input<number>(4); // Maximum number of items visible in one box\n\n readonly itemMinWidth = input<number>(200);\n\n // ==============================================\n // Outputs\n // ==============================================\n\n readonly indexChangeEv = output<number>();\n\n // ==============================================\n // Model\n // ==============================================\n\n readonly currentIndex = model<number>(0);\n\n // ==============================================\n // View Children\n // ==============================================\n\n readonly carouselContainer = viewChild<ElementRef<HTMLElement>>('carouselContainer');\n readonly carouselTrack = viewChild<ElementRef<HTMLDivElement>>('carouselTrack');\n\n // ==============================================\n // Signals\n // ==============================================\n\n readonly itemsPerBox = signal<number>(1);\n readonly currentTranslate = signal<number>(0);\n readonly dragging = signal<boolean>(false);\n private readonly startX = signal<number>(0);\n private readonly prevTranslate = signal<number>(0);\n\n // ==============================================\n // Computed Properties\n // ==============================================\n readonly arrowColorClass = computed<string>(\n () => ColorMapping.get(this.arrowColor())?.text ?? 'zs:text-gray-600'\n )\n \n readonly itemsPerBoxWidth = computed<string>(() => `${100 / this.itemsPerBox()}%`);\n\n readonly totalBoxes = computed<number>(() =>\n Math.ceil(this.itemsNumber() / this.itemsPerBox())\n );\n\n readonly indicatorBoxes = computed<number[]>(() =>\n Array.from({ length: this.totalBoxes() }, (_, i) => i)\n );\n\n // ==============================================\n // Private Properties\n // ==============================================\n\n private autoPlayTimer: ReturnType<typeof setInterval> | null = null;\n private resizeObserver!: ResizeObserver;\n\n // ==============================================\n // Lifecycle Hooks\n // ==============================================\n\n constructor() {\n effect(() => {\n this.autoPlay() ? this.startAutoPlay() : this.stopAutoPlay();\n });\n }\n\n ngAfterViewInit() {\n const el = this.carouselContainer()?.nativeElement;\n if (el) {\n this.resizeObserver = new ResizeObserver(() => {\n this.updateItemsPerBox();\n const containerWidth = el.offsetWidth;\n const pos = -this.currentIndex() * containerWidth;\n this.applyTranslate(pos, 'none');\n });\n this.resizeObserver.observe(el);\n this.updateItemsPerBox();\n const containerWidth = el.offsetWidth;\n this.applyTranslate(-this.currentIndex() * containerWidth, 'none');\n }\n }\n\n ngOnDestroy() {\n this.stopAutoPlay();\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n }\n\n // ==============================================\n // Public Methods\n // ==============================================\n\n updateIndex(newIndex: number): void {\n const containerEl = this.carouselContainer();\n if (!containerEl) return;\n\n this.currentIndex.set(newIndex);\n this.indexChangeEv.emit(newIndex);\n\n const containerWidth = containerEl.nativeElement.offsetWidth;\n const newTranslate = -newIndex * containerWidth;\n this.applyTranslate(newTranslate, 'transform 0.3s ease-out');\n\n this.restartAutoPlay();\n }\n\n next(): void {\n if (this.currentIndex() < this.totalBoxes() - 1) {\n this.updateIndex(this.currentIndex() + 1);\n } else {\n this.updateIndex(0);\n }\n }\n\n previous(): void {\n if (this.currentIndex() > 0) {\n this.updateIndex(this.currentIndex() - 1);\n } else {\n this.updateIndex(this.totalBoxes() - 1);\n }\n }\n\n // ==============================================\n // AutoPlay Methods\n // ==============================================\n\n startAutoPlay(): void {\n if (this.autoPlayTimer) return;\n this.autoPlayTimer = setInterval(() => this.next(), this.duration());\n }\n\n stopAutoPlay(): void {\n if (this.autoPlayTimer) {\n clearInterval(this.autoPlayTimer);\n this.autoPlayTimer = null;\n }\n }\n\n restartAutoPlay(): void {\n this.stopAutoPlay();\n if (this.autoPlay()) {\n this.startAutoPlay();\n }\n }\n\n // ==============================================\n // Resize Handling\n // ==============================================\n\n private updateItemsPerBox(): void {\n const containerWidth = this.carouselContainer()?.nativeElement.offsetWidth || 0;\n const possibleCount = Math.floor(containerWidth / this.itemMinWidth());\n this.itemsPerBox.set(\n Math.min(this.maxItemsPerBox(), Math.max(1, possibleCount))\n );\n }\n\n // ==============================================\n // Drag Handling\n // ==============================================\n\n onDragStart(event: PointerEvent): void {\n event.preventDefault();\n const trackEl = this.carouselTrack();\n const containerEl = this.carouselContainer();\n if (!trackEl || !containerEl) return;\n\n this.dragging.set(true);\n this.startX.set(event.clientX);\n this.prevTranslate.set(-this.currentIndex() * containerEl.nativeElement.offsetWidth);\n\n trackEl.nativeElement.style.transition = 'none';\n this.stopAutoPlay();\n }\n\n onDragMove(event: PointerEvent): void {\n if (!this.dragging()) return;\n const delta = event.clientX - this.startX();\n this.currentTranslate.set(this.prevTranslate() + delta);\n }\n\n onDragEnd(): void {\n if (!this.dragging()) return;\n this.dragging.set(false);\n\n const containerEl = this.carouselContainer();\n if (!containerEl) return;\n\n const containerWidth = containerEl.nativeElement.offsetWidth;\n const movedSlides = Math.round(-this.currentTranslate() / containerWidth);\n const newIndex = Math.max(0, Math.min(this.totalBoxes() - 1, movedSlides));\n\n this.updateIndex(newIndex);\n\n const finalTranslate = -this.currentIndex() * containerWidth;\n this.applyTranslate(finalTranslate, 'transform 0.3s ease-out');\n\n if (this.autoPlay()) {\n this.startAutoPlay();\n }\n }\n\n // ==============================================\n // Helper Methods\n // ==============================================\n\n private applyTranslate(value: number, transition: string | null = 'transform 0.3s ease-out'): void {\n this.currentTranslate.set(value);\n const trackEl = this.carouselTrack();\n if (!trackEl) return;\n\n trackEl.nativeElement.style.transition = transition ?? 'none';\n }\n}","<!-- =================================== Main Container =================================== -->\n<div \n class=\"zs:relative zs:w-full zs:mt-6\"\n role=\"region\"\n aria-label=\"Image carousel\"\n aria-roledescription=\"carousel\"\n>\n\n <!-- =================================== Carousel Track =================================== -->\n <div \n carousel-container\n #carouselContainer\n class=\"zs:overflow-hidden zs:relative\"\n role=\"group\"\n aria-label=\"Carousel track\"\n (pointerdown)=\"onDragStart($event)\"\n (pointermove)=\"onDragMove($event)\"\n (pointerup)=\"onDragEnd()\"\n (pointerleave)=\"onDragEnd()\"\n (pointercancel)=\"onDragEnd()\"\n [class.dragging]=\"dragging()\"\n >\n <div \n #carouselTrack \n [style.--carousel-item-width]=\"itemsPerBoxWidth()\"\n class=\"zs:flex zs:transition-transform zs:duration-500 zs:ease-in-out\"\n [style.transform]=\"'translateX(' + currentTranslate() + 'px)'\"\n >\n <!-- Cards -->\n <ng-content select=\"[carousel-item]\"></ng-content>\n <!-- /Cards -->\n </div>\n </div>\n <!-- =================================== /Carousel Track =================================== -->\n\n <!-- =================================== Navigation Arrows =================================== -->\n @if (arrows()) {\n <button\n type=\"button\"\n class=\"zs:absolute zs:top-1/2 zs:left-3 zs:size-10 zs:-translate-y-1/2 zs:p-3 zs:flex zs:items-center zs:justify-center \n zs:rounded-full zs:bg-gray-100/50 zs:dark:bg-gray-500/50 zs:hover:bg-gray-100/70 \n zs:dark:hover:bg-gray-500/70 zs:transition shadow-lg-all shadow-lg-all-night\"\n (click)=\"previous()\"\n aria-label=\"Previous slide\"\n [attr.aria-controls]=\"carouselContainer?.id\"\n >\n <i [ngClass]=\"arrowColorClass()\" class=\"fas fa-chevron-left zs:text-xl\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n type=\"button\"\n class=\"zs:absolute zs:top-1/2 zs:right-3 zs:size-10 zs:-translate-y-1/2 zs:p-3 zs:flex zs:items-center zs:justify-center \n zs:rounded-full zs:bg-gray-100/50 zs:dark:bg-gray-500/50 zs:hover:bg-gray-100/70 \n zs:dark:hover:bg-gray-500/70 zs:transition shadow-lg-all shadow-lg-all-night\"\n (click)=\"next()\"\n aria-label=\"Next slide\"\n [attr.aria-controls]=\"carouselContainer?.id\"\n >\n <i [ngClass]=\"arrowColorClass()\" class=\"fas fa-chevron-right zs:text-xl\" aria-hidden=\"true\"></i>\n </button>\n }\n <!-- =================================== /Navigation Arrows =================================== -->\n\n</div>\n<!-- =================================== /Main Container =================================== -->\n\n\n<!-- =================================== Indicators =================================== -->\n@if(showIndicators()) {\n <div class=\"zs:flex zs:justify-center zs:mt-4 zs:gap-2\" role=\"tablist\" aria-label=\"Carousel indicators\">\n @for (item of indicatorBoxes(); track $index; let i = $index) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"zs:w-3 zs:h-3 zs:rounded-full zs:transition\"\n [ngClass]=\"currentIndex() === i \n ? 'zs:bg-gray-800 zs:dark:bg-gray-200 zs:scale-110' \n : 'zs:bg-gray-400 zs:dark:bg-gray-600 zs:hover:bg-gray-600 zs:dark:hover:bg-gray-400'\"\n (click)=\"updateIndex(i)\"\n [attr.aria-label]=\"'Go to slide ' + (i + 1)\"\n [attr.aria-current]=\"currentIndex() === i ? 'true' : null\"\n tabindex=\"0\"\n ></button>\n }\n </div>\n}\n<!-- =================================== /Indicators =================================== -->","import { CommonModule } from '@angular/common';\nimport { Component, effect, output, signal } from '@angular/core';\n\n@Component({\n selector: 'ZS-connection',\n imports: [CommonModule],\n templateUrl: './connection.html',\n styleUrl: './connection.css'\n})\nexport class Connection {\n readonly isOnline = signal<boolean>(true);\n readonly isOnlineEv = output<boolean>();\n\n private onlineListener = () => this.isOnline.set(true);\n private offlineListener = () => this.isOnline.set(false);\n\n constructor() {\n this.checkOnline();\n\n window.addEventListener('online', this.onlineListener);\n window.addEventListener('offline', this.offlineListener);\n\n effect(() => {\n const status = this.isOnline();\n this.isOnlineEv.emit(status);\n })\n }\n\n private checkOnline() {\n if(navigator.onLine) this.onlineListener()\n else this.offlineListener()\n }\n}\n","<div tabindex=\"0\" \n class=\"zs:inline-flex zs:items-center zs:justify-center zs:gap-2 zs:rounded-full \n zs:text-sm zs:font-medium zs:px-3 zs:h-8 zs:w-fit zs:cursor-pointer\"\n [ngClass]=\"[\n isOnline() \n ? 'zs:bg-green-100 zs:text-green-800 zs:dark:bg-green-700 zs:dark:text-green-100'\n : 'zs:bg-red-100 zs:text-red-800 zs:dark:bg-red-700 zs:dark:text-red-100'\n ]\"\n>\n <i\n class=\"fa fa-circle zs:text-xs zs:leading-none\"\n [ngClass]=\"[\n isOnline() ? 'zs:text-green-500' : 'zs:text-red-500'\n ]\"\n aria-hidden=\"true\"\n ></i>\n <span>\n @if (isOnline()) {\n Online\n } @else {\n Offline\n }\n </span>\n</div>","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExtractorService {\n /**\n * Extract all error messages recursively from any structure\n * @param input - could be string | Array | object | | Error | null | undefined\n * @returns string[] - flattened array of all messages\n */\n extract(input: unknown): string[] {\n const result: string[] = [];\n const seen = new WeakSet();\n\n const traverse = (value: unknown): void => {\n if (value == null) return; // null or undefined\n\n if (typeof value === 'string') {\n result.push(String(value));\n } else if (Array.isArray(value)) {\n for (const item of value) traverse(item);\n } else if (value instanceof Error) {\n result.push(value.message);\n } else if (typeof value === 'object') {\n if (seen.has(value)) return;\n seen.add(value);\n\n for (const key of Object.keys(value as object)) {\n traverse((value as any)[key]);\n }\n }\n };\n\n traverse(input);\n return result;\n }\n}\n","// ==============================================\n// Types\n// ==============================================\n\nimport { signal, computed, WritableSignal } from '@angular/core';\n\n// نوع الحقل الواحد: يحتوي على value و valid\nexport type ZFormField<T> = WritableSignal<{ value: T | null; valid: boolean }>;\n\n// خريطة الحقول كلها\nexport type ZFormFieldMap<T extends Record<string, any>> = {\n [K in keyof T]: ZFormField<T[K]>;\n};\n\n// ==============================================\n// Zform Class\n// ==============================================\n\nexport class Form<T extends Record<string, any>> {\n public readonly fields: ZFormFieldMap<T>;\n public readonly touched = signal(false);\n\n constructor(initial: T) {\n this.fields = Object.keys(initial).reduce((acc, key) => {\n (acc as any)[key] = signal({\n value: initial[key],\n valid: false,\n });\n return acc;\n }, {} as ZFormFieldMap<T>);\n }\n\n // ==============================================\n // Field Accessors\n // ==============================================\n\n public set<K extends keyof T>(key: K, value: T[K] | null, valid: boolean = true): void {\n this.fields[key].set({ value, valid });\n }\n\n public patch<K extends keyof T>(key: K, partial: Partial<{ value: T[K] | null; valid: boolean }>): void {\n const current = this.fields[key]();\n this.fields[key].set({ ...current, ...partial });\n }\n\n public get<K extends keyof T>(key: K): { value: T[K] | null; valid: boolean } {\n return this.fields[key]();\n }\n\n // ==============================================\n // Form State & Validation\n // ==============================================\n\n public readonly allFilled = computed<boolean>(() => {\n return Object.values(this.fields).every(f => {\n const v = f();\n return v.value !== null && v.value !== '' && v.valid === true;\n });\n });\n\n private markAllTouched(): void {\n this.touched.set(true);\n }\n\n // ==============================================\n // Data Extraction & Submission\n // ==============================================\n\n public getValues(): T {\n const result: Partial<T> = {};\n for (const key in this.fields) {\n if (this.fields.hasOwnProperty(key)) {\n result[key] = this.fields[key]().value ?? undefined;\n }\n }\n return result as T;\n }\n\n public getValidations(): Record<keyof T, boolean> {\n const result: Partial<Record<keyof T, boolean>> = {};\n for (const key in this.fields) {\n if (this.fields.hasOwnProperty(key)) {\n result[key] = this.fields[key]().valid;\n }\n }\n return result as Record<keyof T, boolean>;\n }\n\n public submit(callback: (values: T) => void): void {\n this.markAllTouched();\n\n const allFilled = this.allFilled()\n const allValid = Object.values(this.getValidations()).every(v => v === true);\n\n if (!allFilled || !allValid) return;\n\n callback(this.getValues());\n }\n}\n","// ==============================================\n// Types\n// ==============================================\n\nexport type ButtonVariant = 'solid' | 'outline';\nexport type BtnSizeType = 'xs' | BaseSize | 'xl'\n\n// ==============================================\n// Imports\n// ==============================================\n\nimport {\n Component,\n input,\n computed,\n output,\n} from '@angular/core';\nimport { FormStyle, BaseSize, buttonSolidPaletteMap, ringPaletteMap, buttonOutlinePaletteMap } from '../../palette-service';\nimport { CommonModule } from '@angular/common';\n\n\n// ==============================================\n// Component Metadata\n// ==============================================\n\n@Component({\n selector: 'ZS-button',\n imports: [CommonModule],\n templateUrl: './button.html',\n styleUrl: './button.css'\n})\nexport class Button {\n\n\n // ==============================================\n // Inputs\n // ==============================================\n readonly Id = input<string>(crypto.randomUUID());\n readonly btnStyle = input<FormStyle>('primary');\n readonly variant = input<ButtonVariant>('solid');\n readonly size = input<BtnSizeType>('md');\n readonly disabled = input<boolean>(false);\n readonly icon = input<string | null>(null); // Optional FontAwesome icon class (e.g., \"fa fa-plus\")\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n\n\n // ==============================================\n // Outputs\n // ==============================================\n\n readonly clickedEv = output<Event>();\n\n\n // ==============================================\n // Computed Properties\n // ==============================================\n\n readonly solidTextColor = computed<string>(() => {\n if(['primary', 'dark', 'violet', 'secondary'].includes(this.btnStyle())) \n return 'zs:text-slate-100'\n return 'zs:text-slate-800 zs:dark:text-slate-100'\n });\n\n readonly baseClasses = computed<string>(() => {\n const size = this.size();\n const variant = this.variant();\n const solidPalette = buttonSolidPaletteMap.get(this.btnStyle())!;\n const outlinePalette = buttonOutlinePaletteMap.get(this.btnStyle())!;\n const ringConfig = ringPaletteMap.get(this.btnStyle())!;\n\n const solidPadding = {\n xs: 'zs:px-2 zs:py-1',\n sm: 'zs:px-3.5 zs:py-1.75',\n md: 'zs:px-5 zs:py-2.5',\n lg: 'zs:px-6.5 zs:py-3.25',\n xl: 'zs:px-8 zs:py-4',\n }[size];\n\n const outlinePadding = {\n xs: 'zs:px-[calc(--spacing(2)-1px)] zs:py-[calc(--spacing(2)-1px)]',\n sm: 'zs:px-[calc(--spacing(3.5)-1px)] zs:py-[calc(--spacing(1.75)-1px)]',\n md: 'zs:px-[calc(--spacing(5)-1px)] zs:py-[calc(--spacing(2.5)-1px)]',\n lg: 'zs:px-[calc(--spacing(6.5)-1px)] zs:py-[calc(--spacing(3.25)-1px)]',\n xl: 'zs:px-[calc(--spacing(8)-1px)] zs:py-[calc(--spacing(4)-1px)]',\n }[size];\n\n const solidClasses = this.join(\n solidPalette.btnBG,\n solidPalette.btnBGHover,\n 'zs:hover:scale-[1.02]',\n 'zs:shadow-md zs:dark:shadow-slate-700/50',\n 'zs:hover:shadow-lg',\n 'zs:active:shadow-sm',\n ['dark', 'secondary'].includes(this.btnStyle()) ? 'zs:dark:hover:shadow-sm' : '',\n this.solidTextColor(),\n );\n\n const outlineClasses = this.join(\n 'zs:bg-transparent',\n 'zs:border-[1px]',\n outlinePalette.border,\n outlinePalette.btnBGHover,\n outlinePalette.text,\n 'zs:hover:text-gray-50',\n 'zs:hover:shadow-sm',\n )\n\n const stateClasses = this.disabled()\n ? 'zs:opacity-60 zs:cursor-not-allowed zs:shadow-none'\n : this.join(\n 'zs:active:scale-[0.97]',\n\n 'zs:transition-[background-color,color,border-color,box-shadow,opacity]',\n 'zs:duration-200',\n 'zs:ease-in-out',\n )\n\n return this.join(\n variant === 'solid' ? solidPadding : outlinePadding,\n variant === 'solid' ? solidClasses : outlineClasses,\n stateClasses,\n ringConfig.ring,\n 'zs:inline-flex zs:items-center zs:justify-center',\n ['xl'].includes(size) ? 'zs:rounded-xl' : 'zs:rounded-lg',\n 'zs:focus-visible:ring-2',\n 'zs:select-none',\n 'zs:outline-hidden',\n )\n });\n\n\n // ==============================================\n // Methods\n // ==============================================\n private join(...classes: string[]): string {\n return classes.join(' ');\n }\n\n onClick(event: Event): void {\n if (!this.disabled()) {\n this.clickedEv.emit(event);\n }\n }\n}","<!-- ========================= Button Core Attributes ========================= -->\n<button \n [id]=\"Id()\"\n class=\"zs:w-full\"\n [attr.type]=\"type()\"\n [disabled]=\"disabled()\"\n [ngClass]=\"['zs:flex zs:gap-2', baseClasses()]\"\n\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-label]=\"icon() ? (icon() + ' button') : undefined\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n\n (click)=\"onClick($event)\"\n>\n <!-- ========================= Button Content ========================= -->\n @if (icon()) {\n <i [class]=\"icon()\" aria-hidden=\"true\"></i>\n }\n <ng-content></ng-content>\n</button>","import { Component, computed, effect, HostListener, input, model, output, signal, untracked } from '@angular/core';\nimport { BaseSize, FormStyle, modalPaletteMap } from '../palette-service';\nimport { Button, ButtonVariant } from '../FormCompFolder/button/button';\nimport { CommonModule } from '@angular/common';\nimport { zIndices, ZIndicesType } from '../z-index';\n\n\n// ==============================================\n// Interfaces\n// ==============================================\n\nexport interface BtnType {\n show?: boolean;\n text?: string;\n\n btnStyle?: FormStyle;\n variant?: ButtonVariant;\n size?: BaseSize;\n icon?: string | null\n disabled?: boolean;\n}\nexport type BtnTypeDefault = Required<BtnType>;\nexport type Position = 'left top' | 'left bot' | 'right top' | 'right bot' | 'center' | 'top' | 'bot'\n\n// ==============================================\n// Maps\n// ==============================================\n\nconst positionMap: Record<Position, string> = {\n 'left top': 'zs:justify-start zs:items-start',\n 'left bot': 'zs:justify-start zs:items-end',\n 'right top': 'zs:justify-end zs:items-start',\n 'right bot': 'zs:justify-end zs:items-end',\n 'top': 'zs:justify-center zs:items-start',\n 'bot': 'zs:justify-center zs:items-end',\n 'center': 'zs:justify-center zs:items-center',\n};\n\n// ==============================================\n// Component Metadata\n// ==============================================\n\n@Component({\n selector: 'ZS-modal',\n imports: [Button, CommonModule],\n templateUrl: './modal.html',\n styleUrl: './modal.css'\n})\nexport class Modal {\n readonly zIndices: ZIndicesType = zIndices;\n\n // ==============================================\n // Model\n // ==============================================\n\n /** 🔹 Model لتحديد الفتح والإغلاق */\n readonly open = model<boolean>(false);\n\n\n // ==============================================\n // Inputs\n // ==============================================\n\n readonly title = input<string>('Modal Title');\n readonly modalStyle = input<FormStyle>('primary');\n\n readonly showCancelIcon = input<boolean>(true)\n readonly showFooter = input<boolean>(true);\n\n readonly cancelConfig = input<BtnType>();\n readonly confirmConfig = input<BtnType>();\n\n readonly position = input<Position>('center');\n readonly closeOnOverlay = input<boolean>(true);\n\n // ==============================================\n // Defaults\n // ==============================================\n\n readonly cancelConfigDefault: BtnTypeDefault = {\n show: true,\n text: 'Cancel',\n\n btnStyle: 'secondary',\n variant: 'outline',\n size: 'md',\n icon: null,\n disabled: false\n }\n readonly confirmConfigDefault: BtnTypeDefault = {\n show: true,\n text: 'Confirm',\n\n btnStyle: 'primary',\n variant: 'solid',\n size: 'md',\n icon: null,\n disabled: false\n }\n readonly cancelMerged = computed<{\n show: boolean;\n text: string;\n btnStyle: FormStyle;\n variant: ButtonVariant;\n size: BaseSize;\n icon: string | null;\n disabled: boolean;\n }>(() => ({\n ...this.cancelConfigDefault,\n ...(this.cancelConfig() ?? {})\n }));\n\n readonly confirmMerged = computed<{\n show: boolean;\n text: string;\n btnStyle: FormStyle;\n variant: ButtonVariant;\n size: BaseSize;\n icon: string | null;\n disabled: boolean;\n }>(() => ({\n ...this.confirmConfigDefault,\n ...(this.confirmConfig() ?? {})\n }));\n\n\n // ==============================================\n // Outputs\n // ==============================================\n\n readonly confirmEv = output<void>();\n readonly cancelEv = output<void>();\n readonly closedEv = output<void>();\n\n\n // ==============================================\n // Computed Signals\n // ==============================================\n\n readonly palette = computed<{\n border: string;\n text: string;\n }>(() => modalPaletteMap.get(this.modalStyle())!)\n\n readonly isOpen = signal<boolean>(false);\n readonly positionClass = computed<string>(() => positionMap[this.position()])\n\n private setTimeId?: ReturnType<typeof setTimeout>;\n constructor() {\n effect(() => {\n const state = this.open();\n if(state) this.isOpen.set(true)\n \n untracked(() => {\n clearTimeout(this.setTimeId);\n if (!state && this.isOpen()) {\n this.setTimeId = window.setTimeout(() => this.isOpen.set(false), 250);\n }\n })\n })\n }\n\n // ==============================================\n // Methods\n // ==============================================\n\n close() {\n this.open.set(false);\n this.closedEv.emit();\n }\n\n onOverlayClick(event: MouseEvent) {\n if (this.closeOnOverlay()) {\n this.close();\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape() {\n if (this.isOpen()) this.close();\n }\n}","<!-- ========================= Overlay ========================= -->\n@if (isOpen()) {\n <div #modalRef\n class=\"zs:fixed zs:inset-0 zs:flex {{ zIndices.modal }} zs:bg-black/50 zs:dark:bg-black/70 zs:transition-all zs:duration-300\"\n [ngClass]=\"[positionClass(), open() ? 'animate-fadeIn' : 'animate-fadeOut']\"\n (click)=\"onOverlayClick($event)\"\n role=\"presentation\"\n [attr.inert]=\"isOpen() ? null : ''\"\n >\n\n <!-- ========================= Modal Container ========================= -->\n <div\n class=\"zs:relative zs:m-4 zs:bg-white zs:dark:bg-slate-900 zs:w-full zs:max-w-lg zs:mx-4 \n zs:rounded-2xl zs:shadow-lg zs:transition-all zs:duration-300 zs:outline-hidden\"\n [ngClass]=\"[\n 'zs:border', \n palette().border,\n palette().text,\n open() ? 'animate-modalIn' : 'animate-modalOut'\n ]\"\n (click)=\"$event.stopPropagation()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"'modal-title'\"\n [attr.aria-describedby]=\"'modal-body'\"\n tabindex=\"0\"\n (keydown.escape)=\"close()\"\n >\n\n <!-- ========================= Modal Header ========================= -->\n <div\n class=\"zs:flex zs:items-center zs:justify-between zs:px-4 zs:py-3 zs:border-b\"\n [class]=\"palette().border\"\n >\n <h3 id=\"modal-title\" class=\"zs:font-semibold zs:text-lg\">\n {{ title() }}\n </h3>\n @if(showCancelIcon()) {\n <button \n class=\"zs:text-xl zs:hover:opacity-85 zs:cursor-pointer zs:transition-colors \n zs:duration-200 zs:focus:outline-hidden zs:focus-visible:ring-2 \n zs:focus-visible:ring-offset-2 zs:focus-visible:ring-blue-500 \n zs:rounded-md zs:hover:scale-[1.02] zs:active:scale-[0.97]\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n <!-- ========================= Modal Body ========================= -->\n <div id=\"modal-body\" class=\"zs:p-4 scroll zs:max-h-[75vh] scroll-{{ modalStyle() }}\">\n <ng-content></ng-content>\n </div>\n\n <!-- ========================= Modal Footer ========================= -->\n @if (showFooter()) {\n <div\n class=\"zs:flex zs:justify-end zs:gap-3 zs:p-4 zs:border-t\"\n [class]=\"palette().border\"\n >\n @if (cancelMerged().show) {\n <ZS-button\n [btnStyle]=\"cancelMerged().btnStyle\"\n variant=\"solid\"\n type=\"button\"\n (clickedEv)=\"cancelEv.emit()\"\n [icon]=\"cancelMerged().icon\"\n [disabled]=\"cancelMerged().disabled\"\n [size]=\"cancelMerged().size\"\n [variant]=\"cancelMerged().variant\"\n aria-label=\"Cancel\"\n >\n {{ cancelMerged().text}}\n </ZS-button>\n }\n @if (confirmMerged().show) {\n <ZS-button\n type=\"button\"\n [btnStyle]=\"confirmMerged().btnStyle\"\n (clickedEv)=\"confirmEv.emit()\"\n [icon]=\"confirmMerged().icon\"\n [disabled]=\"confirmMerged().disabled\"\n [size]=\"confirmMerged().size\"\n [variant]=\"confirmMerged().variant\"\n aria-label=\"Confirm\"\n >\n {{ confirmMerged().text}}\n </ZS-button>\n }\n </div>\n }\n </div>\n </div>\n}","// ==============================================\n// Imports\n// ==============================================\n\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, input, model, output, signal } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { NavItem, NavbarItem } from '../NavItemFolder/nav-item/nav-item';\nimport { ButtonVariant, Button } from '../FormCompFolder/button/button';\nimport { BaseSize, FormStyle } from '../palette-service';\nimport { zIndices, ZIndicesType } from '../z-index';\n\n// ==============================================\n// Interfaces & Types\n// ==============================================\n\nexport interface UserProfile {\n name: string;\n username?: string;\n email?: string;\n imageUrl?: string;\n [key: string]: any;\n}\n\nexport type NavbarItemExport = Omit<NavbarItem, 'childrenOpenWindow'>;\nexport interface navItemsType {\n routerLinkActive?: string;\n colorClass?: string;\n navItems: NavbarItemExport[];\n}\n\nexport interface SiteNameConfigType {\n siteName: string;\n siteNameColorClass?: string;\n routerLink?: string;\n}\n\nexport interface AuthButtonsType {\n showAuthButtons: boolean;\n login?: {\n btnStyle?: FormStyle,\n variant?: ButtonVariant,\n size?: BaseSize,\n icon?: string | null\n }\n signup?: {\n btnStyle?: FormStyle,\n variant?: ButtonVariant,\n size?: BaseSize,\n icon?: string | null\n }\n}\n\n// ==============================================\n// Component Decorator\n// ==============================================\n\n@Component({\n selector: 'ZS-navbar',\n imports: [RouterModule, CommonModule, NavItem, Button],\n templateUrl: './navbar.html',\n styleUrl: './navbar.css'\n})\nexport class Navbar {\n readonly zIndices: ZIndicesType = zIndices;\n \n // ==============================================\n // Inputs\n // ==============================================\n\n readonly fixed = input<boolean>(true);\n\n readonly logoUrl = input<string | undefined>();\n readonly siteNameConfig = input<SiteNameConfigType | undefined>();\n\n readonly authButtons = input<AuthButtonsType>({ showAuthButtons: false });\n readonly showUserSection = input<boolean>(true);\n readonly showSearchBar = input<boolean>(false);\n\n readonly navItems = input<navItemsType>();\n\n readonly isLoggedIn = input<boolean>(false);\n readonly userProfile = input<UserProfile | undefined>();\n\n readonly userMenuItems = input<NavbarItemExport[]>([]);\n\n readonly searchPlaceholder = input<string>('Search...');\n \n // ==============================================\n // Outputs\n // ==============================================\n\n readonly loginClickedEv = output<void>();\n readonly signupClickedEv = output<void>();\n readonly searchSubmittedEv = output<string | null>();\n readonly anyItemClickedEv = output<NavbarItem>();\n\n // ==============================================\n // Models\n // ==============================================\n\n readonly searchValue = model<string | null>(null);\n readonly isMobileMenuOpen = model<boolean>(false);\n\n // ==============================================\n // Internal State (Signals)\n // ==============================================\n\n readonly isUserMenuOpen = signal<boolean>(false);\n readonly isMoreOpen = signal<boolean>(false);\n\n // ==============================================\n // Computed Properties\n // ==============================================\n\n readonly visibleNavItems = computed<NavbarItem[]>(() => {\n const items = this.navItems()?.navItems ?? [];\n const limit = this.showSearchBar() ? 2 : 5;\n return items.slice(0, limit).map(item => this.toNavbarItem(item, true));\n });\n\n readonly moreNavItems = computed<NavbarItem[]>(() => {\n const items = this.navItems()?.navItems ?? [];\n const start = this.showSearchBar() ? 2 : 5;\n return items.slice(start).map(item => this.toNavbarItem(item, true));\n });\n\n readonly mobileNavItems = computed<NavbarItem[]>(() =>\n (this.navItems()?.navItems ?? []).map(item => this.toNavbarItem(item, false))\n );\n\n readonly getUserMenuItems = computed<NavbarItem[]>(() =>\n this.userMenuItems().map(item => this.toNavbarItem(item, false))\n );\n\n // ==============================================\n // Private Helper Methods\n // ==============================================\n\n private toNavbarItem(item: NavbarItemExport, childrenOpenWindow = false): NavbarItem {\n const routerLinkActive = this.navItems()?.routerLinkActive;\n const colorClass = this.navItems()?.colorClass;\n\n return {\n ...item,\n colorClass: item.colorClass ?? colorClass,\n routerLinkActive: item.routerLinkActive ?? routerLinkActive,\n childrenOpenWindow,\n children: item.children?.map(child => this.toNavbarItem(child, childrenOpenWindow)) ?? []\n };\n }\n\n // ==============================================\n // Event Handlers\n // ==============================================\n\n onSearchSubmit(): void {\n this.searchSubmittedEv.emit(this.searchValue());\n }\n\n onLogin(): void {\n this.loginClickedEv.emit();\n }\n\n onSignup(): void {\n this.signupClickedEv.emit();\n }\n\n toggleMobileMenu(): void {\n this.isMobileMenuOpen.update(value => !value);\n }\n\n toggleUserMenu(): void {\n this.isUserMenuOpen.update(value => !value);\n }\n\n closeAllMenus(): void {\n this.isMobileMenuOpen.set(false);\n this.isUserMenuOpen.set(false);\n this.isMoreOpen.set(false);\n }\n\n itemClicked(event: NavbarItem): void {\n this.anyItemClickedEv.emit(event)\n this.closeAllMenus();\n }\n\n // ==============================================\n // Lifecycle Hooks\n // ==============================================\n\n private resizeObserver!: ResizeObserver;\n\n ngOnInit(): void {\n this.resizeObserver = new ResizeObserver(() => {\n if (window.innerWidth >= 1024) {\n this.isMobileMenuOpen.set(false);\n }\n });\n this.resizeObserver.observe(document.body);\n }\n\n ngOnDestroy(): void {\n this.resizeObserver.disconnect();\n }\n}","<!-- ========================= Fixed Navbar Container ========================= -->\n\n<nav\n class=\"zs:bg-white zs:dark:bg-[#18202F] zs:top-0 zs:left-0 zs:right-0 {{ zIndices.navbar }} zs:shadow-md zs:dark:shadow-gray-400/30\"\n [ngClass]=\"fixed() ? 'zs:fixed' : 'zs:relative'\"\n role=\"navigation\"\n aria-label=\"Main Navigation\"\n>\n <div class=\"zs:max-w-7xl zs:mx-auto zs:px-4 zs:sm:px-6 zs:lg:px-8\">\n <div class=\"zs:flex zs:justify-between zs:h-16 zs:gap-4\">\n\n <!-- ========================= Logo & Site Name ========================= -->\n <div class=\"zs:flex zs:items-center\">\n @if (logoUrl() || siteNameConfig()) {\n <a\n [routerLink]=\"[siteNameConfig()?.routerLink ?? '/']\"\n class=\"zs:shrink-0 zs:flex zs:items-center zs:gap-2 zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-blue-500\"\n aria-label=\"Homepage\"\n >\n @if (logoUrl()) {\n <img\n [src]=\"logoUrl()\"\n alt=\"{{ siteNameConfig()?.siteName ?? 'Site Logo' }}\"\n class=\"zs:h-8 zs:w-auto\"\n />\n }\n @if (siteNameConfig()) {\n <span\n [class]=\"siteNameConfig()?.siteNameColorClass ?? 'zs:text-gray-800 zs:dark:text-gray-100'\"\n class=\"zs:font-bold zs:text-xl\"\n >\n {{ siteNameConfig()?.siteName }}\n </span>\n }\n </a>\n }\n </div>\n\n <!-- ========================= Desktop Navigation ========================= -->\n <div class=\"zs:hidden zs:lg:flex zs:items-center zs:gap-4\" role=\"menubar\">\n @for (item of visibleNavItems(); track $index) {\n <ZS-nav-item\n [item]=\"item\"\n [collectionName]=\"'navItems'\"\n (anyItemClickedEv)=\"itemClicked($event)\"\n role=\"menuitem\"\n />\n }\n\n @if (moreNavItems().length > 0) {\n <div class=\"zs:relative\" role=\"none\">\n <button\n (click)=\"isMoreOpen.set(!isMoreOpen())\"\n [attr.aria-expanded]=\"isMoreOpen()\"\n aria-haspopup=\"true\"\n aria-controls=\"more-menu\"\n class=\"zs:px-3 zs:py-2 zs:text-sm zs:font-bold zs:text-blue-600 zs:dark:text-blue-400 zs:hover:text-blue-700 zs:dark:hover:text-blue-300 zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-blue-500\"\n >\n More\n <i class=\"fas fa-chevron-down zs:ml-1 zs:text-xs zs:text-gray-500 zs:dark:text-gray-400\"></i>\n </button>\n <div\n id=\"more-menu\"\n [ngClass]=\"{ 'zs:block': isMoreOpen(), 'zs:hidden': !isMoreOpen() }\"\n class=\"zs:absolute zs:bg-white zs:dark:bg-[#18202F] shadow-md-all shadow-md-all-night zs:rounded-md zs:mt-1 zs:py-1 zs:min-w-48 zs:z-200\"\n role=\"menu\"\n >\n @for (item of moreNavItems(); track $index) {\n <ZS-nav-item\n [item]=\"item\"\n [collectionName]=\"'navItems'\"\n (anyItemClickedEv)=\"itemClicked($event)\"\n role=\"menuitem\"\n />\n }\n </div>\n </div>\n }\n </div>\n\n <!-- ========================= Right Controls ========================= -->\n <div class=\"zs:flex zs:items-center zs:gap-3\">\n\n <!-- Search Bar (Desktop) -->\n @if (showSearchBar()) {\n <div class=\"zs:hidden zs:lg:block\" role=\"search\">\n <div class=\"zs:relative\">\n <label for=\"desktop-search\" class=\"sr-only\">Search</label>\n <input\n id=\"desktop-search\"\n type=\"text\"\n [value]=\"searchValue()\"\n (input)=\"searchValue.set($any($event.target).value)\"\n (keyup.enter)=\"onSearchSubmit()\"\n [placeholder]=\"searchPlaceholder()\"\n class=\"zs:bg-gray-100 zs:dark:bg-gray-700 zs:text-gray-800 zs:dark:text-gray-200 zs:rounded-full zs:py-2 zs:px-4 zs:w-64\n zs:transition-all zs:duration-200 zs:focus:outline-hidden zs:focus:ring-2 zs:focus:ring-blue-500\n zs:focus:bg-white zs:dark:focus:bg-gray-600 zs:shadow-sm zs:dark:shadow-gray-500/40\n zs:hover:shadow-md zs:dark:hover:shadow-gray-500/50\"\n />\n <button\n (click)=\"onSearchSubmit()\"\n class=\"zs:absolute zs:py-1 zs:px-2 zs:right-2 zs:top-1/2 zs:-translate-y-1/2 zs:text-gray-500 zs:dark:text-gray-400\n zs:hover:text-gray-700 zs:dark:hover:text-gray-300 zs:transition-colors zs:duration-200\"\n aria-label=\"Submit search\"\n >\n <i class=\"fas fa-search\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- User Profile Dropdown -->\n @if (isLoggedIn() && userProfile() && showUserSection()) {\n <div class=\"zs:relative\">\n <button\n (click)=\"toggleUserMenu()\"\n class=\"zs:flex zs:items-center zs:gap-2 zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-blue-500\"\n aria-haspopup=\"true\"\n [attr.aria-expanded]=\"isUserMenuOpen()\"\n aria-controls=\"user-menu\"\n aria-label=\"User menu\"\n >\n @if (userProfile()?.imageUrl) {\n <img\n [src]=\"userProfile()?.imageUrl\"\n alt=\"{{ userProfile()?.name ?? 'User profile image' }}\"\n class=\"zs:h-8 zs:w-8 zs:rounded-full zs:object-cover\"\n />\n } @else {\n <div\n class=\"zs:h-8 zs:w-8 zs:rounded-full zs:bg-blue-500 zs:flex zs:items-center zs:justify-center zs:text-white zs:font-semibold\"\n aria-hidden=\"true\"\n >\n {{ userProfile()?.name?.charAt(0) || 'U' }}\n </div>\n }\n <i class=\"fas fa-chevron-down zs:text-xs zs:text-gray-600 zs:dark:text-gray-400\n zs:hover:text-gray-700 zs:dark:hover:text-gray-300\"></i>\n </button>\n\n @if (isUserMenuOpen() && userMenuItems().length > 0) {\n <div\n id=\"user-menu\"\n class=\"zs:absolute zs:right-0 zs:mt-2.5 zs:min-w-56 zs:bg-white zs:dark:bg-gray-800 zs:rounded-md\n shadow-md-all shadow-md-all-night zs:pt-2 zs:z-400\"\n role=\"menu\"\n >\n <!-- User Info Section -->\n <div class=\"zs:px-4 zs:py-2 zs:border-b zs:border-gray-200 zs:dark:border-gray-700\">\n @if (userProfile()?.name) {\n <div class=\"zs:font-semibold zs:text-gray-900 zs:dark:text-gray-100\">\n {{ userProfile()?.name }}\n </div>\n }\n @if (userProfile()?.username) {\n <div class=\"zs:text-sm zs:text-gray-600 zs:dark:text-gray-400\">\n @{{ userProfile()?.username }}\n </div>\n }\n @if (userProfile()?.email) {\n <div class=\"zs:text-sm zs:text-gray-500 zs:dark:text-gray-400\">\n {{ userProfile()?.email }}\n </div>\n }\n </div>\n\n <!-- Menu Items -->\n @if (userMenuItems().length > 0) {\n <div class=\"zs:py-1\">\n @for (item of getUserMenuItems(); track $index) {\n <ZS-nav-item\n [item]=\"item\"\n [collectionName]=\"'MenuItems'\"\n (anyItemClickedEv)=\"itemClicked($event)\"\n role=\"menuitem\"\n />\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Auth Buttons -->\n @else if (authButtons().showAuthButtons && !isLoggedIn()) {\n <div class=\"zs:hidden zs:lg:flex zs:items-center zs:gap-3\" role=\"group\" aria-label=\"Authentication\">\n <ZS-button\n [btnStyle]=\"authButtons().login?.btnStyle ?? 'secondary'\"\n [variant]=\"authButtons().login?.variant ?? 'outline'\"\n [size]=\"authButtons().login?.size ?? 'md'\"\n [icon]=\"authButtons().login?.icon ?? ''\"\n (clickedEv)=\"onLogin()\"\n >\n Login\n </ZS-button>\n\n <ZS-button\n [btnStyle]=\"authButtons().signup?.btnStyle ?? 'primary'\"\n [variant]=\"authButtons().signup?.variant ?? 'solid'\"\n [size]=\"authButtons().signup?.size ?? 'md'\"\n [icon]=\"authButtons().signup?.icon ?? ''\"\n (clickedEv)=\"onSignup()\"\n >\n Sign Up\n </ZS-button>\n </div>\n }\n\n <!-- Mobile Menu Toggle -->\n <div class=\"zs:lg:hidden\">\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"zs:p-2 zs:rounded-md zs:text-gray-600 zs:dark:text-gray-300\n zs:hover:text-gray-900 zs:dark:hover:text-gray-100\n zs:focus:outline-hidden zs:focus:ring-2 zs:focus:ring-inset\n zs:focus:ring-gray-200 zs:dark:focus:ring-gray-700\"\n aria-controls=\"mobile-menu\"\n aria-expanded=\"{{ isMobileMenuOpen() }}\"\n aria-label=\"Toggle mobile menu\"\n >\n <i class=\"fas fa-bars zs:px-1\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- ========================= Mobile Menu ========================= -->\n @if (isMobileMenuOpen()) {\n <div\n id=\"mobile-menu\"\n class=\"zs:lg:hidden zs:bg-white zs:dark:bg-[#18202F] \n zs:[box-shadow:0_8px_0_0_#364153] zs:dark:[box-shadow:0_8px_0_0_black]\"\n role=\"menu\"\n aria-label=\"Mobile navigation\"\n >\n <div class=\"zs:px-2 zs:pt-2 zs:pb-3 zs:flex zs:flex-col zs:gap-1 zs:sm:px-3\">\n\n <!-- Navigation Items -->\n <div class=\"zs:max-h-96 zs:overflow-y-auto\">\n @for (item of mobileNavItems(); track $index) {\n <ZS-nav-item\n [item]=\"item\"\n [collectionName]=\"'navItems'\"\n (anyItemClickedEv)=\"itemClicked($event)\"\n role=\"menuitem\"\n />\n }\n </div>\n\n <!-- Search Bar (Mobile) -->\n @if (showSearchBar()) {\n <div class=\"zs:px-3 zs:py-2\" role=\"search\">\n <label for=\"mobile-search\" class=\"sr-only\">Search</label>\n <div class=\"zs:relative\">\n <input\n id=\"mobile-search\"\n type=\"text\"\n [value]=\"searchValue()\"\n (input)=\"searchValue.set($any($event.target).value)\"\n (keyup.enter)=\"onSearchSubmit()\"\n [placeholder]=\"searchPlaceholder()\"\n class=\"zs:w-full zs:bg-gray-100 zs:dark:bg-gray-700 zs:text-gray-800 zs:dark:text-gray-200\n zs:rounded-full zs:py-2 zs:px-4 zs:transition-all zs:duration-200 zs:focus:outline-hidden\n zs:focus:ring-2 zs:focus:ring-blue-500 zs:focus:bg-white zs:dark:focus:bg-gray-600\n zs:shadow-sm zs:dark:shadow-gray-500/40 zs:hover:shadow-md zs:dark:hover:shadow-gray-500/50\"\n />\n <button\n (click)=\"onSearchSubmit()\"\n class=\"zs:absolute zs:py-1 zs:px-2 zs:right-2 zs:top-1/2 zs:-translate-y-1/2 zs:text-gray-500 zs:dark:text-gray-400\n zs:hover:text-gray-700 zs:dark:hover:text-gray-300 zs:transition-colors zs:duration-200\"\n aria-label=\"Submit search\"\n >\n <i class=\"fas fa-search\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- Auth Buttons (Mobile) -->\n @if (authButtons().showAuthButtons && !isLoggedIn()) {\n <div\n class=\"zs:pt-3 zs:pb-4 zs:border-t zs:border-gray-300 zs:dark:border-gray-500\n zs:flex zs:flex-wrap zs:justify-start zs:items-center zs:gap-2\"\n role=\"group\"\n aria-label=\"Authentication (mobile)\"\n >\n <ZS-button\n [btnStyle]=\"authButtons().login?.btnStyle ?? 'secondary'\"\n [variant]=\"authButtons().login?.variant ?? 'outline'\"\n [size]=\"authButtons().login?.size ?? 'md'\"\n [icon]=\"authButtons().login?.icon ?? ''\"\n (clickedEv)=\"onLogin(); isMobileMenuOpen.set(false)\"\n >\n Login\n </ZS-button>\n\n <ZS-button\n [btnStyle]=\"authButtons().signup?.btnStyle ?? 'primary'\"\n [variant]=\"authButtons().signup?.variant ?? 'solid'\"\n [size]=\"authButtons().signup?.size ?? 'md'\"\n [icon]=\"authButtons().signup?.icon ?? ''\"\n (clickedEv)=\"onSignup(); isMobileMenuOpen.set(false)\"\n >\n Sign Up\n </ZS-button>\n </div>\n }\n </div>\n </div>\n }\n</nav>\n\n<!-- ========================= Spacer for Fixed Navbar ========================= -->\n@if (fixed()) {\n <div class=\"zs:h-16\" aria-hidden=\"true\"></div>\n}\n\n<!-- ========================= Overlay for Menu Closing ========================= -->\n@if (isMobileMenuOpen()) {\n <div\n class=\"zs:fixed zs:inset-0 zs:bg-gray-700 zs:dark:bg-black zs:z-700\"\n (click)=\"closeAllMenus()\"\n aria-hidden=\"true\"\n ></div>\n}\n","import { RouterModule } from '@angular/router';\nimport { Component, computed, input, output } from '@angular/core';\nimport { FormStyle, page404PaletteMap } from '../palette-service';\nimport { CommonModule } from '@angular/common';\n\ninterface Page404StyleType {\n btnBG: string;\n btnBGHover: string;\n iconText: string;\n}\n\n@Component({\n selector: 'ZS-page404',\n imports: [RouterModule, CommonModule],\n templateUrl: './page404.html',\n styleUrl: './page404.css'\n})\nexport class Page404 {\n // ========================================================================\n // Inputs\n // ========================================================================\n readonly title = input<string>('Page Not Found');\n readonly message = input<string>('Hmm… this page doesn’t seem to exist. Try checking the URL or going back home.');\n readonly icon = input<string>('fa-ghost');\n readonly pageStyle = input<FormStyle | 'normal'>('normal')\n\n readonly showButton = input<boolean>(true);\n readonly buttonText = input<string>('Go Home');\n readonly routerLink = input<string>('/');\n\n // ========================================================================\n // Outputs\n // ========================================================================\n readonly style = computed<Page404StyleType>(() => {\n if(this.pageStyle() === 'normal') \n return {\n btnBG: 'zs:bg-sky-500 zs:dark:bg-sky-600',\n btnBGHover: 'zs:hover:bg-sky-600 zs:dark:hover:bg-sky-500',\n iconText: 'zs:text-sky-600 zs:dark:text-sky-500'\n }\n\n const pallete: Page404StyleType = page404PaletteMap.get(this.pageStyle() as FormStyle)!\n return {\n btnBG: pallete.btnBG,\n btnBGHover: pallete.btnBGHover,\n iconText: pallete.iconText\n }\n });\n\n // ========================================================================\n // Outputs\n // ========================================================================\n readonly onAction = output<void>();\n}\n","<!-- ========================= Page 404 Container ========================= -->\n<div class=\"zs:flex zs:flex-col zs:items-center zs:justify-center zs:min-h-[90vh]\n zs:text-center zs:transition-colors zs:duration-500 zs:animate-fadeIn\"\n [ngClass]=\"[style().iconText]\"\n >\n\n <!-- ========================= Icon ========================= --> \n <div class=\"zs:text-[136px] zs:mb-8 animate-float zs:opacity-90 zs:leading-none\">\n <i class=\"fa-solid\" [class]=\"icon()\"></i>\n </div>\n\n <!-- ========================= Title ========================= -->\n <h1 class=\"zs:text-6xl zs:font-black zs:tracking-widest zs:mb-2 \n zs:text-rose-600 zs:dark:text-rose-500 zs:select-none\n zs:drop-shadow-[0_0_8px_rgba(239,68,68,0.5)]\">\n 404\n </h1>\n\n\n <!-- ========================= Message ========================= -->\n <h2 class=\"zs:text-2xl zs:text-rose-600/80 zs:dark:text-rose-800/80 zs:font-semibold zs:mb-4\">\n {{ title() }}\n </h2>\n <p class=\"zs:text-base zs:max-w-md zs:text-gray-600 zs:dark:text-gray-400 zs:mb-8\">\n {{ message() }}\n </p>\n\n <!-- ========================= Button ========================= -->\n @if (showButton()) {\n <a\n [routerLink]=\"routerLink()\"\n (click)=\"onAction.emit()\"\n class=\"zs:px-6 zs:py-2 zs:rounded-full\n zs:text-white zs:font-medium zs:shadow-md\n zs:hover:shadow-lg zs:flex zs:items-center \n zs:justify-center zs:transition-all zs:duration-300 zs:ease-out \n zs:gap-1.5\"\n [ngClass]=\"[style().btnBG, style().btnBGHover]\"\n >\n <i class=\"fa-solid fa-house\"></i>\n {{ buttonText() }}\n </a>\n }\n</div>\n","// ========================================================================\n// Imports\n// ========================================================================\n\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, input, output } from '@angular/core';\n\n\n// ========================================================================\n// Component Declaration\n// ========================================================================\n\n@Component({\n selector: 'ZS-pagination',\n imports: [CommonModule],\n templateUrl: './pagination.html',\n styleUrl: './pagination.css'\n})\nexport class Pagination {\n\n // ========================================================================\n // Inputs\n // ========================================================================\n\n /**\n * Total number of pages (required).\n */\n readonly totalPages = input.required<number>();\n\n /**\n * Current active page (required).\n */\n readonly currentPage = input.required<number>();\n\n /**\n * Whether to display the total items count.\n */\n readonly showTotalItems = input<boolean>(false);\n\n /**\n * Message shown before the total items count.\n */\n readonly totalItemsMessage = input<string>('Total items:');\n\n /**\n * Total number of items (used when `showTotalItems` is true).\n */\n readonly totalItems = input<number>();\n\n\n // ========================================================================\n // Outputs\n // ========================================================================\n\n /**\n * Emits the new page number when the user navigates.\n */\n readonly pageChangeEv = output<number>();\n\n\n // ========================================================================\n // Computed Properties\n // ========================================================================\n\n /**\n * Generates an array of page numbers from 1 to `totalPages`.\n */\n readonly pages = computed<number[]>(() =>\n Array.from({ length: this.totalPages() }, (_, i) => i + 1)\n );\n\n\n // ========================================================================\n // Event Handlers\n // ========================================================================\n\n /**\n * Navigates to the specified page if it's within valid range.\n */\n goToPage(page: number): void {\n if (page < 1 || page > this.totalPages()) return;\n this.pageChangeEv.emit(page);\n }\n\n /**\n * Navigates to the next page.\n */\n nextPage(): void {\n this.goToPage(this.currentPage() + 1);\n }\n\n /**\n * Navigates to the previous page.\n */\n prevPage(): void {\n this.goToPage(this.currentPage() - 1);\n }\n}","<!-- ========================= Top Spacing ========================= -->\n<div class=\"zs:mt-6\"></div>\n\n<!-- ========================= Total Items Count ========================= -->\n@if (showTotalItems()) {\n <div\n class=\"zs:text-center zs:text-sm zs:text-gray-500 zs:dark:text-gray-300 zs:mb-2\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {{ totalItemsMessage() }} {{ totalItems() }}\n </div>\n}\n\n<!-- ========================= Pagination Navigation ========================= -->\n<nav\n class=\"zs:flex zs:flex-wrap zs:justify-center zs:items-center zs:gap-1\"\n role=\"navigation\"\n aria-label=\"Pagination\"\n>\n <!-- ========================= Previous Button ========================= -->\n <button\n type=\"button\"\n class=\"zs:flex zs:items-center zs:justify-center zs:size-9 zs:sm:size-10 \n zs:rounded-lg zs:border zs:border-gray-300 zs:dark:border-gray-600 zs:hover:bg-blue-100 \n zs:dark:hover:bg-blue-700 zs:disabled:opacity-50 zs:disabled:cursor-not-allowed zs:transition-all \n zs:duration-200\"\n (click)=\"prevPage()\"\n [disabled]=\"currentPage() === 1\"\n [attr.aria-disabled]=\"currentPage() === 1\"\n aria-label=\"Go to previous page\"\n >\n <i class=\"fas fa-chevron-left zs:text-gray-600 zs:dark:text-gray-200\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Previous</span>\n </button>\n\n <!-- ========================= Page Numbers ========================= -->\n @for (page of pages(); track page) {\n <button\n type=\"button\"\n (click)=\"goToPage(page)\"\n class=\"zs:flex zs:items-center zs:justify-center zs:size-9 zs:sm:size-10 zs:rounded-lg \n zs:border zs:border-gray-300 zs:dark:border-gray-600 zs:hover:bg-blue-100 zs:dark:hover:bg-blue-700 \n zs:transition-all zs:duration-200\"\n [ngClass]=\"{\n 'zs:bg-blue-500 zs:text-white zs:dark:bg-blue-400 zs:dark:text-black': page === currentPage()\n }\"\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\n [attr.aria-label]=\"'Go to page ' + page\"\n >\n {{ page }}\n </button>\n }\n\n <!-- ========================= Next Button ========================= -->\n <button\n type=\"button\"\n class=\"zs:flex zs:items-center zs:justify-center zs:size-9 zs:sm:size-10 zs:rounded-lg zs:border \n zs:border-gray-300 zs:dark:border-gray-600 zs:hover:bg-blue-100 zs:dark:hover:bg-blue-700 \n zs:disabled:opacity-50 zs:disabled:cursor-not-allowed zs:transition-all zs:duration-200\"\n (click)=\"nextPage()\"\n [disabled]=\"currentPage() === totalPages()\"\n [attr.aria-disabled]=\"currentPage() === totalPages()\"\n aria-label=\"Go to next page\"\n >\n <i class=\"fas fa-chevron-right zs:text-gray-600 zs:dark:text-gray-200\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Next</span>\n </button>\n</nav>","// ========================================================================\n// Imports\n// ========================================================================\n\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, HostListener, inject, input, signal } from '@angular/core';\nimport { BaseColors, ColorMapping } from '../palette-service';\nimport { zIndices, ZIndicesType } from '../z-index';\n\n\n// ========================================================================\n// Types\n// ========================================================================\n\nexport type PositionType = 'left' | 'right';\n\n\n// ========================================================================\n// Component Declaration\n// ========================================================================\n\n@Component({\n selector: 'ZS-scroll-to-top',\n imports: [CommonModule],\n templateUrl: './scroll-to-top.html',\n styleUrl: './scroll-to-top.css'\n})\nexport class ScrollToTop {\n readonly zIndices: ZIndicesType = zIndices;\n \n // ========================================================================\n // Inputs\n // ========================================================================\n\n /**\n * Determines the horizontal position of the button ('left' or 'right').\n * Default: 'right'\n */\n readonly position = input<PositionType>('right');\n\n /**\n * Tailwind CSS class for the circle's color (background ring).\n */\n readonly circleColorClass = input<string>('zs:text-gray-400/60 zs:dark:text-gray-600/70 zs:group-hover:brightness-110');\n\n /**\n * BaseColors class for the arrow and progress indicator color.\n */\n readonly arrowProgressColor = input<BaseColors>('blue');\n\n\n // ========================================================================\n // Constants\n // ========================================================================\n\n private readonly circleRadius: number = 22;\n readonly circleCircumference: number = 2 * Math.PI * this.circleRadius;\n\n\n // ========================================================================\n // Internal State\n // ========================================================================\n\n readonly scrollY = signal<number>(0);\n\n\n // ========================================================================\n // Computed Properties\n // ========================================================================\n readonly arrowProgressColorClass = computed<string>(() => \n ColorMapping.get(this.arrowProgressColor())?.text ?? 'zs:text-blue-600'\n );\n\n /**\n * Computes the stroke-dashoffset for the progress circle based on scroll position.\n */\n readonly progressOffset = computed<number>(() => {\n const _ = this.scrollY();\n const maxScroll = document.documentElement.scrollHeight - window.innerHeight;\n const progress = maxScroll > 0 ? this.scrollY() / maxScroll : 0;\n return this.circleCircumference * (1 - progress);\n });\n\n /**\n * Returns Tailwind classes to position the button horizontally.\n */\n readonly positionClass = computed<{\n 'zs:right-4': boolean;\n 'zs:left-4': boolean;\n }>(() => ({\n 'zs:right-4': this.position() === 'right',\n 'zs:left-4': this.position() === 'left',\n }));\n\n\n // ========================================================================\n // Lifecycle Hooks\n // ========================================================================\n @HostListener('window:scroll', ['$event'])\n onScroll(event: Event) {\n this.scrollY.set(window.scrollY);\n }\n\n\n // ========================================================================\n // Event Handlers\n // ========================================================================\n scrollToTop() {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n }\n}","<!-- ========================= Scroll-to-Top Container ========================= -->\n<div\n [ngClass]=\"positionClass()\"\n class=\"zs:fixed zs:group zs:bottom-4 {{ zIndices.scrollToTop }} \n zs:transition-opacity zs:duration-300\"\n [style.opacity]=\"scrollY() > 200 ? 1 : 0\"\n>\n <!-- ========================= Scroll Button ========================= -->\n <button\n (click)=\"scrollToTop()\"\n class=\"zs:w-12 zs:h-12 zs:group-hover:scale-105 zs:rounded-full zs:flex zs:items-center \n zs:justify-center zs:relative zs:overflow-hidden zs:focus:outline-hidden\"\n type=\"button\"\n role=\"button\"\n aria-label=\"Scroll to top\"\n title=\"Scroll to top\"\n >\n <!-- ========================= Progress Ring (SVG) ========================= -->\n <svg\n class=\"zs:absolute zs:inset-0 zs:w-full zs:h-full zs:transform zs:-rotate-90\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Background Circle -->\n <circle\n cx=\"24\"\n cy=\"24\"\n r=\"22\"\n stroke=\"transparent\"\n stroke-width=\"5\"\n fill=\"currentColor\"\n [ngClass]=\"circleColorClass()\"\n />\n\n <!-- Animated Progress Circle -->\n <circle\n cx=\"24\"\n cy=\"24\"\n r=\"22\"\n stroke=\"currentColor\"\n stroke-width=\"5\"\n fill=\"transparent\"\n [attr.stroke-dasharray]=\"circleCircumference\"\n [attr.stroke-dashoffset]=\"progressOffset()\"\n [ngClass]=\"arrowProgressColorClass()\"\n class=\"zs:transition-all zs:duration-300 zs:ease-out\"\n stroke-linecap=\"round\"\n />\n </svg>\n\n <!-- ========================= Up Arrow Icon ========================= -->\n <i\n class=\"fas fa-arrow-up zs:relative zs:z-100 zs:text-lg\"\n [ngClass]=\"arrowProgressColorClass()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n</div>","// =================================================================================================\n// Types\n// =================================================================================================\n\nexport type LoaderType = 'spinner' | 'pro' | 'double' | 'gear' | 'fan' | 'pulse' | 'dots' | 'bars';\n\n// =================================================================================================\n// Component Definition\n// =================================================================================================\n\nimport { Component, computed, inject, input } from '@angular/core';\nimport { BaseColors, BaseSize, ColorMapping } from '../palette-service';\nimport { zIndices, ZIndicesType } from '../z-index';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ZS-spinner',\n imports: [CommonModule],\n templateUrl: './spinner.html',\n styleUrl: './spinner.css'\n})\nexport class Spinner {\n readonly zIndices: ZIndicesType = zIndices;\n \n // =================================================================================================\n // Inputs\n // =================================================================================================\n\n readonly loading = input<boolean>(false);\n readonly isFloating = input<boolean>(false);\n readonly color = input<BaseColors>('blue');\n readonly withBox = input<boolean>(false);\n readonly boxColorClass = input<string>('zs:bg-gray-300/90 zs:dark:bg-gray-400/80');\n readonly type = input<LoaderType>('spinner');\n readonly size = input<BaseSize>('md');\n\n // =================================================================================================\n // Computed Properties\n // =================================================================================================\n\n readonly wrapperClasses = computed<string>(() =>\n this.isFloating()\n ? `zs:fixed zs:inset-0 zs:flex zs:items-center zs:justify-center \n ${ this.zIndices.spinner } zs:bg-black/50 zs:dark:bg-black/70`\n : 'zs:flex zs:items-center zs:justify-center'\n );\n\n readonly boxClasses = computed<string>(() =>\n this.withBox()\n ? `zs:p-5 zs:rounded-lg zs:shadow-md ${this.boxColorClass()}`\n : ''\n );\n\n readonly spinnerSizeTextClass = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:text-3xl',\n md: 'zs:text-5xl',\n lg: 'zs:text-7xl'\n };\n return sizes[this.size()];\n });\n\n readonly spinnerSizeDotsClass = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:size-2',\n md: 'zs:size-4',\n lg: 'zs:size-6'\n };\n return sizes[this.size()];\n });\n\n readonly spinnerSizeBarsClass = (num: number): string => {\n const sizes: Record<BaseSize, string[]> = {\n sm: ['zs:w-1 zs:h-3', 'zs:w-1 zs:h-3.5', 'zs:w-1 zs:h-4'],\n md: ['zs:w-1.5 zs:h-6', 'zs:w-1.5 zs:h-8', 'zs:w-1.5 zs:h-10'],\n lg: ['zs:w-2 zs:h-8', 'zs:w-2 zs:h-9', 'zs:w-2 zs:h-10']\n };\n return sizes[this.size()][num - 1];\n };\n\n readonly spinnerSizeProClass = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:border-t-3 zs:border-b-3 zs:size-7',\n md: 'zs:border-t-5 zs:border-b-5 zs:size-12',\n lg: 'zs:border-t-7 zs:border-b-7 zs:size-18'\n };\n return sizes[this.size()];\n });\n\n readonly spinnerSizePulseClass = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:border-3 zs:size-7',\n md: 'zs:border-5 zs:size-12',\n lg: 'zs:border-7 zs:size-18'\n };\n return sizes[this.size()];\n });\n\n readonly spinnerSizeDoubleClass = (num: 1 | 2): string => {\n const sizes: Record<BaseSize, { 1: string; 2: string }> = {\n sm: { 1: 'zs:border-3 zs:size-7', 2: 'zs:border-3 zs:size-5' },\n md: { 1: 'zs:border-5 zs:size-12', 2: 'zs:border-5 zs:size-8.5' },\n lg: { 1: 'zs:border-7 zs:size-18', 2: 'zs:border-7 zs:size-13' }\n };\n return sizes[this.size()][num];\n };\n\n readonly bgColor = computed<string | undefined>(() =>\n ColorMapping.get(this.color())?.bg\n );\n\n readonly borderColor = computed<string | undefined>(() =>\n ColorMapping.get(this.color())?.border\n );\n\n readonly textColor = computed<string | undefined>(() =>\n ColorMapping.get(this.color())?.text\n );\n}","<!-- ========================= Loader Wrapper ========================= -->\n@if(loading()) {\n <div \n [class]=\"wrapperClasses()\" \n role=\"status\" \n aria-live=\"polite\" \n aria-busy=\"true\"\n >\n <div [class]=\"boxClasses()\">\n \n @switch (type()) {\n \n <!-- ========================= Spinner ========================= -->\n @case ('spinner') {\n <i \n [ngClass]=\"['fas fa-spinner fa-spin', spinnerSizeTextClass(), textColor()]\" \n aria-hidden=\"true\"\n ></i>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Pro Spinner ========================= -->\n @case ('pro') {\n <div \n [ngClass]=\"['zs:animate-spin zs:rounded-full zs:border-solid', spinnerSizeProClass(), borderColor()]\" \n aria-hidden=\"true\"\n ></div>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Gear ========================= -->\n @case ('gear') {\n <i \n [ngClass]=\"['fas fa-gear fa-spin', spinnerSizeTextClass(), textColor()]\" \n aria-hidden=\"true\"\n ></i>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Fan ========================= -->\n @case ('fan') {\n <i \n [ngClass]=\"['fas fa-fan fa-spin', spinnerSizeTextClass(), textColor()]\" \n aria-hidden=\"true\"\n ></i>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Pulse ========================= -->\n @case ('pulse') {\n <div \n [ngClass]=\"[\n 'zs:animate-spin zs:rounded-full zs:border-solid',\n spinnerSizePulseClass(),\n borderColor(),\n 'zs:border-t-transparent!'\n ]\" \n aria-hidden=\"true\"\n ></div>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Dots ========================= -->\n @case ('dots') {\n <div class=\"zs:flex zs:gap-2 zs:items-center\" aria-hidden=\"true\">\n <span \n class=\"zs:rounded-full zs:animate-bounce\" \n [ngClass]=\"[bgColor(), spinnerSizeDotsClass()]\" \n style=\"animation-delay: 0s\"\n ></span>\n <span \n class=\"zs:rounded-full zs:animate-bounce\" \n [ngClass]=\"[bgColor(), spinnerSizeDotsClass()]\" \n style=\"animation-delay: 0.2s\"\n ></span>\n <span \n class=\"zs:rounded-full zs:animate-bounce\" \n [ngClass]=\"[bgColor(), spinnerSizeDotsClass()]\" \n style=\"animation-delay: 0.4s\"\n ></span>\n </div>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Bars ========================= -->\n @case ('bars') {\n <div class=\"zs:flex zs:gap-1 zs:items-center zs:h-6\" aria-hidden=\"true\">\n <span \n class=\"zs:rounded-sm animate-bar-scale\" \n [ngClass]=\"[bgColor(), spinnerSizeBarsClass(1)]\" \n style=\"animation-delay: 0s\"\n ></span>\n <span \n class=\"zs:rounded-sm animate-bar-scale\" \n [ngClass]=\"[bgColor(), spinnerSizeBarsClass(2)]\" \n style=\"animation-delay: 0.2s\"\n ></span>\n <span \n class=\"zs:rounded-sm animate-bar-scale\" \n [ngClass]=\"[bgColor(), spinnerSizeBarsClass(3)]\" \n style=\"animation-delay: 0.4s\"\n ></span>\n </div>\n <span class=\"sr-only\">Loading...</span>\n }\n \n <!-- ========================= Double Spinner ========================= -->\n @case ('double') {\n <div class=\"zs:relative\" aria-hidden=\"true\">\n <!-- Outer ring -->\n <div \n [ngClass]=\"[\n 'zs:animate-spin zs:rounded-full zs:border-solid',\n spinnerSizeDoubleClass(1),\n borderColor(), \n 'zs:border-t-transparent!'\n ]\"\n ></div>\n <!-- Inner ring (reversed animation) -->\n <div \n [ngClass]=\"[\n 'zs:animate-spin zs:opacity-75 zs:rounded-full zs:border-solid zs:absolute \n zs:top-1/2 zs:left-1/2 zs:-translate-x-1/2 zs:-translate-y-1/2',\n spinnerSizeDoubleClass(2),\n borderColor(), \n 'zs:border-b-transparent!'\n ]\"\n style=\"animation-direction: reverse;\"\n ></div>\n </div>\n <span class=\"sr-only\">Loading...</span>\n }\n \n }\n \n </div>\n </div>\n}","import { Component, signal, HostListener, effect, output, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { zIndices, ZIndicesType } from '../z-index';\n\n\n// ==============================================\n// Types\n// ==============================================\nexport type themeTypes = 'light' | 'dark';\n\n\n// ==============================================\n// Component Metadata\n// ==============================================\n@Component({\n selector: 'ZS-theme-toggle',\n imports: [CommonModule],\n templateUrl: './theme-toggle.html',\n styleUrl: './theme-toggle.css'\n})\nexport class ThemeToggle {\n readonly zIndices: ZIndicesType = zIndices;\n\n // ==============================================\n // Signals\n // ==============================================\n readonly currentTheme = signal<themeTypes>('light');\n readonly isOpen = signal<boolean>(false);\n private readonly userSelectedTheme = signal<boolean>(false);\n \n private lastEmittedTheme: themeTypes | null = null;\n private lastManualTheme: themeTypes | null = null;\n \n // ==============================================\n // Inputs\n // ==============================================\n readonly bodyClass = input<string>('zs:bg-white zs:dark:bg-gray-900 zs:text-gray-900 zs:dark:text-gray-100');\n readonly showDefaultUI = input<boolean>(true);\n readonly setManualTheme = input<themeTypes | null>(null);\n\n\n // ==============================================\n // Outputs\n // ==============================================\n readonly themeChangeEv = output<themeTypes>();\n\n\n // ==============================================\n // Lifecycle & Side Effects\n // ==============================================\n constructor() {\n // ① تهيئة الثيم\n const savedTheme = localStorage.getItem('theme') as themeTypes | null;\n const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');\n\n if (savedTheme) {\n this.currentTheme.set(savedTheme);\n this.userSelectedTheme.set(true);\n } else {\n this.currentTheme.set(systemPrefersDark.matches ? 'dark' : 'light');\n }\n\n // ② مراقبة تغيّر ثيم النظام (لو المستخدم لم يختر يدويًا)\n effect((onCleanup) => {\n const listener = (e: MediaQueryListEvent) => {\n if (!this.userSelectedTheme()) {\n this.currentTheme.set(e.matches ? 'dark' : 'light');\n }\n };\n\n systemPrefersDark.addEventListener('change', listener);\n onCleanup(() => systemPrefersDark.removeEventListener('change', listener));\n });\n\n // ③ مزامنة الثيم مع DOM و localStorage\n effect(() => {\n const theme = this.currentTheme();\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n const classes = this.bodyClass()\n .trim()\n .split(/\\s+/)\n .filter(Boolean);\n\n document.body.classList.value = '';\n classes.forEach(c => document.body.classList.add(c));\n\n if (this.userSelectedTheme()) {\n localStorage.setItem('theme', theme);\n }\n });\n\n effect(() => {\n const manual = this.setManualTheme();\n\n if (manual && manual !== this.lastManualTheme) {\n this.lastManualTheme = manual;\n this.setTheme(manual);\n }\n });\n\n effect(() => {\n const theme = this.currentTheme();\n if (theme !== this.lastEmittedTheme) {\n this.lastEmittedTheme = theme;\n this.themeChangeEv.emit(theme);\n }\n });\n }\n\n // ==============================================\n // Component Methods\n // ==============================================\n toggleOpen(): void {\n this.isOpen.set(!this.isOpen());\n }\n\n setTheme(theme: themeTypes): void {\n if (this.currentTheme() !== theme) {\n this.currentTheme.set(theme);\n this.userSelectedTheme.set(true);\n }\n this.isOpen.set(false);\n }\n\n // ==============================================\n // Host Listeners\n // ==============================================\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (!target.closest('zs-theme-toggle') && this.isOpen()) {\n this.isOpen.set(false);\n }\n }\n}","<!-- ========================= Theme Switcher Panel ========================= -->\n@if(showDefaultUI()) {\n <div \n class=\"zs:fixed zs:left-0 zs:top-1/6 {{ zIndices.themeToggle }} zs:transform \n zs:-translate-y-1/2 zs:transition-all zs:duration-300\"\n [ngClass]=\"!isOpen() ? 'zs:-translate-x-24' : ''\"\n role=\"complementary\"\n aria-label=\"Theme switcher panel\"\n >\n <!-- ========================= Theme Selection Buttons ========================= -->\n <div class=\"zs:flex zs:items-center\">\n <div \n class=\"zs:flex zs:overflow-hidden zs:transition-all zs:duration-300\"\n role=\"group\"\n aria-label=\"Theme selection\"\n >\n <!-- Light Theme Button -->\n <button\n (click)=\"setTheme('light')\"\n type=\"button\"\n class=\"zs:px-3 zs:py-2 zs:rounded-l-none zs:border-l-0 zs:border-y \n zs:transition-colors zs:shrink-0\n zs:bg-white zs:text-gray-900 zs:border-gray-300\n zs:dark:bg-gray-800 zs:dark:text-gray-100 zs:dark:border-gray-600\n zs:hover:bg-gray-100 zs:dark:hover:bg-gray-700 zs:w-12\n zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-offset-2 \n zs:focus-visible:ring-blue-500\"\n aria-label=\"Activate light theme\"\n [attr.aria-pressed]=\"currentTheme() === 'light'\"\n >\n <i class=\"fas fa-sun zs:text-yellow-500\" aria-hidden=\"true\"></i>\n </button>\n \n <!-- Dark Theme Button -->\n <button\n (click)=\"setTheme('dark')\"\n type=\"button\"\n class=\"zs:px-3 zs:py-2 zs:rounded-r-lg zs:border-y zs:border-r \n zs:transition-colors zs:shrink-0\n zs:bg-white zs:text-gray-900 zs:border-gray-300\n zs:dark:bg-gray-800 zs:dark:text-gray-100 zs:dark:border-gray-600\n zs:hover:bg-gray-100 zs:dark:hover:bg-gray-700 zs:w-12\n zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-offset-2 \n zs:focus-visible:ring-blue-500\"\n aria-label=\"Activate dark theme\"\n [attr.aria-pressed]=\"currentTheme() === 'dark'\"\n >\n <i class=\"fas fa-moon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n \n <!-- ========================= Toggle Button with Connector ========================= -->\n <div \n class=\"zs:relative\"\n [ngClass]=\"isOpen() ? 'zs:hidden' : ''\"\n >\n <!-- Connector Line -->\n <div\n class=\"zs:absolute zs:top-1/2 zs:right-0 zs:h-0.5 zs:w-3 zs:transform zs:-translate-y-1/2\n zs:bg-gray-300 zs:dark:bg-gray-600\"\n aria-hidden=\"true\"\n ></div>\n \n <!-- Toggle Button -->\n <button\n (click)=\"toggleOpen()\"\n type=\"button\"\n class=\"zs:relative zs:z-100 zs:w-12 zs:h-12 zs:rounded-full zs:rounded-l-none zs:border-l-0 \n zs:border-2\n zs:transition-all zs:duration-300 zs:flex zs:items-center zs:justify-center\n zs:bg-white zs:text-gray-900 zs:border-gray-300\n zs:dark:bg-gray-800 zs:dark:text-gray-100 zs:dark:border-gray-600\n zs:hover:bg-gray-100 zs:dark:hover:bg-gray-700\n zs:focus:outline-hidden zs:focus-visible:ring-2 zs:focus-visible:ring-offset-2 \n zs:focus-visible:ring-blue-500\"\n aria-label=\"Toggle theme switcher\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-controls=\"theme-panel\"\n >\n @if (currentTheme() === 'dark') {\n <i class=\"fas fa-moon\" aria-hidden=\"true\"></i>\n } @else {\n <i class=\"fas fa-sun zs:text-yellow-500\" aria-hidden=\"true\"></i>\n }\n </button>\n </div>\n </div>\n </div>\n}","// ==============================================\n// Component Metadata\n// ==============================================\nimport { Component, computed, input } from '@angular/core';\nimport { BaseSize } from '../../palette-service';\nimport { CommonModule } from '@angular/common';\n\ntype sizeClassesType = Record<BaseSize, { label: string; hint: string }>;\n\n@Component({\n selector: 'ZS-label',\n imports: [CommonModule],\n templateUrl: './label.html',\n styleUrl: './label.css'\n})\nexport class Label {\n\n // ==============================================\n // Label & Hint Configuration\n // ==============================================\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n readonly hintId = input<string | null>(null);\n readonly size = input<BaseSize>('md')\n\n // ==============================================\n // Accessibility & State Inputs\n // ==============================================\n readonly required = input<boolean>(false);\n readonly for = input<string | null>(null);\n\n \n // ==============================================\n // Computed Classes\n // ==============================================\n readonly sizeClasses = computed<{ label: string; hint: string }>(() => {\n const sizes: sizeClassesType = {\n sm: { label: 'zs:text-xs', hint: 'zs:text-[10px]' },\n md: { label: 'zs:text-sm', hint: 'zs:text-xs' },\n lg: { label: 'zs:text-base', hint: 'zs:text-sm' },\n };\n return sizes[this.size()];\n });\n}","<!-- ================= Label Wrapper ================= -->\n@if (label() || hint()) {\n <label \n [for]=\"for()\" \n class=\"zs:flex zs:items-center zs:gap-2\"\n >\n\n <!-- ========== Label Text ========== -->\n @if (label()) {\n <span class=\"zs:font-semibold zs:truncate\" [ngClass]=\"sizeClasses().label\">\n {{ label() }}\n\n <!-- Required Indicator -->\n @if (required()) {\n <span class=\"zs:text-red-500\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">(required)</span>\n }\n </span>\n }\n\n <!-- ========== Hint Text ========== -->\n @if (hint()) {\n <small\n [id]=\"hintId()\"\n class=\"zs:text-slate-500 zs:dark:text-slate-400\" \n [ngClass]=\"sizeClasses().hint\"\n >\n {{ hint() }}\n </small>\n }\n <!-- ========== End Hint Text ========== -->\n\n </label>\n}\n<!-- ================= End Label Wrapper ================= -->","import { CommonModule } from '@angular/common';\nimport { Component, computed, input, model } from '@angular/core';\nimport { BaseSize, checkboxTextPaletteMap, ringPaletteMap, FormStyle } from '../../palette-service';\nimport { Label } from '../label/label';\n\n// ==============================================\n// Types\n// ==============================================\n\nexport type ChVariantType = 'solid' | 'regular'\nexport type ShapeType = 'square' | 'circle'\n\n\n// ==============================================\n// Class\n// ==============================================\n\n@Component({\n selector: 'ZS-checkbox',\n imports: [Label, CommonModule],\n templateUrl: './checkbox.html',\n styleUrl: './checkbox.css'\n})\nexport class Checkbox {\n // ==============================================\n // Inputs\n // ==============================================\n\n readonly Id = input<string>(crypto.randomUUID());\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n readonly inputStyle = input<FormStyle>('secondary');\n readonly size = input<BaseSize>('md');\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n\n readonly variant = input<ChVariantType>('regular');\n readonly shape = input<ShapeType>('square');\n\n\n // ==============================================\n // Model\n // ==============================================\n\n readonly value = model<boolean>(false);\n\n\n // ==============================================\n // Computed Signals\n // ==============================================\n\n readonly palette = computed<{\n checkboxTextPalette: { checkBoxText: string, checkBoxTextHover: string },\n ringPalette: { ring: string }\n }>(\n () => {\n const checkboxTextPalette = checkboxTextPaletteMap.get(this.inputStyle())!;\n const ringPalette = ringPaletteMap.get(this.inputStyle())!;\n return { checkboxTextPalette, ringPalette }\n }\n );\n\n readonly iconClasses = computed<string>(() => {\n const v: ChVariantType = this.variant()\n const s: ShapeType = this.shape()\n\n const variantClass: Record<'true' | 'false', Record<ChVariantType, string>> = {\n true: {\n solid: 'fa-solid',\n regular: 'fa-regular'\n },\n false: {\n solid: 'fa-regular',\n regular: 'fa-regular'\n }\n }\n const shapeClass: Record<'true' | 'false', Record<ShapeType, string>> = {\n true: {\n square: 'fa-square-check',\n circle: 'fa-circle-check'\n },\n false: {\n square: 'fa-square',\n circle: 'fa-circle'\n },\n }\n\n const disabledClass = this.disabled() ? 'zs:opacity-60' : '';\n const interactionClass = this.disabledOrReadonly() ? 'zs:cursor-not-allowed' : '';\n\n const state = this.value() ? 'true' : 'false' as ('true' | 'false');\n return [\n variantClass[state][v],\n shapeClass[state][s],\n disabledClass,\n interactionClass\n ].filter(Boolean).join(' ')\n })\n\n readonly sizeClass = computed<string>(() => {\n const sizeClasses: Record<BaseSize, string> = {\n sm: 'zs:text-[20px]',\n md: 'zs:text-[30px]',\n lg: 'zs:text-[45px]'\n }\n return sizeClasses[this.size()]\n });\n\n readonly isChecked = computed<boolean>(() => this.value());\n readonly disabledOrReadonly = computed<boolean>(() => this.disabled() || this.isReadonly());\n\n\n // ==============================================\n // Handlers\n // ==============================================\n\n toggleChecked() {\n if (this.disabledOrReadonly()) return;\n this.value.update(v => !v);\n }\n\n onKeyDown(event: KeyboardEvent) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.toggleChecked();\n }\n }\n}","<div class=\"zs:flex zs:items-center zs:justify-start zs:w-full zs:select-none\">\n <!-- ===================== Checkbox Wrapper ===================== -->\n <div\n class=\"zs:cursor-pointer group leading-none\"\n >\n <!-- ===================== Hidden Input (Native for screen readers) ===================== -->\n <input\n type=\"checkbox\"\n class=\"zs:hidden\"\n [id]=\"Id()\"\n [checked]=\"isChecked()\"\n [disabled]=\"disabledOrReadonly()\"\n (change)=\"toggleChecked()\"\n />\n\n <!-- ===================== Custom Accessible Checkbox ===================== -->\n <span\n role=\"'checkbox'\"\n tabindex=\"0\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.aria-disabled]=\"disabledOrReadonly()\"\n [attr.aria-labelledby]=\"Id() + '-label'\"\n [ngClass]=\"[\n sizeClass(),\n palette().checkboxTextPalette.checkBoxText,\n palette().checkboxTextPalette.checkBoxTextHover,\n palette().ringPalette.ring,\n 'zs:leading-none zs:inline-flex zs:items-center zs:justify-center zs:focus:outline-hidden zs:focus-visible:ring-2'\n ]\"\n (click)=\"toggleChecked()\"\n (keydown)=\"onKeyDown($event)\"\n >\n <i [class]=\"iconClasses()\"></i>\n </span>\n </div>\n\n <!-- ===================== Label (ZS-label component) ===================== -->\n <ZS-label [class]=\"(label() || hint()) ? 'zs:ml-1' : ''\"\n [id]=\"Id() + '-label'\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [hintId]=\"Id() + '-hint'\"\n [size]=\"size()\"\n [for]=\"Id()\"\n ></ZS-label>\n</div>","import { Component, computed, inject, input } from '@angular/core';\nimport { ExtractorService } from '../../extractor-service/extractor-service';\n\n// ==============================================================================\n// Component Definition\n// ==============================================================================\n\n@Component({\n selector: 'ZS-input-errors',\n imports: [],\n templateUrl: './input-errors.html',\n styleUrl: './input-errors.css'\n})\nexport class InputErrors {\n // ==============================================================================\n // Service\n // ==============================================================================\n readonly extractorService: ExtractorService = inject(ExtractorService)\n\n\n // ==============================================================================\n // Inputs\n // ==============================================================================\n\n readonly Id = input<string>(crypto.randomUUID());\n readonly errors = input<(string[])[]>([]);\n\n // ==============================================================================\n // Computed Signals\n // ==============================================================================\n\n readonly extractedErrors = computed<string[]>(() => this.extractorService.extract(this.errors()))\n}\n","<!-- ========================= Error Messages ========================= -->\n@if (extractedErrors().length) {\n <ul\n [id]=\"Id() + '-error'\"\n class=\"zs:mt-1 zs:text-xs zs:text-red-500 zs:flex zs:flex-col zs:gap-1\"\n role=\"status\"\n aria-live=\"polite\"\n >\n @for (err of extractedErrors(); track $index) {\n <li class=\"zs:flex zs:items-center zs:gap-2\">\n <i class=\"fa fa-circle zs:text-[6px]\" aria-hidden=\"true\"></i>\n <span>{{ err }}</span>\n </li>\n }\n </ul>\n}","// ==============================================================================\n// Imports\n// ==============================================================================\n\nimport { Component, computed, ElementRef, input, model, output, viewChild } from '@angular/core';\nimport { FormStyle, inputPaletteMap, ringPaletteMap } from '../../palette-service';\nimport { ChangeEventType, ValidatorFn } from '../input/input';\nimport { Label } from '../label/label';\nimport { InputErrors } from '../input-errors/input-errors';\nimport { CommonModule } from '@angular/common';\nimport { Button } from '../button/button';\n\n// ==============================================================================\n// Types & Interfaces\n// ==============================================================================\n\nexport interface FileData {\n name: string;\n size: number;\n type: string;\n url?: string;\n}\n\nexport type FilesType = Map<string, FileData>;\n\n// ==============================================================================\n// Component Metadata\n// ==============================================================================\n\n@Component({\n selector: 'ZS-file',\n imports: [Label, InputErrors, CommonModule, Button],\n templateUrl: './file.html',\n styleUrl: './file.css'\n})\nexport class FileInput {\n\n // ==============================================================================\n // Inputs\n // ==============================================================================\n\n readonly Id = input<string>(crypto.randomUUID());\n readonly iName = input<string | null>(null);\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n readonly placeholder = input<string | null>(null);\n readonly inputStyle = input<FormStyle>('secondary');\n\n readonly autofocus = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly validateFns = input<ValidatorFn<FileData[]>[]>([]);\n\n readonly accept = input<string>('');\n readonly multiple = input<boolean>(false);\n readonly maxSize = input<number>(5 * 1024 * 1024); // 5MB\n readonly allowPreview = input<boolean>(true);\n readonly maxFiles = input<number | 'infinity'>('infinity');\n\n // ==============================================================================\n // Outputs\n // ==============================================================================\n\n readonly changeEv = output<ChangeEventType<FileData[]>>();\n\n // ==============================================================================\n // Model\n // ==============================================================================\n\n readonly files = model<FilesType>(new Map());\n readonly touched = model<boolean>(false); // Tracks if the user has interacted with the input\n\n // ==============================================================================\n // ViewChild\n // ==============================================================================\n\n readonly fileInputRef = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n // ==============================================================================\n // Computed Properties\n // ==============================================================================\n\n readonly palette = computed<{\n inputPalette: {\n border: string;\n borderHover: string;\n inputBg: string;\n text: string;\n };\n ringPalette: {\n ring: string;\n };\n }>(() => {\n const inputPalette = inputPaletteMap.get(this.inputStyle())!;\n const ringPalette = ringPaletteMap.get(this.inputStyle())!;\n return { inputPalette, ringPalette};\n });\n\n readonly hasFiles = computed<boolean>(() => this.files().size > 0);\n\n readonly totalSize = computed<number>(() =>\n this.filesMapToList().reduce((sum, f) => sum + f.size, 0)\n );\n\n readonly disabledOrReadonly = computed<boolean>(() => this.disabled() || this.isReadonly());\n\n readonly error = computed<string[]>(() => {\n const hasFiles = this.hasFiles();\n const files = this.files();\n const required = this.required();\n const totalSize = this.totalSize();\n const maxSize = this.maxSize();\n const maxFiles = this.maxFiles();\n const accept = this.accept();\n\n // Only validate after user interaction\n if (!this.touched()) return [];\n\n const errors: string[] = [];\n\n // Required validation\n if (required && !hasFiles) {\n errors.push('This field is required');\n }\n\n // Max size validation\n if (totalSize > maxSize) {\n errors.push(`Total file size exceeds ${this.formatSize(maxSize)}`);\n }\n\n // Max files validation\n if (maxFiles !== 'infinity' && files.size > maxFiles) {\n errors.push(`Total number of files exceeds ${maxFiles}`);\n }\n\n // Accept (file type) validation\n const invalidFiles = this.filesMapToList().filter(f => !this.matchesAccept(f, accept));\n if (invalidFiles.length > 0) {\n const names = invalidFiles.map(f => f.name).join(', ');\n errors.push(`Some files have unsupported types: ${names}`);\n }\n\n // Custom validators\n for (const fn of this.validateFns()) {\n const result = fn(this.filesMapToList());\n if (Array.isArray(result)) errors.push(...result);\n }\n\n return errors.length > 0 ? errors : [];\n });\n\n readonly filesMapToList = computed<FileData[]>(() => {\n const files = this.files();\n return files.size ? Array.from(files.values()) : [];\n });\n\n // ==============================================================================\n // Event Handlers\n // ==============================================================================\n\n handleFileChange(event: Event): void {\n if (this.disabledOrReadonly()) return;\n\n const input = event.target as HTMLInputElement;\n if (!input.files) return;\n\n const selected: FileData[] = Array.from(input.files).map(f => ({\n name: f.name,\n size: f.size,\n type: f.type,\n url: this.allowPreview() ? URL.createObjectURL(f) : undefined,\n }));\n\n this.files.update((prev: FilesType) => {\n const multiple = this.multiple();\n const next = multiple ? new Map(prev) : new Map<string, FileData>();\n\n for (const nf of selected) {\n next.set(this.fileKey(nf), nf);\n }\n\n return next;\n });\n\n this.touched.set(true);\n this.emitChangeValue(this.filesMapToList(), false);\n\n // Reset native <input> value to allow re-selecting the same file\n input.value = '';\n }\n\n removeFile(id: string): void {\n if (this.isReadonly() || this.disabled()) return;\n\n this.files.update((prev: FilesType) => {\n const next = new Map(prev);\n const file = prev.get(id);\n\n if (file?.url?.startsWith('blob:')) {\n URL.revokeObjectURL(file.url);\n }\n\n next.delete(id);\n return next;\n });\n\n this.emitChangeValue(this.filesMapToList(), false);\n\n // Reset native file input\n const inputEl = this.fileInputRef()?.nativeElement;\n if (inputEl) {\n inputEl.value = '';\n }\n }\n\n // ==============================================================================\n // Public Methods\n // ==============================================================================\n\n /** Forces the input to trigger a manual change event */\n public forceChange(fromForce: boolean = true): void {\n this.touched.set(true);\n this.emitChangeValue(this.filesMapToList(), fromForce);\n }\n\n\n // ==============================================================================\n // Private Helpers\n // ==============================================================================\n\n formatSize(size: number): string {\n if (size < 1024) return `${size} B`;\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`;\n return `${(size / 1024 / 1024).toFixed(1)} MB`;\n }\n\n preview(url: string | undefined): void {\n if (!url) return;\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n\n private fileKey(f: FileData): string {\n return `${f.name}_${f.size}_${f.type}`;\n }\n\n private emitChangeValue(value: FileData[], fromForce: boolean = true): void {\n const valid = this.error().length === 0;\n this.changeEv.emit({ value, valid, fromForce });\n }\n\n private matchesAccept(file: FileData, accept: string): boolean {\n if (!accept) return true;\n\n const types = accept.split(',').map(t => t.trim().toLowerCase());\n\n return types.some(type => {\n if (type === '*/*') return true;\n\n // Wildcard MIME types (e.g., image/*)\n if (type.endsWith('/*')) {\n const baseType = type.split('/')[0];\n return file.type.startsWith(`${baseType}/`);\n }\n\n // Exact MIME type match\n if (type.includes('/') && !type.startsWith('.')) {\n return file.type === type;\n }\n\n // File extension match (e.g., .jpg)\n if (type.startsWith('.')) {\n return file.name.toLowerCase().endsWith(type);\n }\n\n // Fallback: partial match in MIME type\n return file.type.includes(type);\n });\n }\n\n // ==============================================================================\n // Lifecycle Hooks\n // ==============================================================================\n\n ngOnDestroy(): void {\n this.files().forEach(f => {\n if (f.url?.startsWith('blob:')) {\n URL.revokeObjectURL(f.url);\n }\n });\n }\n}","<div\n class=\"zs:flex zs:flex-col zs:gap-2 zs:w-full\"\n [ngClass]=\"disabled() ? 'zs:opacity-60' : ''\"\n role=\"group\"\n [attr.aria-labelledby]=\"Id() + '-label'\"\n [attr.aria-describedby]=\"Id() + '-hint ' + Id() + '-error'\"\n>\n <!-- ========================= Label & Hint ========================= -->\n <ZS-label [class]=\"(label() || hint()) ? 'zs:mb-1' : ''\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [required]=\"required()\"\n [hintId]=\"Id() + '-hint'\"\n [for]=\"Id()\"\n [id]=\"Id() + '-label'\"\n >\n </ZS-label>\n\n <!-- ================= Input ================= -->\n <div\n [class]=\"[\n 'zs:relative zs:rounded-xl zs:flex zs:flex-col zs:justify-center zs:items-center zs:gap-2 zs:border-2 zs:border-dashed zs:transition-all zs:duration-200',\n palette().inputPalette.border,\n palette().ringPalette.ring,\n palette().inputPalette.borderHover,\n palette().inputPalette.inputBg\n ].join(' ')\"\n [ngClass]=\"disabledOrReadonly() ? 'cursor-not-allowed' : 'cursor-pointer'\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-disabled]=\"disabledOrReadonly()\"\n [attr.aria-label]=\"placeholder() || 'Upload file'\"\n (keydown.enter)=\"!disabledOrReadonly() && fileInput.click()\"\n (keydown.space)=\"!disabledOrReadonly() && fileInput.click()\"\n >\n <input\n #fileInput\n type=\"file\"\n [id]=\"Id()\"\n [name]=\"iName()\"\n [attr.accept]=\"accept()\"\n [attr.multiple]=\"multiple() ? '' : null\"\n [attr.autofocus]=\"autofocus() ? true : null\"\n class=\"zs:absolute zs:inset-0 zs:opacity-0 zs:cursor-pointer\"\n [disabled]=\"disabledOrReadonly()\"\n (change)=\"handleFileChange($event)\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"!!error().length\"\n [attr.aria-describedby]=\"Id() + '-hint ' + Id() + '-error'\"\n />\n\n <div class=\"zs:flex zs:flex-col zs:items-center zs:justify-center zs:text-center zs:py-6 zs:pointer-events-none zs:select-none\">\n <i class=\"fa-solid fa-upload text-3xl mb-2\" [ngClass]=\"palette().inputPalette.text\" aria-hidden=\"true\"></i>\n <p class=\"zs:text-sm zs:text-gray-500 zs:dark:text-gray-400\">\n {{ placeholder() }}\n </p>\n </div>\n </div>\n\n <!-- ================= Files Preview ================= -->\n @if (hasFiles()) {\n <div\n class=\"zs:flex zs:flex-col zs:gap-2 zs:mt-3\"\n role=\"list\"\n aria-label=\"Uploaded files\"\n >\n @for (entry of files().entries(); track entry[0]) {\n <div\n class=\"zs:flex zs:flex-col zs:gap-1 zs:p-2 zs:rounded-lg zs:border zs:focus:outline-hidden zs:focus:ring-2 zs:focus:ring-offset-2\"\n [ngClass]=\"[palette().inputPalette.border, palette().inputPalette.inputBg]\"\n role=\"listitem\"\n tabindex=\"0\"\n >\n <span class=\"zs:block zs:text-sm zs:font-medium zs:truncate\">\n {{ entry[1].name }}\n </span>\n\n <div class=\"zs:flex zs:items-center zs:justify-between zs:gap-4\">\n <div class=\"zs:flex zs:items-center zs:gap-1\">\n <i class=\"text-lg fa-solid fa-file\" [ngClass]=\"palette().inputPalette.text\" aria-hidden=\"true\"></i>\n <span class=\"zs:text-xs zs:text-gray-500\">\n {{ formatSize(entry[1].size) }}\n </span>\n </div>\n\n <div class=\"zs:flex zs:gap-2\">\n @if (allowPreview() && entry[1].url?.startsWith('blob:')) {\n <ZS-button\n type=\"button\"\n (clickedEv)=\"preview(entry[1].url)\"\n [btnStyle]=\"inputStyle()\"\n size=\"sm\"\n aria-label=\"Preview {{ entry[1].name }}\"\n >\n Preview\n </ZS-button>\n }\n\n @if (!disabledOrReadonly()) {\n <ZS-button\n type=\"button\"\n variant=\"outline\"\n btnStyle=\"danger\"\n (clickedEv)=\"removeFile(entry[0])\"\n icon=\"fa-solid fa-trash\"\n aria-label=\"Remove {{ entry[1].name }}\"\n >\n </ZS-button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- ========================= Error Messages ========================= -->\n <ZS-input-errors\n [Id]=\"Id() + '-error'\"\n [errors]=\"[error()]\"\n aria-live=\"assertive\"\n role=\"alert\"\n >\n </ZS-input-errors>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { inputPaletteMap, BaseSize, FormStyle, ringPaletteMap } from '../../palette-service';\nimport { Label } from '../label/label';\nimport { InputErrors } from '../input-errors/input-errors';\n\n// ==============================================================================\n// Types\n// ==============================================================================\n\nexport type DateType = \n | 'date' \n | 'datetime-local' \n | 'month' \n | 'week' \n | 'time';\n\nexport type InputType = \n | DateType \n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'tel'\n | 'phone'\n | 'url'\n | 'search';\n\nexport type ValidatorFn<T = string | null> = (value: T) => string[];\nexport type FormatterFn = (value: string | null) => string | null;\n\ntype SizeClassesType = 'container' | 'field' | 'leftIcon' | 'rightIcon';\n\nexport interface ChangeEventType<T = string | null> {\n value: T;\n valid: boolean;\n fromForce: boolean;\n}\n// ==============================================================================\n// Constants & Regex\n// ==============================================================================\n\nconst SIZE_CLASSES_MAP = new Map<SizeClassesType, Record<BaseSize, string>>([\n [\n 'container',\n {\n sm: 'zs:px-2 zs:py-1 zs:rounded-md',\n md: 'zs:px-3 zs:py-2 zs:rounded-lg',\n lg: 'zs:px-4 zs:py-3 zs:rounded-lg',\n },\n ],\n [\n 'field',\n {\n sm: 'zs:text-xs',\n md: 'zs:text-sm',\n lg: 'zs:text-base',\n },\n ],\n [\n 'leftIcon',\n {\n sm: 'zs:text-sm zs:mr-1.5',\n md: 'zs:text-base zs:mr-2',\n lg: 'zs:text-lg zs:mr-2.5',\n },\n ],\n [\n 'rightIcon',\n {\n sm: 'zs:text-xs',\n md: 'zs:text-sm',\n lg: 'zs:text-base',\n },\n ],\n]);\n\nconst DATE_ICON_MAP: Record<DateType, string> = {\n date: 'fas fa-calendar',\n 'datetime-local': 'fas fa-calendar',\n month: 'fas fa-calendar-days',\n week: 'fas fa-calendar-week',\n time: 'fas fa-clock',\n};\n\nconst ICONS = {\n spinner: 'fas fa-spinner fa-spin',\n};\n\nconst PHONE_REGEX: RegExp = /^\\+?[0-9\\s\\-()]{7,20}$/;\nconst EMAIL_REGEX: RegExp = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n// ==============================================================================\n// Component Definition\n// ==============================================================================\n\n@Component({\n selector: 'ZS-input',\n imports: [CommonModule, Label, InputErrors],\n templateUrl: './input.html',\n styleUrl: './input.css'\n})\nexport class Input {\n // ==============================================================================\n // Inputs\n // ==============================================================================\n\n readonly Id = input<string>(crypto.randomUUID());\n readonly iName = input<string | null>(null);\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n readonly placeholder = input<string | null>(null);\n readonly type = input<InputType>('text');\n readonly inputStyle = input<FormStyle>('secondary');\n\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n readonly autocomplete = input<string | null>('off');\n readonly required = input<boolean>(false);\n readonly inputmode = input<string | null>(null);\n\n readonly icon = input<string | null>(null);\n readonly showSearchIcon = input<boolean>(false);\n readonly showLoaderIconOnSearchInput = input<boolean>(false);\n\n readonly maxlength = input<number | null>(null);\n readonly minlength = input<number | null>(null);\n readonly spellcheck = input<boolean>(false);\n\n readonly min = input<string | number | null>(null);\n readonly max = input<string | number | null>(null);\n readonly step = input<number | null>(null);\n\n readonly validateFns = input<ValidatorFn<string | null>[]>([]);\n readonly formatFn = input<FormatterFn>((val) => val?.trim() ?? null);\n\n readonly autofocus = input<boolean>(false);\n readonly searchDebounceDelay = input<number>(300);\n readonly size = input<BaseSize>('md');\n\n // ==============================================================================\n // ViewChild\n // ==============================================================================\n\n readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n\n // ==============================================================================\n // Model\n // ==============================================================================\n\n readonly value = model<string | null>(null);\n readonly touched = model<boolean>(false); // Tracks if the user has interacted with the input\n\n // ==============================================================================\n // Outputs\n // ==============================================================================\n\n readonly enterEv = output<void>();\n readonly focusEv = output<void>();\n readonly blurEv = output<void>();\n readonly changedEv = output<ChangeEventType<string | null>>();\n readonly searchEv = output<string | null>();\n readonly clearedEv = output<void>();\n readonly keydownEv = output<KeyboardEvent>();\n\n // ==============================================================================\n // Internal State (Signals)\n // ==============================================================================\n\n readonly showPassword = signal<boolean>(false);\n private searchDebounceTimer?: ReturnType<typeof setTimeout>;\n readonly loaderIconOnSearchInput = signal<string | null>(null); // Fixed typo: \"Serach\" → \"Search\"\n\n // ==============================================================================\n // Computed Properties\n // ==============================================================================\n\n readonly disabledOrReadonly = computed<boolean>(() => this.disabled() || this.isReadonly());\n\n readonly containerClasses = computed<string>(() => {\n const baseClasses = 'zs:border zs:transition-all zs:duration-150 zs:focus-within:ring-2';\n const hasError = this.error().length;\n\n let styleConfig = inputPaletteMap.get(this.inputStyle())!;\n const ringConfig = ringPaletteMap.get(this.inputStyle())!;\n if (hasError) {\n styleConfig = inputPaletteMap.get('danger')!;\n }\n\n const disabledClass = this.disabled() ? 'zs:opacity-60' : '';\n const interactionClass = this.disabledOrReadonly()\n ? 'zs:cursor-not-allowed'\n : 'zs:cursor-text';\n\n return [\n baseClasses,\n styleConfig.border,\n styleConfig.borderHover,\n styleConfig.inputBg,\n styleConfig.text,\n ringConfig.ring,\n disabledClass,\n interactionClass,\n ]\n .filter(Boolean)\n .join(' ');\n });\n\n // Computed date icon\n readonly isDate = computed<boolean>(() => {\n const dateTypes: DateType[] = ['date', 'datetime-local', 'month', 'week', 'time'];\n return dateTypes.includes(this.type() as DateType);\n });\n \n readonly dateIcon = computed<string>(() => {\n if (this.icon()) return '';\n return DATE_ICON_MAP[this.type() as DateType] || 'fas fa-calendar';\n });\n\n readonly showClear = computed<boolean>(() => this.type() !== 'password' && !!this.value());\n\n readonly error = computed<string[]>(() => {\n const val = this.value();\n const type = this.type();\n const required = this.required();\n const minlength = this.minlength();\n const maxlength = this.maxlength();\n const min = this.min();\n const max = this.max();\n\n // Only validate after user interaction\n if (!this.touched()) return [];\n\n const errors: string[] = [];\n\n // Required validation\n if (required && !val) {\n errors.push('This field is required');\n }\n\n // Min length\n if (minlength !== null && val && val.length < minlength) {\n errors.push(`The value must be at least ${minlength} characters`);\n }\n\n // Max length\n if (maxlength !== null && val && val.length > maxlength) {\n errors.push(`The value must be at most ${maxlength} characters`);\n }\n\n // Email format\n if (type === 'email' && val && !EMAIL_REGEX.test(val)) {\n errors.push('Please enter a valid email address');\n }\n\n // Number range & validity\n if (type === 'number' && val) {\n const num = Number(val);\n if (Number.isNaN(num)) {\n errors.push('Please enter a valid number');\n } else {\n if (min !== null && num < Number(min)) {\n errors.push(`The value must be at least ${min}`);\n }\n if (max !== null && num > Number(max)) {\n errors.push(`The value must be at most ${max}`);\n }\n }\n }\n\n // Date/Time Range Validation\n if (this.isDate() && val) {\n const valueTime = new Date(val).getTime();\n\n const minDate = min ? new Date(min as string).getTime() : null;\n const maxDate = max ? new Date(max as string).getTime() : null;\n\n if (minDate !== null && valueTime < minDate) {\n errors.push(`The date must be on or after ${min}`);\n }\n if (maxDate !== null && valueTime > maxDate) {\n errors.push(`The date must be on or before ${max}`);\n }\n }\n\n // Phone format\n if (type === 'phone' && val && !PHONE_REGEX.test(val)) {\n errors.push('Please enter a valid phone number');\n }\n\n // URL validity\n if (type === 'url' && val) {\n try {\n new URL(val);\n } catch {\n errors.push('Please enter a valid URL');\n }\n }\n\n // Custom validator\n for (const fn of this.validateFns()) {\n const result = fn(val);\n if (Array.isArray(result)) errors.push(...result);\n }\n\n return errors.length > 0 ? errors : [];\n });\n\n readonly supportsMinMaxStep = computed<boolean>(() => {\n const t = this.type();\n return this.isDate() || ['number'].includes(t);\n })\n\n // ==============================================================================\n // Getters\n // ==============================================================================\n\n get actualType(): string {\n if (this.type() === 'phone') return 'tel';\n if (this.type() === 'search') return 'text';\n if (this.type() === 'password' && this.showPassword()) return 'text';\n return this.type();\n }\n\n getSize(type: SizeClassesType): string {\n return SIZE_CLASSES_MAP.get(type)?.[this.size()] ?? '';\n }\n\n // ==============================================================================\n // Lifecycle Hooks\n // ==============================================================================\n\n ngAfterViewInit() {\n if (this.autofocus()) {\n queueMicrotask(() => this.inputEl()?.nativeElement.focus());\n }\n }\n\n // ==============================================================================\n // Event Handlers\n // ==============================================================================\n focusInput(event: MouseEvent): void {\n const input = (event.currentTarget as HTMLElement).querySelector('input');\n input?.focus();\n }\n\n onInput(event: Event): void {\n if (this.disabledOrReadonly()) return;\n\n const value = (event.target as HTMLInputElement).value;\n this.value.set(value);\n\n // Handle search input with debounce and loader\n if (this.type() === 'search') {\n if (this.showLoaderIconOnSearchInput()) {\n this.loaderIconOnSearchInput.set(ICONS.spinner);\n }\n\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n }\n\n this.searchDebounceTimer = setTimeout(() => {\n this.searchEv.emit(this.value());\n this.loaderIconOnSearchInput.set(null);\n }, this.searchDebounceDelay());\n }\n }\n\n onEnter(): void {\n if (this.disabledOrReadonly()) return;\n this.enterEv.emit();\n }\n\n onFocus(): void {\n this.focusEv.emit();\n }\n\n onBlur(): void {\n if (this.disabledOrReadonly()) return;\n this.touched.set(true);\n this.value.set(this.formatFn()(this.value()));\n this.blurEv.emit();\n }\n\n onChange(): void {\n if (this.disabledOrReadonly()) return;\n this.touched.set(true);\n\n this.emitChangeValue(this.value(), false);\n }\n\n onSearch(): void {\n if (this.disabledOrReadonly()) return;\n this.searchEv.emit(this.value());\n }\n\n clear(): void {\n if (this.disabledOrReadonly()) return;\n this.value.set(null);\n\n this.emitChangeValue(null, false);\n\n this.searchEv.emit(null);\n this.clearedEv.emit();\n }\n\n togglePassword(): void {\n if (this.disabledOrReadonly()) return;\n this.showPassword.update((v) => !v);\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.disabledOrReadonly()) return;\n this.keydownEv.emit(event);\n }\n\n /** Forces the input to trigger a manual change event */\n public forceChange(fromForce: boolean = true): void {\n // Applies the same logic as natural change.\n this.touched.set(true);\n this.value.set(this.formatFn()(this.value()));\n\n this.emitChangeValue(this.value(), fromForce);\n }\n\n private emitChangeValue(value: string | null, fromForce: boolean = true): void {\n const valid = this.error().length === 0;\n this.changedEv.emit({ value, valid, fromForce });\n }\n}","<!-- ==============================================\n Input Field Component (ZS-Input)\n ============================================== -->\n\n<div class=\"zs:w-full\">\n\n <!-- ========================= Label & Hint ========================= -->\n <ZS-label [class]=\"(label() || hint()) ? 'zs:mb-1' : ''\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [required]=\"required()\"\n [hintId]=\"Id() + '-hint'\"\n [size]=\"size()\"\n [for]=\"Id()\"\n >\n </ZS-label>\n\n <!-- ========================= Input Container ========================= -->\n <div\n class=\"zs:relative zs:flex zs:items-center zs:w-full\"\n [class]=\"containerClasses() + ' ' + getSize('container')\"\n (click)=\"focusInput($event)\"\n >\n\n <!-- ========================= Left Icon ========================= -->\n @if (icon() || loaderIconOnSearchInput() || isDate()) {\n <i\n [ngClass]=\"(\n loaderIconOnSearchInput()\n ? loaderIconOnSearchInput()\n : \n icon() ? icon() : dateIcon()\n ) + ' ' + getSize('leftIcon')\"\n aria-hidden=\"true\"\n ></i>\n }\n\n <!-- ========================= Input Field ========================= -->\n <input\n #inputEl\n [id]=\"Id()\"\n [name]=\"iName()\"\n [type]=\"actualType\"\n [attr.placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"disabled() ? true : null\"\n [attr.min]=\"supportsMinMaxStep() ? min() : null\"\n [attr.max]=\"supportsMinMaxStep() ? max() : null\"\n [attr.step]=\"supportsMinMaxStep() ? step() : null\"\n [attr.required]=\"required() ? true : null\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"onEnter()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (change)=\"onChange()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.minlength]=\"minlength()\"\n [attr.autofocus]=\"autofocus() ? true : null\"\n [attr.readonly]=\"isReadonly() ? true : null\"\n [attr.aria-invalid]=\"!!error()\"\n [attr.inputmode]=\"inputmode()\"\n [spellcheck]=\"spellcheck()\"\n class=\"zs:flex-1 zs:bg-transparent zs:outline-hidden zs:caret-current zs:w-full\"\n [class]=\"getSize('field')\"\n [attr.aria-describedby]=\"\n (hint() ? Id() + '-hint' : '') +\n (hint() && error() ? ' ' : '') +\n (error() ? Id() + '-error' : '')\n \"\n />\n\n <!-- ========================= Spacer (Maintains Height) ========================= -->\n <div class=\"zs:h-6\"></div>\n\n <!-- ========================= Password Toggle ========================= -->\n @if (type() === 'password') {\n <button\n type=\"button\"\n (click)=\"togglePassword()\"\n [attr.aria-pressed]=\"showPassword()\"\n class=\"zs:ml-1 zs:px-1 zs:text-slate-500 zs:hover:text-slate-700 \n zs:dark:text-slate-400 zs:dark:hover:text-slate-200\"\n [attr.aria-label]=\"showPassword() ? 'Hide password' : 'Show password'\"\n >\n <i\n class=\"fa\"\n [class]=\"(showPassword() ? 'fa-eye-slash' : 'fa-eye') + ' ' + getSize('rightIcon')\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n\n <!-- ========================= Clear Button ========================= -->\n @if (showClear() && !disabledOrReadonly()) {\n <button\n type=\"button\"\n (click)=\"clear()\"\n class=\"zs:ml-1 zs:px-1 zs:text-slate-500 zs:hover:text-slate-700 \n zs:dark:text-slate-400 zs:dark:hover:text-slate-200\"\n [attr.aria-label]=\"'Clear ' + (label() || 'input')\"\n >\n <i\n class=\"fa fa-times\"\n [class]=\"getSize('rightIcon')\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n\n <!-- ========================= Search Icon ========================= -->\n @if (type() === 'search' || showSearchIcon()) {\n <button\n type=\"button\"\n (click)=\"onSearch()\"\n class=\"zs:ml-1 zs:px-1 zs:text-slate-500 zs:hover:text-slate-700 \n zs:dark:text-slate-400 zs:dark:hover:text-slate-200\"\n aria-label=\"Search\"\n >\n <i\n class=\"fa fa-search\"\n [class]=\"getSize('rightIcon')\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n\n </div>\n\n <!-- ========================= Error Messages ========================= -->\n <ZS-input-errors\n [Id]=\"Id()\"\n [errors]=\"[error()]\"\n >\n </ZS-input-errors>\n\n</div>","// ==============================================\n// Imports\n// ==============================================\nimport {\n Component,\n ChangeDetectionStrategy,\n computed,\n input,\n model,\n signal,\n ElementRef,\n viewChild,\n effect,\n} from '@angular/core';\nimport { BaseSize, buttonSolidPaletteMap, FormStyle, inputPaletteMap } from '../../palette-service';\nimport { Label } from '../label/label';\nimport { CommonModule } from '@angular/common';\n\n// ==============================================\n// Component Metadata\n// ==============================================\n@Component({\n selector: 'ZS-range',\n imports: [Label, CommonModule],\n templateUrl: './range.html',\n styleUrl: './range.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Range {\n\n // ==============================================\n // Inputs\n // ==============================================\n readonly Id = input<string>(crypto.randomUUID());\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n\n readonly min = input<number>(10);\n readonly max = input<number>(400);\n readonly step = input<number>(10);\n\n readonly inputStyle = input<FormStyle>('secondary');\n readonly size = input<BaseSize>('md');\n\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n\n readonly showValue = input<boolean>(true);\n\n // ==============================================\n // Model\n // ==============================================\n readonly value = model<number>(200);\n\n // ==============================================\n // References & Internal State\n // ==============================================\n readonly trackRef = viewChild<ElementRef<HTMLDivElement>>('track');\n readonly dragging = signal<boolean>(false);\n\n // ==============================================\n // Computed Properties\n // ==============================================\n readonly disabledOrReadonly = computed<boolean>(() => this.disabled() || this.isReadonly());\n\n readonly percent = computed<number>(() => {\n const range = this.max() - this.min();\n return ((this.value() - this.min()) / range) * 100;\n });\n\n rangeSizeClasses = (type: 'size' | 'height'): string => {\n const sizeClasses: Record<'size' | 'height', Record<BaseSize, string>> = {\n height: {\n sm: 'zs:h-1.5',\n md: 'zs:h-2.5',\n lg: 'zs:h-3.5',\n },\n size: {\n sm: 'zs:size-3.5',\n md: 'zs:size-5',\n lg: 'zs:size-7',\n }\n }\n return sizeClasses[type][this.size()]\n }\n\n readonly dotCLasses = computed<string>(() => {\n const sizeClasses: Record<BaseSize, string> = {\n sm: 'zs:text-[6px]',\n md: 'zs:text-[10px]',\n lg: 'zs:text-[14px]',\n }\n return sizeClasses[this.size()]\n })\n\n readonly gapCLasses = computed<string>(() => {\n const sizeClasses: Record<BaseSize, string> = {\n sm: 'zs:gap-3.5',\n md: 'zs:gap-4',\n lg: 'zs:gap-6',\n }\n return sizeClasses[this.size()]\n })\n\n readonly palette = computed<{\n buttonSolidPalette: {\n btnBG: string;\n btnBGHover: string;\n };\n inputPalette: {\n border: string;\n borderHover: string;\n inputBg: string;\n text: string;\n };\n }>(() => {\n const buttonSolidPalette = buttonSolidPaletteMap.get(this.inputStyle())!;\n const inputPalette = inputPaletteMap.get(this.inputStyle())!;\n return { buttonSolidPalette, inputPalette }\n })\n\n readonly rangeClasses = computed<string>(() => {\n const base = 'zs:relative zs:w-full zs:rounded-full zs:cursor-pointer';\n const sizeClasses = this.rangeSizeClasses('height');\n const disabledClass = this.disabled() ? 'zs:opacity-60' : '';\n const interactionClass = !this.disabledOrReadonly() ? 'zs:group' : '';\n\n return [\n sizeClasses,\n this.palette().inputPalette.border,\n this.palette().inputPalette.inputBg,\n this.palette().inputPalette.text,\n base,\n disabledClass,\n interactionClass\n ].join(' ');\n });\n\n readonly ThumbClasses = computed<string>(() => {\n return [\n this.palette().buttonSolidPalette.btnBG,\n this.palette().buttonSolidPalette.btnBGHover,\n this.dragging() ? 'zs:scale-110 zs:shadow-lg' : '',\n this.rangeSizeClasses('size')\n ].join(' ')\n })\n\n // ==============================================\n // Event Handlers\n // ==============================================\n onMouseDown(event: MouseEvent): void {\n if (this.disabledOrReadonly()) return;\n this.dragging.set(true);\n this.updateValueFromEvent(event);\n }\n\n onMouseMove(event: MouseEvent): void {\n if (this.disabledOrReadonly() || !this.dragging()) return;\n this.updateValueFromEvent(event);\n }\n\n onMouseUp(): void {\n if (this.disabledOrReadonly()) return;\n this.dragging.set(false);\n }\n\n // ==============================================\n // Private Helpers\n // ==============================================\n private updateValueFromEvent(event: MouseEvent): void {\n if (this.disabledOrReadonly()) return;\n\n const track = this.trackRef()?.nativeElement;\n if (!track) return;\n\n const rect = track.getBoundingClientRect();\n const x = Math.min(Math.max(event.clientX - rect.left, 0), rect.width);\n const percent = x / rect.width;\n const rawValue = this.min() + percent * (this.max() - this.min());\n\n const stepped = Math.round(rawValue / this.step()) * this.step();\n this.value.set(Math.min(this.max(), Math.max(this.min(), stepped)));\n }\n\n calcThumbPosition(): string {\n const p = this.percent();\n const track = this.trackRef()?.nativeElement;\n if (!track) return `${p}%`;\n\n const trackWidth = track.offsetWidth; // عرض الشريط بالبكسل\n const displacementSizes: Record<BaseSize, number> = {\n sm: 6,\n md: 10,\n lg: 14,\n };\n\n const displacementPx = displacementSizes[this.size()];\n const displacementPercent = (displacementPx / trackWidth) * 100;\n\n const displacement = p - displacementPercent;\n return `${displacement}%`;\n }\n\n // ==============================================\n // Lifecycle & Side Effects\n // ==============================================\n constructor() {\n const mouseUpHandler = this.onMouseUp.bind(this);\n const mouseMoveHandler = this.onMouseMove.bind(this);\n\n effect((): (() => void) | void => {\n if (!this.dragging()) return;\n\n window.addEventListener('mouseup', mouseUpHandler);\n window.addEventListener('mousemove', mouseMoveHandler);\n\n return () => {\n window.removeEventListener('mouseup', mouseUpHandler);\n window.removeEventListener('mousemove', mouseMoveHandler);\n };\n });\n }\n}","<!-- ========================= Label ========================= -->\n<div class=\"zs:flex zs:flex-col zs:w-full zs:select-none\">\n <ZS-label [class]=\"(label() || hint()) ? 'zs:mb-1' : ''\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [hintId]=\"Id() + '-hint'\"\n [size]=\"size()\"\n [for]=\"Id()\"\n ></ZS-label>\n\n <!-- ========================= Slider Container ========================= -->\n <div class=\"zs:flex zs:items-center\"\n [class]=\"gapCLasses()\">\n \n <!-- ========================= Track ========================= -->\n <div\n #track\n [class]=\"rangeClasses()\"\n (mousedown)=\"onMouseDown($event)\"\n >\n \n <!-- ========================= Track Background ========================= -->\n <div\n class=\"zs:absolute zs:inset-0 zs:rounded-full zs:bg-linear-to-r zs:from-gray-200 zs:to-gray-300 zs:transition-all zs:duration-300 zs:group-hover:brightness-110\"\n [ngClass]=\"[\n ['secondary', 'dark'].includes(inputStyle()) ? 'zs:dark:from-gray-500 zs:dark:to-gray-600' : 'zs:dark:from-gray-700 zs:dark:to-gray-800',\n disabledOrReadonly() ? 'zs:cursor-not-allowed' : ''\n ]\"\n ></div>\n\n <!-- ========================= Fill (Progress) ========================= -->\n <div\n class=\"zs:absolute zs:left-0 zs:rounded-full zs:top-0 zs:h-full zs:transition-all zs:duration-200 zs:ease-out zs:shadow-sm\"\n [style.width.%]=\"percent()\"\n [ngClass]=\"[\n disabledOrReadonly() ? 'zs:cursor-not-allowed' : '',\n palette().buttonSolidPalette.btnBG,\n palette().buttonSolidPalette.btnBGHover\n ]\"\n ></div>\n\n <!-- ========================= Thumb (Handle) ========================= -->\n <div\n class=\"zs:absolute zs:top-1/2 zs:rounded-full zs:flex zs:items-center zs:justify-center \n zs:-translate-y-1/2 zs:transition-all zs:duration-200 zs:ease-out zs:shadow-md \n zs:group-hover:scale-110\"\n [style.left]=\"calcThumbPosition()\"\n [ngClass]=\"[ThumbClasses(), disabledOrReadonly() ? 'zs:cursor-not-allowed' : '']\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.id]=\"Id()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-disabled]=\"disabledOrReadonly() || null\"\n [attr.aria-readonly]=\"isReadonly() || null\"\n [attr.aria-labelledby]=\"Id() + '-label'\"\n [attr.aria-describedby]=\"hint() ? Id() + '-hint' : null\"\n aria-orientation=\"horizontal\"\n >\n <i class=\"fa-solid fa-circle zs:text-white\" [ngClass]=\"dotCLasses()\"></i>\n </div>\n </div>\n\n <!-- ========================= Value Display ========================= -->\n @if (showValue()) {\n <div class=\"zs:text-sm zs:text-gray-600 zs:dark:text-gray-300 zs:font-medium\">\n {{ value() }}\n </div>\n }\n </div>\n</div>","// =================================================================================================\n// Imports\n// =================================================================================================\nimport { \n Component, \n signal, \n computed, \n input, \n model, \n output, \n effect, \n inject\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { ChangeEventType, Input, ValidatorFn } from '../input/input';\nimport { Label } from '../label/label';\nimport { FormStyle, inputPaletteMap, selectPaletteMap } from '../../palette-service';\nimport { InputErrors } from '../input-errors/input-errors';\nimport { zIndices, ZIndicesType } from '../../z-index';\n\n\n// =================================================================================================\n// Interfaces\n// =================================================================================================\nexport interface DropdownItem<T> {\n id: T;\n name: string;\n [key: string]: any;\n}\n\n// =================================================================================================\n// Component Declaration\n// =================================================================================================\n@Component({\n selector: 'ZS-select',\n imports: [CommonModule, FormsModule, Input, Label, InputErrors],\n templateUrl: './select.html',\n styleUrl: './select.css'\n})\nexport class Select<T> {\n readonly zIndices: ZIndicesType = zIndices;\n\n // =================================================================================================\n // Inputs\n // =================================================================================================\n readonly Id = input<string>(crypto.randomUUID());\n readonly items = input.required<DropdownItem<T>[]>();\n\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n\n readonly required = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n\n readonly inputStyle = input<FormStyle>('secondary');\n readonly placeholder = input<string>('Select an option...');\n\n readonly showSearch = input<boolean>(true);\n readonly searchPlaceholder = input<string>('Search...');\n\n readonly noResultsText = input<string>('No results found');\n readonly showClearButton = input<boolean>(true);\n\n readonly searchDebounceDelay = input<number>(300);\n readonly showLoaderIconOnSearchInput = input<boolean>(false);\n\n readonly preselectedIds = input<(number | string)[]>([]);\n readonly multiple = input<boolean>(false);\n readonly validateFns = input<ValidatorFn<DropdownItem<T>[]>[]>([]);\n\n // =================================================================================================\n // Model (Two-way Binding)\n // =================================================================================================\n readonly selectedItems = model<DropdownItem<T>[]>([]);\n readonly touched = model<boolean>(false); // Tracks if the user has interacted with the input\n\n\n // =================================================================================================\n // Outputs\n // =================================================================================================\n readonly selectedItemsEv = output<ChangeEventType<DropdownItem<T>[]>>();\n readonly selectionClearedEv = output<void>();\n\n\n // =================================================================================================\n // Local Signals\n // =================================================================================================\n readonly isOpen = signal<boolean>(false);\n readonly searchQuery = signal<string | null>(null);\n\n\n // =================================================================================================\n // Computed Signals\n // =================================================================================================\n readonly styleEntry = computed<{\n inputEntry: {\n border: string;\n borderHover: string;\n inputBg: string;\n text: string;\n };\n selectEntry: {\n bgSelect: string;\n cleartext: string;\n cleartexthover: string;\n };\n }>(() => {\n const hasError = this.error().length;\n\n let inputEntry: {\n border: string;\n borderHover: string;\n inputBg: string;\n text: string;\n } = inputPaletteMap.get(this.inputStyle())!;\n\n let selectEntry: {\n bgSelect: string,\n cleartext: string,\n cleartexthover: string,\n } = selectPaletteMap.get(this.inputStyle())!;\n\n if(hasError) {\n selectEntry = selectPaletteMap.get('danger')!;\n inputEntry = inputPaletteMap.get('danger')!;\n }\n\n return { inputEntry, selectEntry }\n })\n\n readonly disabledOrReadonly = computed<boolean>(\n () => this.disabled() || this.isReadonly()\n );\n\n readonly filteredItems = computed<DropdownItem<T>[]>(() => {\n const query = this.searchQuery();\n if (!query) return this.items();\n\n const lowerQuery = query.toLowerCase();\n return this.items().filter(item =>\n item.name.toLowerCase().includes(lowerQuery)\n );\n });\n\n readonly containerClasses = computed<string>(() => {\n const base = `\n zs:border zs:transition-all zs:duration-150\n zs:flex zs:items-center zs:justify-between\n zs:w-full zs:min-w-48 zs:px-3 zs:py-2\n zs:rounded-lg zs:shadow-sm\n `.trim();\n\n const disabledCls = this.disabled() ? 'zs:opacity-60' : '';\n const cursorCls = this.disabledOrReadonly()\n ? 'zs:cursor-not-allowed'\n : 'zs:cursor-text';\n\n const inputEntry = this.styleEntry().inputEntry;\n return [\n base,\n inputEntry.border,\n inputEntry.borderHover,\n inputEntry.inputBg,\n inputEntry.text,\n disabledCls,\n cursorCls\n ].filter(Boolean).join(' ');\n });\n\n readonly clearClass = computed<string>(() => {\n const base = 'zs:mt-2 zs:text-sm zs:flex zs:items-center zs:transition-colors';\n return [\n base,\n this.styleEntry().selectEntry.cleartext,\n this.styleEntry().selectEntry.cleartexthover\n ].filter(Boolean).join(' ');\n });\n\n readonly showItemsClass = computed<string>(() => {\n return this.styleEntry().selectEntry.bgSelect ?? '';\n });\n\n readonly error = computed<string[]>(() => {\n const selectedItems = this.selectedItems();\n const required = this.required();\n\n // Only validate after user interaction\n if (!this.touched()) return [];\n\n const errors: string[] = [];\n\n // Required validation\n if (required && !selectedItems.length) {\n errors.push('This field is required');\n }\n\n // Custom validator\n for (const fn of this.validateFns()) {\n const result = fn(selectedItems);\n if (Array.isArray(result)) errors.push(...result);\n }\n\n return errors.length > 0 ? errors : [];\n });\n\n\n // =================================================================================================\n // Utility Methods\n // =================================================================================================\n readonly getBgSelectClasses = (selected: boolean): string => {\n return selected\n ? `${this.styleEntry().selectEntry.bgSelect} zs:hover:opacity-80`\n : 'zs:hover:bg-gray-200/50 zs:dark:hover:bg-gray-600/40';\n };\n\n\n // =================================================================================================\n // Lifecycle & Effects\n // =================================================================================================\n constructor() {\n effect(() => {\n const ids = this.preselectedIds();\n const items: DropdownItem<T>[] = ids\n ?.map(id => this.items().find(item => item.id === id))\n .filter((item): item is DropdownItem<T> => item !== undefined) ?? [];\n\n if (items.length > 0) {\n this.selectItem(items, true);\n } else if (ids.length === 0) {\n this.clearSelection();\n }\n });\n }\n\n\n // =================================================================================================\n // Public Methods\n // =================================================================================================\n toggleDropdown(): void {\n if (this.disabledOrReadonly()) return;\n\n this.isOpen.set(!this.isOpen());\n if (this.isOpen()) {\n this.searchQuery.set(null);\n }\n if (!this.isOpen()) this.touched.set(true)\n }\n\n selectItem(items: DropdownItem<T>[], isPreselectedIds: boolean = false): void {\n if (!items?.length || !items[0]) return;\n\n if (this.multiple()) {\n this.selectedItems.update(current => {\n const existing = current ?? [];\n const clicked = items[0];\n\n const alreadySelected = existing.some(i => i?.id === clicked.id);\n if (alreadySelected) {\n return existing.filter(i => i?.id !== clicked.id);\n } else {\n return [...existing, clicked];\n }\n });\n } else {\n this.selectedItems.set([items[0]]);\n this.isOpen.set(false);\n this.searchQuery.set(null);\n }\n\n if(isPreselectedIds) return;\n this.touched.set(true)\n this.emitChangeValue(this.selectedItems(), false);\n }\n\n clearSelection(): void {\n if (this.disabledOrReadonly()) return;\n\n this.selectedItems.set([]);\n this.selectionClearedEv.emit();\n }\n\n inSelectItems(item?: DropdownItem<T>): boolean {\n if (!item) return false;\n return this.selectedItems()?.some(i => i?.id === item.id) ?? false;\n }\n\n trackByFn(_index: number, item: DropdownItem<T>): T {\n return item.id;\n }\n\n /** Forces the input to trigger a manual change event */\n public forceChange(fromForce: boolean = true): void {\n // Applies the same logic as natural change.\n this.touched.set(true);\n this.emitChangeValue(this.selectedItems(), fromForce);\n }\n\n emitChangeValue(value: DropdownItem<T>[], fromForce: boolean = true): void {\n const valid = this.error().length === 0;\n this.selectedItemsEv.emit({ value, valid, fromForce });\n }\n}","<!-- ========================= Label & Hint ========================= -->\n<div class=\"zs:relative zs:w-full\">\n <ZS-label [class]=\"(label() || hint()) ? 'zs:mb-1' : ''\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [required]=\"required()\"\n [hintId]=\"Id() + '-hint'\"\n [for]=\"Id() + '-trigger'\">\n </ZS-label>\n\n <!-- ========================= Trigger Button (Combobox) ========================= -->\n <button\n id=\"{{ Id() + '-trigger' }}\"\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"Id() + '-options'\"\n [attr.aria-describedby]=\"hint() ? Id() + '-hint' : null\"\n [disabled]=\"disabledOrReadonly()\"\n [class]=\"containerClasses()\"\n (click)=\"toggleDropdown()\">\n\n @if (selectedItems().length) {\n @if (!multiple()) {\n <!-- Single Selection -->\n <span class=\"zs:truncate\">{{ selectedItems()[0].name }}</span>\n } @else {\n <!-- Multiple Selection -->\n <div class=\"zs:flex zs:flex-wrap zs:gap-2 zs:items-center zs:max-w-full\">\n @for (item of selectedItems().slice(0, 6); track item.id) {\n <span\n [ngClass]=\"showItemsClass()\"\n class=\"zs:flex zs:gap-1 zs:justify-center zs:items-center zs:text-gray-900 \n zs:dark:text-gray-100 zs:pl-3 zs:pr-2 zs:py-1.5 zs:rounded-full zs:text-sm \n zs:max-w-[140px]\">\n <span class=\"zs:truncate\">{{ item.name }}</span>\n <button\n type=\"button\"\n [attr.aria-label]=\"'Remove ' + item.name\"\n class=\"zs:px-1 zs:text-gray-950 zs:hover:text-gray-600 zs:dark:text-gray-50 zs:dark:hover:text-gray-300\"\n (click)=\"selectItem([item]); $event.stopPropagation()\">\n <i class=\"fas fa-times text-xs\"></i>\n </button>\n </span>\n }\n\n @if (selectedItems().length > 6) {\n <!-- +More Indicator -->\n <span class=\"zs:text-gray-500 zs:text-sm\">\n +{{ selectedItems().length - 6 }} more\n </span>\n }\n </div>\n }\n } @else {\n <!-- Placeholder -->\n <span>{{ placeholder() }}</span>\n }\n\n @if (!disabledOrReadonly()) {\n <!-- Dropdown Toggle Icon -->\n <i class=\"fas zs:ml-2\"\n [ngClass]=\"[isOpen() ? 'fa-chevron-up' : 'fa-chevron-down']\"\n >\n </i>\n }\n </button>\n\n <!-- ========================= Dropdown Menu ========================= -->\n @if (isOpen()) {\n <div\n id=\"{{ Id() + '-options' }}\"\n role=\"listbox\"\n [attr.aria-multiselectable]=\"multiple() ? 'true' : null\"\n class=\"zs:absolute {{ zIndices.selectDropdown }} zs:w-full zs:mt-1 zs:rounded-lg \n zs:shadow-lg zs:dark:shadow-gray-400/30 zs:overflow-hidden zs:bg-white zs:border \n zs:border-gray-300 zs:dark:bg-gray-900 zs:dark:border-gray-600 zs:dark:text-gray-100\">\n\n @if (showSearch()) {\n <!-- Search Input -->\n <div class=\"zs:relative zs:p-2 zs:border-b zs:border-gray-200 zs:dark:border-gray-700\">\n <ZS-input\n role=\"searchbox\"\n aria-label=\"Search options\"\n [iName]=\"'ZS-select-[' + Id() + ']'\"\n type=\"search\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (searchEv)=\"searchQuery.set($event)\"\n (click)=\"$event.stopPropagation()\"\n [autofocus]=\"true\"\n [inputStyle]=\"this.error().length ? 'danger' : inputStyle()\"\n [searchDebounceDelay]=\"searchDebounceDelay()\"\n [showLoaderIconOnSearchInput]=\"showLoaderIconOnSearchInput()\">\n </ZS-input>\n </div>\n }\n\n <!-- Options List -->\n <div class=\"zs:max-h-60 zs:overflow-y-auto\">\n @for (item of filteredItems(); track trackByFn($index, item)) {\n <div\n role=\"option\"\n [attr.aria-selected]=\"inSelectItems(item)\"\n class=\"zs:px-4 zs:py-2 zs:cursor-pointer zs:flex zs:items-center zs:justify-between zs:transition-colors zs:text-gray-900 zs:dark:text-gray-100\"\n [ngClass]=\"getBgSelectClasses(inSelectItems(item))\"\n (click)=\"selectItem([item]); $event.stopPropagation()\">\n <span class=\"zs:truncate\">{{ item.name }}</span>\n @if (inSelectItems(item)) {\n <i class=\"fas fa-check zs:text-gray-950 zs:dark:text-gray-50 zs:ml-2\"></i>\n }\n </div>\n }\n\n @if (filteredItems().length === 0) {\n <!-- No Results Message -->\n <div class=\"zs:px-4 zs:py-3 zs:text-center zs:text-gray-500 zs:dark:text-gray-400\">\n {{ noResultsText() }}\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ========================= Clear Selection Button ========================= -->\n @if (selectedItems().length && showClearButton() && !disabledOrReadonly()) {\n <button\n type=\"button\"\n aria-label=\"Clear all selections\"\n [class]=\"clearClass()\"\n (click)=\"clearSelection()\">\n <i class=\"fas fa-times zs:mr-1\"></i> Clear selection\n </button>\n }\n\n <!-- ========================= Error Messages ========================= -->\n <ZS-input-errors\n [Id]=\"Id()\"\n [errors]=\"[error()]\"\n >\n </ZS-input-errors>\n</div>","import { Component, computed, input, model } from '@angular/core';\nimport { BaseColors, BaseSize, ColorMapping } from '../../palette-service';\nimport { Label } from '../label/label';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ZS-toggle',\n imports: [Label, CommonModule],\n templateUrl: './toggle.html',\n styleUrl: './toggle.css'\n})\nexport class Toggle {\n // ==============================================\n // Inputs\n // ==============================================\n readonly Id = input<string>(crypto.randomUUID());\n readonly label = input<string | null>(null);\n readonly hint = input<string | null>(null);\n readonly color = input<BaseColors>('blue');\n readonly disabled = input<boolean>(false);\n readonly isReadonly = input<boolean>(false);\n readonly icon = input<string>('')\n readonly size = input<BaseSize>('md')\n\n // ==============================================\n // Model\n // ==============================================\n readonly value = model<boolean>(false);\n\n // ==============================================\n // Computed Signals\n // ==============================================\n readonly toggleClasses = computed<string>(() => {\n const disabledClass = this.disabled() ? 'zs:opacity-60' : '';\n const interactionClass = this.disabledOrReadonly() ? 'zs:cursor-not-allowed' : '';\n\n return [\n disabledClass,\n interactionClass\n ].join(' ')\n })\n\n readonly colorClasses = (type: 'border' | 'bg' | 'text') => {\n const color = ColorMapping.get(this.color());\n if (!color) return '';\n\n return color[type]\n };\n\n readonly btnSize = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:w-16 zs:h-8',\n md: 'zs:w-20 zs:h-10',\n lg: 'zs:w-24 zs:h-12'\n }\n return sizes[this.size()];\n })\n\n readonly wrapperSize = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:size-6 zs:text-[10px]',\n md: 'zs:size-8 zs:text-sm',\n lg: 'zs:size-10 zs:text-base'\n }\n return sizes[this.size()];\n })\n\n readonly transSize = computed<string>(() => {\n const sizes: Record<BaseSize, string> = {\n sm: 'zs:translate-x-7',\n md: 'zs:translate-x-9',\n lg: 'zs:translate-x-11'\n }\n return sizes[this.size()];\n })\n\n readonly isChecked = computed<boolean>(() => this.value());\n readonly disabledOrReadonly = computed<boolean>(() => this.disabled() || this.isReadonly());\n\n // ==============================================\n // Handlers\n // ==============================================\n toggleChecked() {\n if (this.disabledOrReadonly()) return;\n this.value.update(v => !v);\n }\n\n onKeyDown(event: KeyboardEvent) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.toggleChecked();\n }\n }\n}\n","<div class=\"zs:flex zs:items-center zs:justify-start zs:w-full zs:select-none\">\n <!-- ===================== Checkbox Wrapper ===================== -->\n <div\n class=\"zs:cursor-pointer zs:leading-none\"\n >\n <!-- ===================== Hidden Input (Native for screen readers) ===================== -->\n <input\n type=\"checkbox\"\n class=\"zs:hidden\"\n [id]=\"Id()\"\n [checked]=\"isChecked()\"\n [disabled]=\"disabledOrReadonly()\"\n (change)=\"toggleChecked()\"\n />\n\n <!-- ===================== Custom Accessible Toggle ===================== -->\n <button\n (click)=\"value.set(!value())\"\n class=\"zs:relative zs:rounded-full zs:border-2 zs:flex zs:items-center zs:transition-all zs:duration-500 zs:ease-in-out zs:overflow-hidden\"\n [ngClass]=\"[\n toggleClasses(),\n colorClasses('border'),\n value() ? colorClasses('bg') : '', \n value() ? '' : 'zs:bg-gray-100 zs:dark:bg-gray-700',\n btnSize(),\n ]\"\n >\n <div\n class=\"zs:absolute zs:left-1 zs:top-1/2 zs:-translate-1/2 zs:rounded-full zs:flex zs:items-center zs:justify-center zs:transition-all zs:duration-500 zs:ease-in-out zs:shadow-md\"\n [ngClass]=\"[\n value() ? '' : colorClasses('bg'),\n value() ? colorClasses('text') : 'zs:text-gray-100 zs:dark:text-gray-300',\n value() ? 'zs:bg-gray-100 zs:dark:bg-gray-300' : '',\n wrapperSize(),\n value() ? transSize() : 'zs:translate-x-0',\n ]\"\n >\n <i [class]=\"icon()\"></i>\n </div>\n </button>\n </div>\n\n <!-- ===================== Label (ZS-label component) ===================== -->\n <ZS-label [class]=\"(label() || hint()) ? 'zs:ml-1' : ''\"\n [id]=\"Id() + '-label'\"\n [label]=\"label()\"\n [hint]=\"hint()\"\n [size]=\"size()\"\n [hintId]=\"Id() + '-hint'\"\n [for]=\"Id()\"\n ></ZS-label>\n</div>","import { Component, computed, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nexport interface PagesType {\n label: string;\n routerLink: string;\n}\n\n@Component({\n selector: 'ZS-footer',\n imports: [RouterModule],\n templateUrl: './footer.html',\n styleUrl: './footer.css',\n})\nexport class Footer {\n readonly showDefultContent = input<boolean>(true)\n readonly pages = input<PagesType[]>([]);\n}\n","<footer class=\"zs:bg-gray-700 zs:dark:bg-gray-950 zs:dark:text-gray-300 zs:text-white zs:py-8\">\n <div class=\"zs:text-center zs:flex zs:flex-col zs:gap-8\">\n <p class=\"zs:text-xs zs:sm:text-sm zs:px-6\">\n <ng-content select=\"[rights]\"></ng-content>\n\n @if(showDefultContent()) {\n ©\n <span class=\"zs:font-semibold\">2026 Ziad Ahmed Shalaby</span>.\n All rights reserved.\n }\n </p>\n\n @if(pages().length) {\n <nav class=\"zs:flex zs:flex-wrap zs:justify-center zs:items-center\n zs:gap-y-6 zs:gap-x-4 zs:sm:gap-x-6 zs:md:gap-x-8 zs:lg:gap-x-10 zs:w-full\">\n @for (page of pages(); track $index) {\n <a class=\"zs:text-[10px] zs:sm:text-xs \n zs:hover:underline zs:text-center zs:min-w-30\" \n [routerLink]=\"page.routerLink\">\n {{ page.label }}\n </a>\n }\n </nav>\n }\n </div>\n</footer>\n","/*\n * Public API Surface of ngx-zs-component\n */\n\nexport * from './lib/ngx-zs-component';\nexport * from './lib/ngx-zs-component/AlertFolder/alert/alert'\nexport * from './lib/ngx-zs-component/AlertFolder/alert-service/alert-service'\nexport * from './lib/ngx-zs-component/NavItemFolder/nav-item/nav-item'\nexport * from './lib/ngx-zs-component/NavItemFolder/nav-item-service/nav-item-service'\nexport * from './lib/ngx-zs-component/card/card'\nexport * from './lib/ngx-zs-component/carousel/carousel'\nexport * from './lib/ngx-zs-component/connection/connection'\nexport * from './lib/ngx-zs-component/extractor-service/extractor-service'\nexport * from './lib/ngx-zs-component/form-service/form-service'\nexport * from './lib/ngx-zs-component/modal/modal'\nexport * from './lib/ngx-zs-component/navbar/navbar'\nexport * from './lib/ngx-zs-component/page404/page404'\nexport * from './lib/ngx-zs-component/pagination/pagination'\nexport * from './lib/ngx-zs-component/palette-service'\nexport * from './lib/ngx-zs-component/scroll-to-top/scroll-to-top'\nexport * from './lib/ngx-zs-component/spinner/spinner'\nexport * from './lib/ngx-zs-component/theme-toggle/theme-toggle'\nexport * from './lib/ngx-zs-component/FormCompFolder/button/button'\nexport * from './lib/ngx-zs-component/FormCompFolder/checkbox/checkbox'\nexport * from './lib/ngx-zs-component/FormCompFolder/file/file'\nexport * from './lib/ngx-zs-component/FormCompFolder/input/input'\nexport * from './lib/ngx-zs-component/FormCompFolder/input-errors/input-errors'\nexport * from './lib/ngx-zs-component/FormCompFolder/label/label'\nexport * from './lib/ngx-zs-component/FormCompFolder/range/range'\nexport * from './lib/ngx-zs-component/FormCompFolder/select/select'\nexport * from './lib/ngx-zs-component/FormCompFolder/toggle/toggle'\nexport * from './lib/ngx-zs-component/footer/footer'","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":"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"}
|