ngx-pk-ui 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-pk-ui.mjs","sources":["../../../projects/ngx-pk-ui/src/lib/pk-tabs/pk-tab.ts","../../../projects/ngx-pk-ui/src/lib/pk-tabs/pk-tabs.ts","../../../projects/ngx-pk-ui/src/lib/pk-tabs/pk-tabs.html","../../../projects/ngx-pk-ui/src/lib/pk-toastr/pk-toastr.service.ts","../../../projects/ngx-pk-ui/src/lib/pk-toastr/pk-toastr.ts","../../../projects/ngx-pk-ui/src/lib/pk-toastr/pk-toastr.html","../../../projects/ngx-pk-ui/src/lib/pk-alert/pk-alert.service.ts","../../../projects/ngx-pk-ui/src/lib/pk-alert/pk-alert.ts","../../../projects/ngx-pk-ui/src/lib/pk-alert/pk-alert.html","../../../projects/ngx-pk-ui/src/lib/pk-modal/pk-modal-header.ts","../../../projects/ngx-pk-ui/src/lib/pk-modal/pk-modal-body.ts","../../../projects/ngx-pk-ui/src/lib/pk-modal/pk-modal-footer.ts","../../../projects/ngx-pk-ui/src/lib/pk-modal/pk-modal.ts","../../../projects/ngx-pk-ui/src/lib/pk-modal/pk-modal.html","../../../projects/ngx-pk-ui/src/lib/pk-icon/pk-icon.model.ts","../../../projects/ngx-pk-ui/src/lib/pk-icon/pk-icon.ts","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-dg-column.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-dg-page-size.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-dg-page-size.component.html","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-dg-pagination.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-dg-pagination.component.html","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-dg-row.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-dg-row.component.html","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-dg-row-detail.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-datagrid.directives.ts","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-datagrid.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-datagrid.component.html","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-dg-cell.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-dg-footer.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-datagrid/pk-datagrid.module.ts","../../../projects/ngx-pk-ui/src/lib/pk-datepicker/datepicker.service.ts","../../../projects/ngx-pk-ui/src/lib/pk-datepicker/holiday.service.ts","../../../projects/ngx-pk-ui/src/lib/pk-datepicker/pk-datepicker.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-datepicker/pk-datepicker.component.html","../../../projects/ngx-pk-ui/src/lib/pk-progress/pk-progress.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-treeview/pk-treeview-node.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-treeview/pk-treeview.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-treeview/pk-treeview.module.ts","../../../projects/ngx-pk-ui/src/lib/pk-select/pk-select.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-autocomplete/pk-autocomplete.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-typeahead/pk-typeahead.component.ts","../../../projects/ngx-pk-ui/src/lib/pk-typeahead/pk-typeahead.component.html","../../../projects/ngx-pk-ui/src/public-api.ts","../../../projects/ngx-pk-ui/src/ngx-pk-ui.ts"],"sourcesContent":["import { Component, input, TemplateRef, viewChild } from '@angular/core';\n\n@Component({\n selector: 'pk-tab',\n template: `<ng-template #content><ng-content /></ng-template>`,\n})\nexport class PkTab {\n label = input.required<string>();\n disabled = input<boolean>(false);\n content = viewChild.required<TemplateRef<unknown>>('content');\n}\n","import {\n AfterContentInit,\n Component,\n contentChildren,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { PkTab } from './pk-tab';\n\n@Component({\n selector: 'pk-tabs',\n imports: [NgTemplateOutlet],\n templateUrl: './pk-tabs.html',\n styleUrl: './pk-tabs.css',\n})\nexport class PkTabs implements AfterContentInit {\n tabs = contentChildren(PkTab);\n activeIndex = signal(0);\n\n ngAfterContentInit(): void {\n const firstEnabled = this.tabs().findIndex((t) => !t.disabled());\n this.activeIndex.set(firstEnabled >= 0 ? firstEnabled : 0);\n }\n\n selectTab(index: number): void {\n if (!this.tabs()[index]?.disabled()) {\n this.activeIndex.set(index);\n }\n }\n}\n","<div class=\"pk-tabs\">\n <ul class=\"pk-tabs__nav\" role=\"tablist\">\n @for (tab of tabs(); track $index) {\n <li\n class=\"pk-tabs__nav-item\"\n [class.pk-tabs__nav-item--active]=\"activeIndex() === $index\"\n [class.pk-tabs__nav-item--disabled]=\"tab.disabled()\"\n role=\"tab\"\n [attr.aria-selected]=\"activeIndex() === $index\"\n [attr.aria-disabled]=\"tab.disabled()\"\n (click)=\"selectTab($index)\"\n (keydown.enter)=\"selectTab($index)\"\n (keydown.space)=\"selectTab($index)\"\n tabindex=\"{{ tab.disabled() ? -1 : 0 }}\"\n >\n {{ tab.label() }}\n </li>\n }\n </ul>\n <div class=\"pk-tabs__content\" role=\"tabpanel\">\n @if (tabs()[activeIndex()]) {\n <ng-container *ngTemplateOutlet=\"tabs()[activeIndex()].content()\" />\n }\n </div>\n</div>\n","import { Injectable, signal } from '@angular/core';\nimport { Toast, ToastType } from './pk-toastr.model';\n\n@Injectable({ providedIn: 'root' })\nexport class PkToastrService {\n private _counter = 0;\n toasts = signal<Toast[]>([]);\n\n show(type: ToastType, message: string, title?: string, duration = 4000): void {\n const toast: Toast = { id: ++this._counter, type, message, title, duration };\n this.toasts.update((list) => [...list, toast]);\n if (duration > 0) {\n setTimeout(() => this.dismiss(toast.id), duration);\n }\n }\n\n success(message: string, title?: string, duration?: number): void {\n this.show('success', message, title, duration);\n }\n\n error(message: string, title?: string, duration?: number): void {\n this.show('error', message, title, duration);\n }\n\n info(message: string, title?: string, duration?: number): void {\n this.show('info', message, title, duration);\n }\n\n warning(message: string, title?: string, duration?: number): void {\n this.show('warning', message, title, duration);\n }\n\n dismiss(id: number): void {\n this.toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n clear(): void {\n this.toasts.set([]);\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { PkToastrService } from './pk-toastr.service';\n\n@Component({\n selector: 'pk-toastr',\n templateUrl: './pk-toastr.html',\n styleUrl: './pk-toastr.css',\n})\nexport class PkToastr {\n toastr = inject(PkToastrService);\n}\n","<div class=\"pk-toastr-container\" aria-live=\"polite\" aria-atomic=\"false\">\n @for (toast of toastr.toasts(); track toast.id) {\n <div\n class=\"pk-toast pk-toast--{{ toast.type }}\"\n role=\"alert\"\n >\n @if (toast.title) {\n <strong class=\"pk-toast__title\">{{ toast.title }}</strong>\n }\n <span class=\"pk-toast__message\">{{ toast.message }}</span>\n <button\n class=\"pk-toast__close\"\n aria-label=\"Dismiss\"\n (click)=\"toastr.dismiss(toast.id)\"\n >✕</button>\n </div>\n }\n</div>\n","import { Injectable, signal } from '@angular/core';\nimport {\n AlertConfig,\n AlertInputType,\n AlertResult,\n AlertSlot,\n} from './pk-alert.model';\n\n@Injectable({ providedIn: 'root' })\nexport class PkAlertService {\n /** The component reads this signal to know what (if anything) to display. */\n readonly slot = signal<AlertSlot | null>(null);\n\n private _open(config: AlertConfig): Promise<AlertResult> {\n return new Promise<AlertResult>((resolve) => {\n this.slot.set({ config, resolve });\n });\n }\n\n success(message: string, title = 'Success'): Promise<void> {\n return this._open({ type: 'success', title, message }) as Promise<void>;\n }\n\n warn(message: string, title = 'Warning'): Promise<void> {\n return this._open({ type: 'warn', title, message }) as Promise<void>;\n }\n\n error(message: string, title = 'Error'): Promise<void> {\n return this._open({ type: 'error', title, message }) as Promise<void>;\n }\n\n confirm(\n message: string,\n title = 'Confirm',\n confirmLabel = 'Yes',\n cancelLabel = 'No',\n ): Promise<boolean> {\n return this._open({\n type: 'confirm',\n title,\n message,\n confirmLabel,\n cancelLabel,\n }) as Promise<boolean>;\n }\n\n input(\n message: string,\n inputType: AlertInputType = 'string',\n title = 'Input',\n defaultValue?: string | number | boolean | null,\n ): Promise<string | number | boolean | null> {\n return this._open({\n type: 'input',\n title,\n message,\n inputType,\n defaultValue,\n }) as Promise<string | number | boolean | null>;\n }\n\n /** Called by the component after the user makes a choice. */\n _resolve(value: AlertResult): void {\n const current = this.slot();\n if (current) {\n this.slot.set(null);\n current.resolve(value);\n }\n }\n}\n","import { Component, inject, signal, effect } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { PkAlertService } from './pk-alert.service';\nimport { AlertInputType } from './pk-alert.model';\n\n@Component({\n selector: 'pk-alert',\n imports: [FormsModule],\n templateUrl: './pk-alert.html',\n styleUrl: './pk-alert.css',\n})\nexport class PkAlert {\n svc = inject(PkAlertService);\n\n /** Local copy of input value while the dialog is open */\n inputValue = signal<string | number | boolean | null>(null);\n\n constructor() {\n effect(() => {\n const slot = this.svc.slot();\n if (slot) {\n const def = slot.config.defaultValue;\n this.inputValue.set(def !== undefined ? def : this._defaultFor(slot.config.inputType));\n }\n });\n }\n\n confirm(): void {\n const slot = this.svc.slot();\n if (!slot) return;\n const type = slot.config.type;\n if (type === 'confirm') {\n this.svc._resolve(true);\n } else if (type === 'input') {\n this.svc._resolve(this.inputValue());\n } else {\n this.svc._resolve(undefined);\n }\n }\n\n cancel(): void {\n const slot = this.svc.slot();\n if (!slot) return;\n const type = slot.config.type;\n this.svc._resolve(type === 'confirm' ? false : null);\n }\n\n private _defaultFor(inputType: AlertInputType | undefined): string | number | boolean | null {\n switch (inputType) {\n case 'number': return 0;\n case 'boolean': return false;\n case 'date': return '';\n default: return '';\n }\n }\n}\n","@if (svc.slot(); as slot) {\n <div class=\"pk-alert-backdrop\" (click)=\"cancel()\">\n <div class=\"pk-alert-card pk-alert-card--{{ slot.config.type }}\"\n role=\"dialog\"\n aria-modal=\"true\"\n (click)=\"$event.stopPropagation()\">\n\n <div class=\"pk-alert-icon\">\n @switch (slot.config.type) {\n @case ('success') { ✅ }\n @case ('warn') { ⚠️ }\n @case ('error') { ❌ }\n @case ('confirm') { 🤔 }\n @case ('input') { ✏️ }\n }\n </div>\n\n @if (slot.config.title) {\n <h2 class=\"pk-alert-title\">{{ slot.config.title }}</h2>\n }\n\n <p class=\"pk-alert-message\">{{ slot.config.message }}</p>\n\n @if (slot.config.type === 'input') {\n <div class=\"pk-alert-input-wrap\">\n @switch (slot.config.inputType) {\n @case ('boolean') {\n <label class=\"pk-alert-toggle\">\n <input type=\"checkbox\" [checked]=\"!!inputValue()\"\n (change)=\"inputValue.set($any($event.target).checked)\" />\n <span>{{ inputValue() ? 'Yes' : 'No' }}</span>\n </label>\n }\n @case ('number') {\n <input class=\"pk-alert-field\" type=\"number\"\n [value]=\"inputValue()\"\n (input)=\"inputValue.set(+$any($event.target).value)\"\n autofocus />\n }\n @case ('date') {\n <input class=\"pk-alert-field\" type=\"date\"\n [value]=\"inputValue()\"\n (input)=\"inputValue.set($any($event.target).value)\"\n autofocus />\n }\n @default {\n <input class=\"pk-alert-field\" type=\"text\"\n [value]=\"inputValue()\"\n (input)=\"inputValue.set($any($event.target).value)\"\n autofocus />\n }\n }\n </div>\n }\n\n <div class=\"pk-alert-actions\">\n @if (slot.config.type === 'confirm' || slot.config.type === 'input') {\n <button class=\"pk-alert-btn pk-alert-btn--cancel\" (click)=\"cancel()\">\n {{ slot.config.cancelLabel ?? 'Cancel' }}\n </button>\n }\n <button class=\"pk-alert-btn pk-alert-btn--confirm pk-alert-btn--{{ slot.config.type }}\"\n (click)=\"confirm()\">\n {{ slot.config.confirmLabel ?? 'OK' }}\n </button>\n </div>\n </div>\n </div>\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pk-modal-header',\n standalone: true,\n template: `<ng-content />`,\n styles: [`\n :host {\n display: block;\n padding: 16px 48px 16px 20px;\n border-bottom: 1px solid #e0e0e0;\n font-size: 17px;\n font-weight: 600;\n color: #1a1a2e;\n line-height: 1.4;\n }\n `],\n})\nexport class PkModalHeader {}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pk-modal-body',\n standalone: true,\n template: `<ng-content />`,\n styles: [`\n :host {\n display: block;\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n color: #333;\n line-height: 1.6;\n font-size: 14px;\n }\n `],\n})\nexport class PkModalBody {}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pk-modal-footer',\n standalone: true,\n template: `<ng-content />`,\n styles: [`\n :host {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid #e0e0e0;\n background: #f9f9f9;\n border-bottom-left-radius: 10px;\n border-bottom-right-radius: 10px;\n }\n `],\n})\nexport class PkModalFooter {}\n","import { Component, computed, input, output } from '@angular/core';\nimport { NgStyle } from '@angular/common';\nimport type { PkModalSize, PkModalTheme } from './pk-modal.model';\n\n@Component({\n selector: 'pk-modal',\n imports: [NgStyle],\n templateUrl: './pk-modal.html',\n styleUrl: './pk-modal.css',\n})\nexport class PkModal {\n openModal = input<boolean>(false);\n customStyle = input<Record<string, string> | null>(null);\n customClass = input<string | null>(null);\n blur = input<boolean>(true);\n size = input<PkModalSize>('md');\n theme = input<PkModalTheme>('white');\n closeAny = input<boolean>(false);\n closeMarker = input<boolean>(true);\n\n onClose = output<void>();\n\n readonly dialogClass = computed(() => {\n const classes = [\n 'pk-modal-dialog',\n `pk-modal-dialog--${this.size()}`,\n `pk-modal-dialog--theme-${this.theme()}`,\n ];\n const custom = this.customClass();\n if (custom) classes.push(custom);\n return classes.join(' ');\n });\n\n close(): void {\n this.onClose.emit();\n }\n\n onOverlayClick(): void {\n if (this.closeAny()) {\n this.close();\n }\n }\n}\n","@if (openModal()) {\n <div\n class=\"pk-modal-overlay\"\n [class.pk-modal-overlay--blur]=\"blur()\"\n (click)=\"onOverlayClick()\"\n >\n <div\n [class]=\"dialogClass()\"\n [ngStyle]=\"customStyle()\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (closeMarker()) {\n <button\n class=\"pk-modal-close-btn\"\n type=\"button\"\n aria-label=\"Close modal\"\n (click)=\"close()\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n\n <ng-content select=\"pk-modal-header\" />\n <ng-content select=\"pk-modal-body\" />\n <ng-content select=\"pk-modal-footer\" />\n <!-- fallback for unslotted content -->\n <ng-content />\n </div>\n </div>\n}\n","export type PkIconName =\n | 'search' | 'menu' | 'user' | 'users' | 'profile' | 'close' | 'sort'\n | 'login' | 'logout' | 'map' | 'map-point' | 'folder-close' | 'folder-open'\n | 'document' | 'report' | 'chart-pie' | 'chart-bar' | 'dashboard' | 'database'\n | 'cog' | 'setting' | 'email' | 'upload' | 'download' | 'export' | 'import'\n | 'csv' | 'xls' | 'pdf' | 'text' | 'link' | 'unlink' | 'reload' | 'phone'\n | 'check-mark' | 'check-mark-circle' | 'shield' | 'server' | 'eye' | 'eye-off'\n | 'plus' | 'pencil' | 'save' | 'trash' | 'list' | 'clock' | 'calendar' | 'venn'\n | 'ambulance' | 'car' | 'car-crash' | 'bed' | 'xray' | 'lab' | 'print'\n | 'time' | 'wait' | 'success' | 'warning' | 'error' | 'question'\n | 'youtube' | 'facebook' | 'line' | 'telegram' | 'wechat' | 'linkedin';\n\nexport type PkIconSet = 'pk' | 'material-symbols';\n\nexport type PkMaterialSymbolVariant = 'outlined' | 'rounded' | 'sharp';\n\nexport type PkMaterialSymbolWeight = 100 | 200 | 300 | 400 | 500 | 600 | 700;\n\nexport type PkMaterialSymbolGrade = -25 | 0 | 200;\n\nexport type PkMaterialSymbolOpticalSize = 20 | 24 | 40 | 48;\n\nexport const PK_ICONS: Record<PkIconName, string> = {\n\n // ── Navigation & UI ──────────────────────────────────────────────────────\n 'search': `<circle cx=\"11\" cy=\"11\" r=\"8\"/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/>`,\n 'menu': `<line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"/><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"/><line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"/>`,\n 'close': `<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>`,\n 'sort': `<line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"/><line x1=\"6\" y1=\"12\" x2=\"18\" y2=\"12\"/><line x1=\"9\" y1=\"18\" x2=\"15\" y2=\"18\"/>`,\n 'plus': `<line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/>`,\n 'list': `<line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"/><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"/><line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"/><line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"/><line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"/><line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"/>`,\n 'reload': `<polyline points=\"1 4 1 10 7 10\"/><polyline points=\"23 20 23 14 17 14\"/><path d=\"M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4-4.64 4.36A9 9 0 0 1 3.51 15\"/>`,\n\n // ── Users & Auth ─────────────────────────────────────────────────────────\n 'user': `<path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>`,\n 'users': `<path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"/>`,\n 'profile': `<rect x=\"2\" y=\"3\" width=\"20\" height=\"18\" rx=\"2\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/><path d=\"M7 20v-1a5 5 0 0 1 10 0v1\"/>`,\n 'login': `<path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"/><polyline points=\"10 17 15 12 10 7\"/><line x1=\"15\" y1=\"12\" x2=\"3\" y2=\"12\"/>`,\n 'logout': `<path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/><polyline points=\"16 17 21 12 16 7\"/><line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\"/>`,\n\n // ── Location ─────────────────────────────────────────────────────────────\n 'map': `<polygon points=\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\"/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"18\"/><line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"22\"/>`,\n 'map-point': `<path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/>`,\n\n // ── Files & Documents ────────────────────────────────────────────────────\n 'folder-close': `<path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"/>`,\n 'folder-open': `<path d=\"M5 19a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v1\"/><path d=\"M3 11h18l-1.5 8H4.5z\"/>`,\n 'document': `<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/>`,\n 'report': `<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/><line x1=\"9\" y1=\"15\" x2=\"9\" y2=\"18\"/><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"18\"/><line x1=\"15\" y1=\"13\" x2=\"15\" y2=\"18\"/>`,\n 'csv': `<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"/><line x1=\"8\" y1=\"15\" x2=\"16\" y2=\"15\"/><line x1=\"8\" y1=\"18\" x2=\"16\" y2=\"18\"/><line x1=\"12\" y1=\"10\" x2=\"12\" y2=\"20\"/>`,\n 'xls': `<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/><rect x=\"8\" y=\"11\" width=\"8\" height=\"7\"/><line x1=\"12\" y1=\"11\" x2=\"12\" y2=\"18\"/><line x1=\"8\" y1=\"14.5\" x2=\"16\" y2=\"14.5\"/>`,\n 'pdf': `<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"/><line x1=\"8\" y1=\"15\" x2=\"16\" y2=\"15\"/><line x1=\"8\" y1=\"18\" x2=\"12\" y2=\"18\"/>`,\n 'text': `<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/><line x1=\"8\" y1=\"11\" x2=\"16\" y2=\"11\"/><line x1=\"8\" y1=\"14\" x2=\"16\" y2=\"14\"/><line x1=\"8\" y1=\"17\" x2=\"14\" y2=\"17\"/>`,\n\n // ── Charts & Analytics ───────────────────────────────────────────────────\n 'chart-pie': `<path d=\"M21.21 15.89A10 10 0 1 1 8 2.83\"/><path d=\"M22 12A10 10 0 0 0 12 2v10z\"/>`,\n 'chart-bar': `<line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"10\"/><line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\"/><line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"14\"/><line x1=\"2\" y1=\"20\" x2=\"22\" y2=\"20\"/>`,\n 'dashboard': `<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"/>`,\n 'venn': `<circle cx=\"9\" cy=\"12\" r=\"7\"/><circle cx=\"15\" cy=\"12\" r=\"7\"/>`,\n\n // ── System & Infrastructure ──────────────────────────────────────────────\n 'database': `<ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"/><path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\"/><path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\"/>`,\n 'cog': `<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\"/>`,\n 'setting': `<line x1=\"4\" y1=\"21\" x2=\"4\" y2=\"14\"/><line x1=\"4\" y1=\"10\" x2=\"4\" y2=\"3\"/><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"12\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"3\"/><line x1=\"20\" y1=\"21\" x2=\"20\" y2=\"16\"/><line x1=\"20\" y1=\"12\" x2=\"20\" y2=\"3\"/><line x1=\"1\" y1=\"14\" x2=\"7\" y2=\"14\"/><line x1=\"9\" y1=\"8\" x2=\"15\" y2=\"8\"/><line x1=\"17\" y1=\"16\" x2=\"23\" y2=\"16\"/>`,\n 'server': `<rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"/><rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"/><line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\"/><line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\"/>`,\n 'shield': `<path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"/>`,\n\n // ── Communication ────────────────────────────────────────────────────────\n 'email': `<path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"/><polyline points=\"22,6 12,13 2,6\"/>`,\n 'phone': `<path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 12a19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 3.6 1.18h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L7.91 9a16 16 0 0 0 6 6l.92-.92a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"/>`,\n\n // ── Transfer ─────────────────────────────────────────────────────────────\n 'upload': `<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"17 8 12 3 7 8\"/><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"/>`,\n 'download': `<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"/>`,\n 'export': `<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/><line x1=\"9\" y1=\"12\" x2=\"15\" y2=\"12\"/><polyline points=\"12.5 9.5 15 12 12.5 14.5\"/>`,\n 'import': `<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/><line x1=\"15\" y1=\"12\" x2=\"9\" y2=\"12\"/><polyline points=\"11.5 9.5 9 12 11.5 14.5\"/>`,\n\n // ── Links ────────────────────────────────────────────────────────────────\n 'link': `<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/>`,\n 'unlink': `<path d=\"M18.84 12.25l1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.004 5.004 0 0 0-7.07.12l-1.72 1.71\"/><path d=\"M5.17 11.75l-1.72 1.71a5.004 5.004 0 0 0 .12 7.07 5.004 5.004 0 0 0 7.07-.12l1.71-1.71\"/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"5\"/><line x1=\"2\" y1=\"8\" x2=\"5\" y2=\"8\"/><line x1=\"16\" y1=\"19\" x2=\"16\" y2=\"22\"/><line x1=\"19\" y1=\"16\" x2=\"22\" y2=\"16\"/>`,\n\n // ── Editing & Actions ────────────────────────────────────────────────────\n 'pencil': `<path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"/><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"/>`,\n 'save': `<path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\"/><polyline points=\"17 21 17 13 7 13 7 21\"/><polyline points=\"7 3 7 8 15 8\"/>`,\n 'trash': `<polyline points=\"3 6 5 6 21 6\"/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2\"/><line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"/><line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"/>`,\n 'eye': `<path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>`,\n 'eye-off': `<path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"/><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/>`,\n 'print': `<polyline points=\"6 9 6 2 18 2 18 9\"/><path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\"/><rect x=\"6\" y=\"14\" width=\"12\" height=\"8\"/>`,\n\n // ── Status ───────────────────────────────────────────────────────────────\n 'check-mark': `<polyline points=\"20 6 9 17 4 12\"/>`,\n 'check-mark-circle': `<circle cx=\"12\" cy=\"12\" r=\"10\"/><polyline points=\"9 12 11 14 15 10\"/>`,\n 'success': `<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M9 12l2 2 4-4\"/>`,\n 'warning': `<path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>`,\n 'error': `<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"/><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"/>`,\n 'question': `<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>`,\n\n // ── Time ─────────────────────────────────────────────────────────────────\n 'clock': `<circle cx=\"12\" cy=\"12\" r=\"10\"/><polyline points=\"12 6 12 12 16 14\"/>`,\n 'calendar': `<rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"/>`,\n 'time': `<circle cx=\"12\" cy=\"13\" r=\"8\"/><polyline points=\"12 9 12 13 15 13\"/><line x1=\"9\" y1=\"3\" x2=\"15\" y2=\"3\"/><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"5\"/>`,\n 'wait': `<path d=\"M5 22h14M5 2h14M17 2v4l-5 4 5 4v4H7v-4l5-4-5-4V2\"/>`,\n\n // ── Medical & Transport ──────────────────────────────────────────────────\n 'ambulance': `<rect x=\"2\" y=\"7\" width=\"14\" height=\"10\" rx=\"1\"/><path d=\"M16 10l5 1v5h-5\"/><circle cx=\"6\" cy=\"17\" r=\"2\"/><circle cx=\"17\" cy=\"17\" r=\"2\"/><path d=\"M6 10h4M8 8v4\"/>`,\n 'car': `<rect x=\"2\" y=\"10\" width=\"20\" height=\"7\" rx=\"2\"/><path d=\"M6 10l2-4h8l2 4\"/><circle cx=\"6.5\" cy=\"17\" r=\"1.5\"/><circle cx=\"17.5\" cy=\"17\" r=\"1.5\"/>`,\n 'car-crash': `<rect x=\"2\" y=\"10\" width=\"14\" height=\"7\" rx=\"2\"/><path d=\"M5 10l2-4h6l2 4\"/><circle cx=\"5.5\" cy=\"17\" r=\"1.5\"/><circle cx=\"12.5\" cy=\"17\" r=\"1.5\"/><line x1=\"19\" y1=\"4\" x2=\"23\" y2=\"8\"/><line x1=\"23\" y1=\"4\" x2=\"19\" y2=\"8\"/>`,\n 'bed': `<path d=\"M2 4v16\"/><path d=\"M2 8h18a2 2 0 0 1 2 2v4H2\"/><path d=\"M2 17h20\"/><circle cx=\"6\" cy=\"8\" r=\"2\"/>`,\n 'xray': `<rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\"/><line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"18\"/><path d=\"M9 8c0 0 3 2 3 4s-3 4-3 4\"/><path d=\"M15 8c0 0-3 2-3 4s3 4 3 4\"/>`,\n 'lab': `<path d=\"M9 3h6\"/><path d=\"M9 3v7l-5 9a1 1 0 0 0 .9 1.5h12.2a1 1 0 0 0 .9-1.5L15 10V3\"/><circle cx=\"11\" cy=\"16\" r=\"1\"/>`,\n\n // ── Social ───────────────────────────────────────────────────────────────\n 'youtube': `<path d=\"M22.54 6.42a2.78 2.78 0 0 0-1.95-1.95C18.88 4 12 4 12 4s-6.88 0-8.59.47a2.78 2.78 0 0 0-1.95 1.95A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.41 19.1C5.12 19.56 12 19.56 12 19.56s6.88 0 8.59-.46a2.78 2.78 0 0 0 1.95-1.95 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.48z\"/><polygon points=\"9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02\"/>`,\n 'facebook': `<path d=\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\"/>`,\n 'line': `<path d=\"M20 12c0-4.4-3.58-8-8-8S4 7.6 4 12c0 3.74 2.7 6.9 6.41 7.6.25.05.59.16.68.36.08.18.05.47.02.66l-.11.67c-.03.2-.17.8.64.43 4.8-2.57 7.36-6.23 7.36-9.72z\"/><line x1=\"9\" y1=\"11\" x2=\"9\" y2=\"13\"/><line x1=\"11.25\" y1=\"11\" x2=\"11.25\" y2=\"13\"/><line x1=\"13.5\" y1=\"11\" x2=\"13.5\" y2=\"13\"/><line x1=\"15\" y1=\"11\" x2=\"15\" y2=\"13\"/>`,\n 'telegram': `<line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"/><polygon points=\"22 2 15 22 11 13 2 9 22 2\"/>`,\n 'wechat': `<path d=\"M9 3C5.1 3 2 5.9 2 9.5c0 2 1 3.8 2.6 5l-.6 2 2.4-1.1c.8.3 1.7.5 2.6.5 4.4 0 7-2.9 7-6.4C16 5.9 12.9 3 9 3z\"/><path d=\"M16 9.2c.5-.1 1-.1 1.5-.1C21.1 9.1 24 11.6 24 14.7c0 1.5-.7 2.9-1.9 3.9l.5 1.8-2-1c-.6.2-1.3.3-2 .3-3 0-5.5-2-5.5-4.5 0-.4.1-.8.2-1.2\"/>`,\n 'linkedin': `<path d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"/><rect x=\"2\" y=\"9\" width=\"4\" height=\"12\"/><circle cx=\"4\" cy=\"4\" r=\"2\"/>`,\n};\n","import { Component, computed, inject, input } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport {\n PK_ICONS,\n PkIconName,\n PkIconSet,\n PkMaterialSymbolGrade,\n PkMaterialSymbolOpticalSize,\n PkMaterialSymbolVariant,\n PkMaterialSymbolWeight,\n} from './pk-icon.model';\n\n@Component({\n selector: 'pk-icon',\n template: `\n @if (iconSet() === 'material-symbols') {\n <span\n class=\"pk-material-symbol\"\n [class.material-symbols-outlined]=\"materialVariantClass() === 'material-symbols-outlined'\"\n [class.material-symbols-rounded]=\"materialVariantClass() === 'material-symbols-rounded'\"\n [class.material-symbols-sharp]=\"materialVariantClass() === 'material-symbols-sharp'\"\n [style.font-size.px]=\"size()\"\n [style.color]=\"color()\"\n [style.font-variation-settings]=\"materialVariationSettings()\"\n >{{ name() }}</span>\n } @else {\n <span [innerHTML]=\"svgHtml()\"></span>\n }\n `,\n styleUrl: './pk-icon.css',\n})\nexport class PkIcon {\n name = input.required<PkIconName | string>();\n iconSet = input<PkIconSet>('pk');\n size = input<number>(15);\n color = input<string>('currentColor');\n fillColor = input<string>('none');\n viewBox = input<string>('0 0 24 24');\n strokeWidth = input<number>(2);\n\n // Material Symbols specific controls\n variant = input<PkMaterialSymbolVariant>('outlined');\n fill = input<0 | 1>(0);\n weight = input<PkMaterialSymbolWeight>(400);\n grade = input<PkMaterialSymbolGrade>(0);\n opticalSize = input<PkMaterialSymbolOpticalSize>(24);\n\n private sanitizer = inject(DomSanitizer);\n\n svgHtml = computed((): SafeHtml => {\n const paths = PK_ICONS[this.name() as PkIconName] ?? '';\n const svg =\n `<svg xmlns=\"http://www.w3.org/2000/svg\"` +\n ` width=\"${this.size()}\" height=\"${this.size()}\"` +\n ` viewBox=\"${this.viewBox()}\"` +\n ` stroke=\"${this.color()}\"` +\n ` fill=\"${this.fillColor()}\"` +\n ` stroke-width=\"${this.strokeWidth()}\"` +\n ` stroke-linecap=\"round\" stroke-linejoin=\"round\">` +\n paths +\n `</svg>`;\n return this.sanitizer.bypassSecurityTrustHtml(svg);\n });\n\n materialVariantClass = computed((): string => {\n if (this.variant() === 'rounded') {\n return 'material-symbols-rounded';\n }\n if (this.variant() === 'sharp') {\n return 'material-symbols-sharp';\n }\n return 'material-symbols-outlined';\n });\n\n materialVariationSettings = computed((): string => {\n return `'FILL' ${this.fill()}, 'wght' ${this.weight()}, 'GRAD' ${this.grade()}, 'opsz' ${this.opticalSize()}`;\n });\n}\n","import { Component, Input, ElementRef, AfterViewInit } from '@angular/core';\n\n@Component({\n selector: 'pk-dg-column',\n template: '<ng-content></ng-content>',\n standalone: false,\n host: {\n 'style': 'display: none'\n }\n})\nexport class PkDgColumnComponent implements AfterViewInit {\n @Input() pkDgField?: string;\n @Input() pkDgFilterKey?: string;\n @Input('style.width.px') widthPx?: number;\n \n width?: string;\n headerText: string = '';\n\n constructor(private el: ElementRef) {}\n\n ngAfterViewInit() {\n // Extract text content for header\n const nativeElement = this.el.nativeElement;\n this.headerText = nativeElement.textContent?.trim() || '';\n\n // @Input('style.width.px') is bypassed by Angular's style binding pipeline —\n // read from the host element's actual inline style as the reliable source\n if (!this.widthPx) {\n const styleWidth = nativeElement.style.width as string;\n if (styleWidth && styleWidth.endsWith('px')) {\n this.widthPx = parseInt(styleWidth, 10);\n }\n }\n }\n}\n","import { Component, Input, ChangeDetectorRef } from '@angular/core';\nimport { PkDgPaginationComponent } from './pk-dg-pagination.component';\n\n@Component({\n selector: 'pk-dg-page-size',\n templateUrl: './pk-dg-page-size.component.html',\n styleUrls: ['./pk-dg-page-size.component.scss'],\n standalone: false\n})\nexport class PkDgPageSizeComponent {\n @Input() pkPageSizeOptions: number[] = [10, 20, 50, 100];\n\n pagination: PkDgPaginationComponent | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n setPagination(p: PkDgPaginationComponent) {\n this.pagination = p;\n this.cdr.detectChanges();\n }\n\n get currentSize(): number {\n return this.pagination?.pkDgPageSize ?? this.pkPageSizeOptions[0];\n }\n\n onChange(event: Event) {\n const value = +(event.target as HTMLSelectElement).value;\n this.pagination?.onPageSizeChange(value);\n }\n}\n","<span class=\"pk-dg-page-size\">\n <ng-content></ng-content>\n <select (change)=\"onChange($event)\">\n @for (opt of pkPageSizeOptions; track opt) {\n <option [value]=\"opt\" [selected]=\"opt === currentSize\">{{ opt }}</option>\n }\n </select>\n</span>\n","import { Component, Input, Output, EventEmitter, OnInit, ContentChild, AfterContentInit } from '@angular/core';\nimport { PkDgPageSizeComponent } from './pk-dg-page-size.component';\n\n@Component({\n selector: 'pk-dg-pagination',\n templateUrl: './pk-dg-pagination.component.html',\n styleUrls: ['./pk-dg-pagination.component.scss'],\n standalone: false\n})\nexport class PkDgPaginationComponent implements OnInit, AfterContentInit {\n @ContentChild(PkDgPageSizeComponent) pageSize?: PkDgPageSizeComponent;\n\n @Input() pkDgPageSize: number = 10;\n @Input() totalItems: number = 0;\n \n @Output() pkDgPageChange = new EventEmitter<number>();\n @Output() pkDgPageSizeChange = new EventEmitter<number>();\n \n currentPage: number = 1;\n firstItem: number = 0;\n lastItem: number = 0;\n \n ngOnInit() {\n this.updatePagination();\n }\n\n ngAfterContentInit() {\n if (this.pageSize) {\n this.pageSize.setPagination(this);\n }\n }\n \n ngOnChanges() {\n this.updatePagination();\n }\n \n updatePagination() {\n this.firstItem = (this.currentPage - 1) * this.pkDgPageSize;\n this.lastItem = Math.min(this.firstItem + this.pkDgPageSize, this.totalItems);\n }\n \n get totalPages(): number {\n return Math.ceil(this.totalItems / this.pkDgPageSize);\n }\n \n goToPage(page: number) {\n if (page >= 1 && page <= this.totalPages) {\n this.currentPage = page;\n this.updatePagination();\n this.pkDgPageChange.emit(page);\n }\n }\n \n onPageSizeChange(size: number) {\n this.pkDgPageSize = size;\n this.currentPage = 1;\n this.updatePagination();\n this.pkDgPageSizeChange.emit(size);\n }\n \n get pages(): number[] {\n const pages: number[] = [];\n const maxVisible = 5;\n let start = Math.max(1, this.currentPage - Math.floor(maxVisible / 2));\n let end = Math.min(this.totalPages, start + maxVisible - 1);\n \n if (end - start + 1 < maxVisible) {\n start = Math.max(1, end - maxVisible + 1);\n }\n \n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n \n return pages;\n }\n}\n","<div class=\"pk-dg-pagination\">\n <div class=\"pagination-info\">\n <ng-content></ng-content>\n </div>\n \n <div class=\"pagination-controls\">\n <button \n class=\"btn btn-sm btn-link\"\n [disabled]=\"currentPage === 1\"\n (click)=\"goToPage(currentPage - 1)\">\n ‹\n </button>\n \n @for (page of pages; track page) {\n <button \n class=\"btn btn-sm\"\n [class.btn-primary]=\"page === currentPage\"\n [class.btn-link]=\"page !== currentPage\"\n (click)=\"goToPage(page)\">\n {{ page }}\n </button>\n }\n \n <button \n class=\"btn btn-sm btn-link\"\n [disabled]=\"currentPage === totalPages\"\n (click)=\"goToPage(currentPage + 1)\">\n ›\n </button>\n </div>\n</div>\n","import { Component, Input, TemplateRef, ContentChild } from '@angular/core';\n\n@Component({\n selector: 'pk-dg-row',\n templateUrl: './pk-dg-row.component.html',\n styleUrls: ['./pk-dg-row.component.scss'],\n standalone: false,\n host: {\n 'style': 'display: contents'\n }\n})\nexport class PkDgRowComponent {\n @Input() pkDgItem: any;\n \n @ContentChild('detail') detailTemplate?: TemplateRef<any>;\n \n isExpanded: boolean = false;\n hasDetail: boolean = false;\n}\n","<tr class=\"pk-dg-row\">\n @if (hasDetail) {\n <td class=\"pk-dg-expand-btn-cell\">\n <button class=\"pk-dg-expand-btn\" [class.expanded]=\"isExpanded\" (click)=\"isExpanded=!isExpanded; $event.stopPropagation()\" title=\"ขยาย/ย่อ\">\n <pk-icon\n iconSet=\"material-symbols\"\n [name]=\"isExpanded ? 'keyboard_arrow_down' : 'keyboard_arrow_right'\"\n [size]=\"16\"\n color=\"currentColor\"\n ></pk-icon>\n </button>\n </td>\n } @else {\n <td class=\"pk-dg-expand-btn-cell pk-dg-no-detail\"></td>\n }\n <ng-content></ng-content>\n</tr>\n@if (isExpanded) {\n <tr class=\"pk-dg-row-detail\">\n <td [attr.colspan]=\"999\">\n <ng-content select=\"pk-dg-row-detail\"></ng-content>\n </td>\n </tr>\n}\n","import { Component, TemplateRef, ViewChild, Host, Optional, OnInit } from '@angular/core';\nimport { PkDgRowComponent } from './pk-dg-row.component';\n\n@Component({\n selector: 'pk-dg-row-detail',\n template: '<ng-content></ng-content>',\n standalone: false,\n host: {\n 'style': 'display: contents'\n }\n})\nexport class PkDgRowDetailComponent implements OnInit {\n constructor(\n @Host() @Optional() public row?: PkDgRowComponent\n ) {}\n\n ngOnInit() {\n if (this.row) {\n this.row.hasDetail = true;\n }\n }\n}\n","import { Directive, TemplateRef, ViewContainerRef, Input, Inject, forwardRef, Host, Optional, AfterViewInit, DoCheck, OnInit } from '@angular/core';\nimport { PkDgRowComponent } from './pk-dg-row.component';\nimport { PkDatagridComponent } from './pk-datagrid.component';\n\n@Directive({\n selector: '[pkDgItems]',\n standalone: false\n})\nexport class PkDgItemsDirective implements DoCheck {\n private _items: any[] = [];\n private _lastVersion: number = -1;\n \n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef,\n @Optional() @Inject(forwardRef(() => PkDatagridComponent)) private datagrid?: PkDatagridComponent\n ) {}\n \n ngDoCheck() {\n if (this.datagrid) {\n // Use version counter to detect real changes only\n const version = this.datagrid.displayedItemsVersion;\n if (version !== this._lastVersion) {\n this._lastVersion = version;\n this.renderItems();\n }\n }\n }\n \n @Input()\n set pkDgItemsOf(items: any[]) {\n this._items = items || [];\n // Push items to parent datagrid so it can handle pagination/sorting\n if (this.datagrid) {\n this.datagrid.items = this._items;\n if (this.datagrid.pagination) {\n this.datagrid.pagination.totalItems = this._items.length;\n this.datagrid.pagination.updatePagination();\n }\n this.datagrid.updateDisplayedItems();\n }\n }\n \n private renderItems() {\n this.viewContainer.clear();\n \n const items = this.datagrid ? this.datagrid.displayedItems : this._items;\n \n if (items && items.length > 0) {\n items.forEach((item, index) => {\n this.viewContainer.createEmbeddedView(this.templateRef, {\n $implicit: item,\n index: index,\n count: items.length\n });\n });\n }\n }\n}\n\n\n@Directive({\n selector: '[pkIfExpanded]',\n standalone: false\n})\nexport class PkIfExpandedDirective {\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef,\n @Host() @Optional() private row?: PkDgRowComponent\n ) {\n // Mark row as having detail as soon as this directive is instantiated\n if (this.row) {\n this.row.hasDetail = true;\n }\n }\n \n ngAfterViewInit() {\n this.updateView();\n }\n \n ngDoCheck() {\n this.updateView();\n }\n \n private updateView() {\n if (this.row && this.row.isExpanded) {\n if (this.viewContainer.length === 0) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n } else {\n this.viewContainer.clear();\n }\n }\n}\n\n@Directive({\n selector: '[nowrap]',\n standalone: false,\n host: {\n '[style.white-space]': 'nowrap ? \"nowrap\" : \"normal\"'\n }\n})\nexport class NowrapDirective {\n nowrap: boolean = true;\n}\n","import { Component, ContentChildren, ContentChild, QueryList, AfterContentInit, AfterViewInit, OnChanges, SimpleChanges, Input, Output, EventEmitter, ChangeDetectorRef, HostListener, OnDestroy } from '@angular/core';\nimport { PkDgColumnComponent } from './pk-dg-column.component';\nimport { PkDgPaginationComponent } from './pk-dg-pagination.component';\nimport { PkDgRowDetailComponent } from './pk-dg-row-detail.component';\nimport { PkIfExpandedDirective } from './pk-datagrid.directives';\n\n@Component({\n selector: 'pk-datagrid',\n templateUrl: './pk-datagrid.component.html',\n styleUrls: ['./pk-datagrid.component.scss'],\n standalone: false\n})\nexport class PkDatagridComponent implements AfterContentInit, AfterViewInit, OnChanges, OnDestroy {\n @ContentChildren(PkDgColumnComponent) columns!: QueryList<PkDgColumnComponent>;\n @ContentChild(PkDgPaginationComponent) pagination?: PkDgPaginationComponent;\n @ContentChildren(PkDgRowDetailComponent, { descendants: true }) rowDetails!: QueryList<PkDgRowDetailComponent>;\n @ContentChildren(PkIfExpandedDirective, { descendants: true }) expandDirectives!: QueryList<PkIfExpandedDirective>;\n\n get hasExpandCol(): boolean {\n if (this.expandDirectives && this.expandDirectives.length > 0) return true;\n return this.rowDetails ? this.rowDetails.length > 0 : false;\n }\n \n @Input() pkDgLoading: boolean = false;\n @Input() items: any[] = [];\n @Input() filterValues: Record<string, string> = {};\n\n @Output() pkDgRefresh = new EventEmitter<void>();\n @Output() filterChange = new EventEmitter<{ key: string; value: string }>();\n\n displayedItems: any[] = [];\n displayedItemsVersion = 0;\n expandedRows: Set<any> = new Set();\n sortColumn: string | null = null;\n sortDirection: 'asc' | 'desc' | null = null;\n\n activeFilterCol: string | null = null;\n activeFilterHeader: string = '';\n filterPopupPos: { top: number; left: number } = { top: 0, left: 0 };\n\n // Column resize\n columnWidths: number[] = [];\n private _resizingIdx: number = -1;\n private _resizeStartX: number = 0;\n private _resizeStartWidth: number = 0;\n private _resizeMoveRef = (e: MouseEvent) => this._onResizeMove(e);\n private _resizeEndRef = () => this._onResizeEnd();\n\n get totalWidth(): number {\n const sum = this.columnWidths.reduce((acc, w) => acc + w, 0);\n return sum + (this.hasExpandCol ? 32 : 0);\n }\n\n private _initColumnWidths() {\n const cols = this.columns ? this.columns.toArray() : [];\n this.columnWidths = cols.map(c => c.widthPx ?? 120);\n }\n\n @HostListener('document:click')\n onDocumentClick() {\n this.activeFilterCol = null;\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngAfterContentInit() {\n // Listen to pagination changes first\n if (this.pagination) {\n this.pagination.pkDgPageChange.subscribe(() => this.updateDisplayedItems());\n this.pagination.pkDgPageSizeChange.subscribe(() => this.updateDisplayedItems());\n }\n \n // Update displayed items after pagination is set up\n this.updateDisplayedItems();\n }\n ngOnChanges(changes: SimpleChanges) {\n if (changes['items']) {\n this.updateDisplayedItems();\n }\n\n if (changes['filterValues']) {\n this.updateDisplayedItems();\n }\n }\n \n ngAfterViewInit() {\n // Force change detection after columns are fully initialized\n // Also re-update displayed items to ensure pagination is initialized\n setTimeout(() => {\n if (this.pagination) {\n this.pagination.totalItems = this.items.length;\n this.pagination.updatePagination();\n }\n this._initColumnWidths();\n this.updateDisplayedItems();\n }, 0);\n }\n\n updateDisplayedItems() {\n // If no items, set empty array\n if (!this.items || this.items.length === 0) {\n this.displayedItems = [];\n return;\n }\n \n let result = [...this.items];\n\n // Apply column filters\n const filters = this.filterValues || {};\n const activeFilterKeys = Object.keys(filters).filter((key) => {\n const value = filters[key];\n return value !== undefined && value !== null && `${value}`.trim() !== '';\n });\n if (activeFilterKeys.length > 0) {\n result = result.filter((row: any) => {\n return activeFilterKeys.every((key) => {\n const raw = row?.[key];\n const source = raw === undefined || raw === null ? '' : `${raw}`;\n const target = `${filters[key]}`.trim();\n return source.toLowerCase().includes(target.toLowerCase());\n });\n });\n }\n\n // Keep pagination counts in sync with filtered result\n if (this.pagination) {\n this.pagination.totalItems = result.length;\n if (this.pagination.currentPage > this.pagination.totalPages && this.pagination.totalPages > 0) {\n this.pagination.currentPage = this.pagination.totalPages;\n }\n if (this.pagination.currentPage < 1) {\n this.pagination.currentPage = 1;\n }\n this.pagination.updatePagination();\n }\n \n // Apply sorting\n if (this.sortColumn && this.sortDirection) {\n result.sort((a, b) => {\n const aVal = a[this.sortColumn!];\n const bVal = b[this.sortColumn!];\n \n if (aVal == null) return 1;\n if (bVal == null) return -1;\n \n if (typeof aVal === 'string') {\n const comparison = aVal.localeCompare(bVal);\n return this.sortDirection === 'asc' ? comparison : -comparison;\n }\n \n if (aVal < bVal) return this.sortDirection === 'asc' ? -1 : 1;\n if (aVal > bVal) return this.sortDirection === 'asc' ? 1 : -1;\n return 0;\n });\n }\n \n // Apply pagination\n if (this.pagination) {\n const start = this.pagination.firstItem;\n const end = this.pagination.lastItem;\n result = result.slice(start, end);\n }\n \n this.displayedItems = result;\n this.displayedItemsVersion++;\n }\n\n onSort(field: string) {\n if (this.sortColumn === field) {\n if (this.sortDirection === 'asc') {\n this.sortDirection = 'desc';\n } else if (this.sortDirection === 'desc') {\n this.sortColumn = null;\n this.sortDirection = null;\n } else {\n this.sortDirection = 'asc';\n }\n } else {\n this.sortColumn = field;\n this.sortDirection = 'asc';\n }\n \n this.updateDisplayedItems();\n }\n\n getSortIcon(field: string): string {\n if (this.sortColumn !== field) return '';\n return this.sortDirection === 'asc' ? '▲' : '▼';\n }\n\n toggleRowExpansion(row: any) {\n if (this.expandedRows.has(row)) {\n this.expandedRows.delete(row);\n } else {\n this.expandedRows.add(row);\n }\n }\n\n isRowExpanded(row: any): boolean {\n return this.expandedRows.has(row);\n }\n\n openFilter(key: string, event: MouseEvent, headerText: string = '') {\n event.stopPropagation();\n if (this.activeFilterCol === key) {\n this.activeFilterCol = null;\n return;\n }\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const popupWidth = 180;\n const margin = 8;\n let left = rect.left;\n if (left + popupWidth + margin > window.innerWidth) {\n left = rect.right - popupWidth;\n }\n if (left < margin) { left = margin; }\n this.filterPopupPos = { top: rect.bottom + 4, left };\n this.activeFilterHeader = headerText;\n this.activeFilterCol = key;\n }\n\n onFilterInput(key: string, event: Event) {\n const value = (event.target as HTMLInputElement).value;\n this.filterValues = { ...this.filterValues, [key]: value };\n if (this.pagination) {\n this.pagination.currentPage = 1;\n this.pagination.updatePagination();\n }\n this.updateDisplayedItems();\n this.filterChange.emit({ key, value });\n }\n\n // ── Column resize ───────────────────────────────────────────────\n startResize(colIdx: number, event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this._resizingIdx = colIdx;\n this._resizeStartX = event.clientX;\n this._resizeStartWidth = this.columnWidths[colIdx];\n document.addEventListener('mousemove', this._resizeMoveRef);\n document.addEventListener('mouseup', this._resizeEndRef);\n document.body.style.userSelect = 'none';\n document.body.style.cursor = 'col-resize';\n }\n\n private _onResizeMove(event: MouseEvent) {\n if (this._resizingIdx < 0) return;\n const delta = event.clientX - this._resizeStartX;\n this.columnWidths[this._resizingIdx] = Math.max(40, this._resizeStartWidth + delta);\n }\n\n private _onResizeEnd() {\n this._resizingIdx = -1;\n document.removeEventListener('mousemove', this._resizeMoveRef);\n document.removeEventListener('mouseup', this._resizeEndRef);\n document.body.style.userSelect = '';\n document.body.style.cursor = '';\n }\n\n ngOnDestroy() {\n this._onResizeEnd();\n }\n}\n","<div class=\"pk-datagrid-container\">\n @if (pkDgLoading) {\n <div class=\"pk-datagrid-spinner\">\n <div class=\"spinner\"></div>\n <span>Loading...</span>\n </div>\n }\n \n <table class=\"pk-datagrid\" style=\"table-layout: fixed\" [style.min-width.px]=\"totalWidth\">\n <thead>\n <tr>\n @if (hasExpandCol) {\n <th class=\"pk-dg-expand-th\"></th>\n } @else {\n <th class=\"pk-dg-expand-th pk-dg-no-detail\"></th>\n }\n @for (column of columns; track column.pkDgField; let i = $index) {\n <th [style.width.px]=\"columnWidths[i]\">\n <div class=\"th-content\">\n <span>{{ column.headerText }}</span>\n <div class=\"th-actions\">\n @if (column.pkDgField) {\n <button class=\"sort-icon-btn\"\n [class.active]=\"sortColumn === column.pkDgField\"\n (click)=\"onSort(column.pkDgField)\"\n title=\"เรียงลำดับ\">\n <pk-icon\n iconSet=\"material-symbols\"\n [name]=\"sortColumn === column.pkDgField ? (sortDirection === 'asc' ? 'keyboard_arrow_up' : 'keyboard_arrow_down') : 'unfold_more'\"\n [size]=\"12\" color=\"currentColor\">\n </pk-icon>\n </button>\n }\n @if (column.pkDgFilterKey) {\n <button class=\"filter-icon-btn\"\n [class.active]=\"filterValues[column.pkDgFilterKey]\"\n (click)=\"openFilter(column.pkDgFilterKey, $event, column.headerText)\"\n title=\"กรอง\">\n <pk-icon name=\"search\" [size]=\"12\" color=\"currentColor\"></pk-icon>\n </button>\n }\n </div>\n </div>\n @if (column.pkDgFilterKey && activeFilterCol === column.pkDgFilterKey) {\n <div class=\"filter-popup\"\n [style.top.px]=\"filterPopupPos.top\"\n [style.left.px]=\"filterPopupPos.left\"\n (click)=\"$event.stopPropagation()\">\n <input type=\"text\"\n [value]=\"filterValues[column.pkDgFilterKey] || ''\"\n (input)=\"onFilterInput(column.pkDgFilterKey, $event)\"\n [placeholder]=\"'ค้นหา ' + activeFilterHeader\"\n autofocus>\n </div>\n }\n <div class=\"resize-handle\" (mousedown)=\"startResize(i, $event)\"></div>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n <ng-content select=\"pk-dg-row\"></ng-content>\n </tbody>\n </table>\n \n <ng-content select=\"pk-dg-footer\"></ng-content>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'pk-dg-cell',\n template: '<td [class.wrap]=\"!_nowrap\" [ngStyle]=\"tdStyle\"><ng-content></ng-content></td>',\n styleUrls: ['./pk-dg-cell.component.scss'],\n standalone: false,\n host: {\n 'style': 'display: contents'\n }\n})\nexport class PkDgCellComponent {\n @Input() set nowrap(value: boolean) {\n this._nowrap = value;\n }\n get nowrap(): boolean { return this._nowrap; }\n _nowrap: boolean = true;\n\n @Input() tdStyle: { [key: string]: string } | null = null;\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pk-dg-footer',\n template: '<div class=\"pk-dg-footer\"><ng-content></ng-content></div>',\n styles: [`\n .pk-dg-footer {\n border-top: 2px solid #e0e0e0;\n background: #fafafa;\n }\n `],\n standalone: false\n})\nexport class PkDgFooterComponent {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PkIcon } from '../pk-icon/pk-icon';\n\nimport { PkDatagridComponent } from './pk-datagrid.component';\nimport { PkDgColumnComponent } from './pk-dg-column.component';\nimport { PkDgRowComponent } from './pk-dg-row.component';\nimport { PkDgCellComponent } from './pk-dg-cell.component';\nimport { PkDgFooterComponent } from './pk-dg-footer.component';\nimport { PkDgPaginationComponent } from './pk-dg-pagination.component';\nimport { PkDgPageSizeComponent } from './pk-dg-page-size.component';\nimport { PkDgRowDetailComponent } from './pk-dg-row-detail.component';\nimport { PkDgItemsDirective, PkIfExpandedDirective, NowrapDirective } from './pk-datagrid.directives';\n\n@NgModule({\n declarations: [\n PkDatagridComponent,\n PkDgColumnComponent,\n PkDgRowComponent,\n PkDgCellComponent,\n PkDgFooterComponent,\n PkDgPaginationComponent,\n PkDgPageSizeComponent,\n PkDgRowDetailComponent,\n PkDgItemsDirective,\n PkIfExpandedDirective,\n NowrapDirective\n ],\n imports: [\n CommonModule,\n FormsModule,\n PkIcon\n ],\n exports: [\n PkDatagridComponent,\n PkDgColumnComponent,\n PkDgRowComponent,\n PkDgCellComponent,\n PkDgFooterComponent,\n PkDgPaginationComponent,\n PkDgPageSizeComponent,\n PkDgRowDetailComponent,\n PkDgItemsDirective,\n PkIfExpandedDirective,\n NowrapDirective,\n PkIcon\n ]\n})\nexport class PkDatagridModule { }\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { PkDatepickerComponent } from './pk-datepicker.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DatepickerService {\n private activeDatepicker = new Subject<PkDatepickerComponent | null>();\n\n // Notify when a datepicker is opened\n openDatepicker(component: PkDatepickerComponent) {\n this.activeDatepicker.next(component);\n }\n\n // Subscribe to know when another datepicker opens\n getActiveDatepicker() {\n return this.activeDatepicker.asObservable();\n }\n}","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\ninterface Holiday {\n date: Date;\n title: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HolidayService {\n constructor() { }\n\n // Mock for testing\n getHolidays(year: number): Observable<Holiday[]> {\n const mockHolidays: Holiday[] = [\n { date: new Date(2025, 0, 1), title: \"วันขึ้นปีใหม่\" },\n { date: new Date(2025, 3, 13), title: \"วันสงกรานต์\" },\n { date: new Date(2025, 3, 14), title: \"วันสงกรานต์\" },\n { date: new Date(2025, 3, 15), title: \"ชดเชยวันสงกรานต์\" },\n { date: new Date(2025, 3, 16), title: \"ชดเชยวันสงกรานต์\" },\n { date: new Date(2025, 11, 25), title: \"วันคริสต์มาส\" }\n ].filter(h => h.date.getFullYear() === year);\n return of(mockHolidays);\n }\n}","/*\n pk-datepicker เป็น component เพื่อใช้แทนการ input type=\"date\"\n\n การใช้งาน:\n <pk-datepicker [..] ..></pk-datepicker>\n\n input parameter:\n disabled: true | false (default false) - กรณีไม่ต้องการให้เลือกวันที่\n setNull: true | false (default true) - กรณีไม่ต้องการให้เลือกวันที่ ให้ set เป็น null\n dateInput: true | false (default true) - กรณีต้องการให้ป้อนตัวเลขวันที่ได้\n locale: TH | EN (default TH)\n startOfWeek: 'monday' | 'sunday' = 'monday'\n minDate: Date | null - กำหนดช่วงวันที่ที่สามารถเลือกได้\n maxDate: Date | null - กำหนดช่วงวันที่ที่สามารถเลือกได้\n [(ngModel)]=\"dateInput: Date\" - กำหนดค่าเริ่มต้นของวันที่\n style= \"width: 140px;\"\n\n Output\n (onDateChange): Date\n\n Feature:\n 1.ปีที่เลือกได้ กรณีไม่ได้ระบุ minDate จะเลือกย้อนหลังได้ -20 ปี, หากไม่ได้ระบุ maxDate จะเลือกไปข้างหน้าได้ +10 ปี\n 2.ระบบจะแสดงวันหยุดได้โดยใช้ค่าจาก mainService.getHoliday\n*/\n\nimport { Component, Input, Output, EventEmitter, forwardRef, OnInit, HostListener, ElementRef, OnDestroy } from '@angular/core';\nimport { NgStyle } from '@angular/common';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { FormsModule } from '@angular/forms';\nimport { DatepickerService } from './datepicker.service';\nimport { HolidayService } from './holiday.service';\nimport { Subscription } from 'rxjs';\n\ninterface Holiday {\n date: Date;\n title: string;\n}\n\n@Component({\n selector: 'pk-datepicker',\n templateUrl: './pk-datepicker.component.html',\n styleUrls: ['./pk-datepicker.component.scss'],\n imports: [FormsModule, NgStyle],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PkDatepickerComponent),\n multi: true\n }\n ],\n standalone: true\n})\nexport class PkDatepickerComponent implements ControlValueAccessor, OnInit, OnDestroy {\n @Input() disabled: boolean = false;\n @Input() setNull: boolean = true;\n @Input() dateInput: boolean = true;\n @Input() locale: string = 'TH';\n @Input() minDate: Date | null = null;\n @Input() maxDate: Date | null = null;\n @Input() startOfWeek: 'monday' | 'sunday' = 'monday';\n @Input() style: string | null = null;\n @Input() placeholder: string = '';\n @Output() onDateChange = new EventEmitter<Date | null>();\n\n private holidays: Holiday[] = [];\n private innerValue: Date | null = null;\n public isOpen: boolean = false;\n public currentMonth: Date = new Date();\n public daysInMonth: Date[] = [];\n public weekdays: string[] = [];\n public months: { name: string, value: number }[] = [];\n public years: number[] = [];\n public selectedMonth: number = new Date().getMonth();\n public selectedYear: number = new Date().getFullYear();\n public dropdownStyles: Record<string, string> = {};\n\n private onChange: (value: Date | null) => void = () => { };\n private onTouched: () => void = () => { };\n private subscription?: Subscription;\n\n get localeMode(): 'TH' | 'EN' {\n return String(this.locale || '').trim().toUpperCase() === 'TH' ? 'TH' : 'EN';\n }\n\n constructor(\n private elementRef: ElementRef,\n private datepickerService: DatepickerService,\n private holidayService: HolidayService\n ) { }\n\n ngOnInit(): void {\n this.currentMonth = this.innerValue ? new Date(this.innerValue) : new Date();\n this.currentMonth.setDate(1);\n this.adjustCurrentMonthToRange();\n this.selectedMonth = this.currentMonth.getMonth();\n this.selectedYear = this.localeMode === 'TH'\n ? this.currentMonth.getFullYear() + 543\n : this.currentMonth.getFullYear();\n this.fetchHolidays(this.currentMonth.getFullYear());\n this.updateCalendar();\n this.generateMonths();\n this.generateYears();\n\n this.subscription = this.datepickerService.getActiveDatepicker().subscribe(activeComponent => {\n if (activeComponent !== this && this.isOpen) {\n this.isOpen = false;\n }\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n @HostListener('document:click', ['$event'])\n onClickOutside(event: Event): void {\n if (this.isOpen && !this.elementRef.nativeElement.contains(event.target)) {\n this.isOpen = false;\n }\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n if (this.isOpen) {\n this.updateDropdownPosition();\n }\n }\n\n @HostListener('window:scroll')\n onWindowScroll(): void {\n if (this.isOpen) {\n this.updateDropdownPosition();\n }\n }\n\n get value(): Date | null {\n return this.innerValue;\n }\n\n set value(val: Date | null) {\n if (val !== this.innerValue && this.isDateInRange(val)) {\n this.innerValue = val;\n this.onChange(val);\n this.onDateChange.emit(val);\n this.currentMonth = new Date(val || new Date());\n this.currentMonth.setDate(1);\n this.adjustCurrentMonthToRange();\n this.selectedMonth = this.currentMonth.getMonth();\n this.selectedYear = this.localeMode === 'TH'\n ? this.currentMonth.getFullYear() + 543\n : this.currentMonth.getFullYear();\n this.fetchHolidays(this.currentMonth.getFullYear());\n this.updateCalendar();\n }\n }\n\n get formattedDate(): string {\n if (!this.innerValue) return '';\n\n const options: Intl.DateTimeFormatOptions = {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric'\n };\n\n return this.localeMode === 'TH'\n ? this.innerValue.toLocaleDateString('th-TH', { ...options, year: 'numeric' })\n : this.innerValue.toLocaleDateString('en-US', options);\n }\n\n get currentMonthYear(): string {\n const options: Intl.DateTimeFormatOptions = {\n month: 'long',\n year: 'numeric'\n };\n return this.localeMode === 'TH'\n ? this.currentMonth.toLocaleDateString('th-TH', options)\n : this.currentMonth.toLocaleDateString('en-US', options);\n }\n\n get isTodayDisabled(): boolean {\n return this.disabled || !this.isDateInRange(new Date());\n }\n\n get canGoPrevMonth(): boolean {\n if (this.disabled || !this.minDate) return true;\n const prevMonth = new Date(this.currentMonth);\n prevMonth.setMonth(prevMonth.getMonth() - 1);\n return prevMonth.getTime() >= this.minDate.getTime();\n }\n\n get canGoNextMonth(): boolean {\n if (this.disabled || !this.maxDate) return true;\n const nextMonth = new Date(this.currentMonth);\n nextMonth.setMonth(nextMonth.getMonth() + 1);\n return nextMonth.getTime() <= this.maxDate.getTime();\n }\n\n updateCalendar(): void {\n this.currentMonth = new Date(this.currentMonth.getFullYear(), this.currentMonth.getMonth(), 1);\n\n if (this.startOfWeek === 'monday') {\n this.weekdays = this.localeMode === 'TH'\n ? ['จ', 'อ', 'พ', 'พฤ', 'ศ', 'ส', 'อา']\n : ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n } else {\n this.weekdays = this.localeMode === 'TH'\n ? ['อา', 'จ', 'อ', 'พ', 'พฤ', 'ศ', 'ส']\n : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n }\n\n this.daysInMonth = [];\n const firstDayOfMonth = this.currentMonth.getDay();\n const daysInMonth = new Date(this.currentMonth.getFullYear(), this.currentMonth.getMonth() + 1, 0).getDate();\n const startOffset = this.startOfWeek === 'monday' ? (firstDayOfMonth + 6) % 7 : firstDayOfMonth;\n\n for (let i = startOffset - 1; i >= 0; i--) {\n const prevDate = new Date(this.currentMonth);\n prevDate.setDate(this.currentMonth.getDate() - i - 1);\n this.daysInMonth.push(prevDate);\n }\n\n for (let i = 1; i <= daysInMonth; i++) {\n const newDate = new Date(this.currentMonth);\n newDate.setDate(i);\n this.daysInMonth.push(newDate);\n }\n\n const totalCells = Math.ceil((startOffset + daysInMonth) / 7) * 7;\n for (let i = daysInMonth + 1; this.daysInMonth.length < totalCells; i++) {\n const nextDate = new Date(this.currentMonth);\n nextDate.setDate(i);\n this.daysInMonth.push(nextDate);\n }\n }\n\n generateMonths(): void {\n this.months = Array.from({ length: 12 }, (_, i) => {\n const date = new Date(2000, i, 1);\n return {\n name: date.toLocaleString(this.localeMode === 'TH' ? 'th-TH' : 'en-US', { month: 'long' }),\n value: i\n };\n });\n }\n\n generateYears(): void {\n const currentYear = new Date().getFullYear();\n let minYear: number;\n let maxYear: number;\n\n if (this.minDate && this.maxDate) {\n minYear = this.minDate.getFullYear();\n maxYear = this.maxDate.getFullYear();\n } else {\n minYear = currentYear - 20;\n maxYear = currentYear + 10;\n }\n\n this.years = [];\n for (let i = minYear; i <= maxYear; i++) {\n this.years.push(this.localeMode === 'TH' ? i + 543 : i);\n }\n }\n\n fetchHolidays(year: number): void {\n // No adjustment needed, year is already Gregorian\n this.holidayService.getHolidays(year).subscribe(holidays => {\n this.holidays = holidays;\n this.updateCalendar();\n });\n }\n\n onMonthChange(month: number): void {\n this.selectedMonth = month;\n this.currentMonth = new Date(this.currentMonth.getFullYear(), month, 1);\n this.adjustCurrentMonthToRange();\n this.selectedYear = this.localeMode === 'TH'\n ? this.currentMonth.getFullYear() + 543\n : this.currentMonth.getFullYear();\n this.fetchHolidays(this.currentMonth.getFullYear());\n }\n\n onYearChange(year: number): void {\n this.selectedYear = year;\n const adjustedYear = this.localeMode === 'TH' ? year - 543 : year;\n this.currentMonth = new Date(adjustedYear, this.currentMonth.getMonth(), 1);\n this.adjustCurrentMonthToRange();\n this.fetchHolidays(adjustedYear);\n }\n\n onChangeDate(event: any): void {\n let inputValue = event.target.value;\n\n // แปลงปี พ.ศ. เป็น ค.ศ. ถ้าเป็น locale TH\n if (this.localeMode === 'TH' && inputValue) {\n // ตรวจสอบรูปแบบ DD/MM/YYYY (TH format)\n const thaiDatePattern = /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/;\n const match = inputValue.match(thaiDatePattern);\n\n if (match) {\n const day = match[1];\n const month = match[2];\n const year = parseInt(match[3]);\n\n // แปลง พ.ศ. เป็น ค.ศ. ถ้าปีมากกว่า 2400\n if (year > 2400) {\n inputValue = `${year - 543}-${month}-${day}`;\n }\n }\n }\n\n const date = new Date(inputValue);\n if (!date || isNaN(date.getTime())) {\n return;\n }\n\n if (this.isDateInRange(date)) {\n // this.onDateChange.emit(date);\n this.value = date;\n // this.currentMonth = new Date(date.getFullYear(), date.getMonth(), 1);\n // this.selectedMonth = this.currentMonth.getMonth();\n // this.selectedYear = this.locale === 'TH'\n // ? this.currentMonth.getFullYear() + 543\n // : this.currentMonth.getFullYear();\n // this.fetchHolidays(this.currentMonth.getFullYear());\n // this.updateCalendar();\n this.isOpen = false;\n this.onTouched();\n } else {\n event.target.value = this.formattedDate; // Reset to formatted date if out of range\n }\n }\n resetDate(): void {\n this.value = null;\n this.isOpen = false;\n this.onTouched();\n }\n\n prevMonth(): void {\n if (this.canGoPrevMonth) {\n this.currentMonth.setMonth(this.currentMonth.getMonth() - 1);\n this.selectedMonth = this.currentMonth.getMonth();\n this.selectedYear = this.localeMode === 'TH'\n ? this.currentMonth.getFullYear() + 543\n : this.currentMonth.getFullYear();\n this.adjustCurrentMonthToRange();\n this.fetchHolidays(this.currentMonth.getFullYear());\n }\n }\n\n nextMonth(): void {\n if (this.canGoNextMonth) {\n this.currentMonth.setMonth(this.currentMonth.getMonth() + 1);\n this.selectedMonth = this.currentMonth.getMonth();\n this.selectedYear = this.localeMode === 'TH'\n ? this.currentMonth.getFullYear() + 543\n : this.currentMonth.getFullYear();\n this.adjustCurrentMonthToRange();\n this.fetchHolidays(this.currentMonth.getFullYear());\n }\n }\n\n selectToday(): void {\n const today = new Date();\n if (this.isDateInRange(today)) {\n this.value = today;\n this.currentMonth = new Date(today.getFullYear(), today.getMonth(), 1);\n this.selectedMonth = this.currentMonth.getMonth();\n this.selectedYear = this.localeMode === 'TH'\n ? this.currentMonth.getFullYear() + 543\n : this.currentMonth.getFullYear();\n this.fetchHolidays(this.currentMonth.getFullYear());\n this.updateCalendar();\n this.isOpen = false;\n this.onTouched();\n }\n }\n\n writeValue(value: Date | null): void {\n if (this.isDateInRange(value)) {\n this.innerValue = value;\n if (value) {\n this.currentMonth = new Date(value.getFullYear(), value.getMonth(), 1);\n } else {\n this.currentMonth = new Date();\n this.currentMonth.setDate(1);\n this.adjustCurrentMonthToRange();\n }\n this.selectedMonth = this.currentMonth.getMonth();\n this.selectedYear = this.localeMode === 'TH'\n ? this.currentMonth.getFullYear() + 543\n : this.currentMonth.getFullYear();\n this.fetchHolidays(this.currentMonth.getFullYear());\n }\n }\n\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onDateSelect(date: Date): void {\n if (this.isDateInRange(date)) {\n this.value = date;\n this.isOpen = false;\n this.onTouched();\n }\n }\n\n togglePicker(event: Event): void {\n if (!this.disabled) {\n if (!this.isOpen) {\n this.datepickerService.openDatepicker(this);\n }\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n setTimeout(() => this.updateDropdownPosition(), 0);\n }\n event.stopPropagation();\n }\n }\n\n private updateDropdownPosition(): void {\n const inputEl = this.elementRef.nativeElement.querySelector('.datepicker-input') as HTMLElement | null;\n if (!inputEl) return;\n\n const rect = inputEl.getBoundingClientRect();\n const margin = 8;\n const dropdownWidth = 270;\n const dropdownHeight = 360;\n\n let left = rect.left;\n let top = rect.bottom + 4;\n\n if (left + dropdownWidth + margin > window.innerWidth) {\n left = window.innerWidth - dropdownWidth - margin;\n }\n if (left < margin) {\n left = margin;\n }\n\n if (top + dropdownHeight + margin > window.innerHeight && rect.top - dropdownHeight > margin) {\n top = rect.top - dropdownHeight - 4;\n }\n if (top < margin) {\n top = margin;\n }\n\n this.dropdownStyles = {\n position: 'fixed',\n top: `${top}px`,\n left: `${left}px`,\n zIndex: '2147483647'\n };\n }\n\n isSelected(date: Date): boolean {\n return this.innerValue?.toDateString() === date.toDateString();\n }\n\n isCurrentMonth(date: Date): boolean {\n return date.getMonth() === this.currentMonth.getMonth() &&\n date.getFullYear() === this.currentMonth.getFullYear();\n }\n\n isDateInRange(date: Date | null): boolean {\n if (!date) return true;\n const time = date.getTime();\n const minTime = this.minDate\n ? new Date(this.minDate.getFullYear(), this.minDate.getMonth(), this.minDate.getDate(), 0, 0, 0, 0).getTime()\n : null;\n const maxTime = this.maxDate\n ? new Date(this.maxDate.getFullYear(), this.maxDate.getMonth(), this.maxDate.getDate(), 23, 59, 59, 999).getTime()\n : null;\n\n return (minTime === null || time >= minTime) &&\n (maxTime === null || time <= maxTime);\n }\n\n isMonthDisabled(month: number): boolean {\n if (!this.minDate && !this.maxDate) return false;\n const year = this.localeMode === 'TH' ? this.selectedYear - 543 : this.selectedYear;\n const startOfMonth = new Date(year, month, 1).getTime();\n const endOfMonth = new Date(year, month + 1, 0).getTime();\n\n const beforeMin = this.minDate ? endOfMonth < this.minDate.getTime() : false;\n const afterMax = this.maxDate ? startOfMonth > this.maxDate.getTime() : false;\n return beforeMin || afterMax;\n }\n\n isWeekend(date: Date): boolean {\n return date.getDay() === 0 || date.getDay() === 6;\n }\n\n isExplicitHoliday(date: Date): boolean {\n return this.holidays.some(holiday =>\n holiday.date.getFullYear() === date.getFullYear() &&\n holiday.date.getMonth() === date.getMonth() &&\n holiday.date.getDate() === date.getDate()\n );\n }\n\n getHolidayTitle(date: Date): string {\n const holiday = this.holidays.find(h =>\n h.date.getFullYear() === date.getFullYear() &&\n h.date.getMonth() === date.getMonth() &&\n h.date.getDate() === date.getDate()\n );\n return holiday ? holiday.title : '';\n }\n\n adjustCurrentMonthToRange(): void {\n if (this.minDate && this.currentMonth.getTime() < this.minDate.getTime()) {\n this.currentMonth = new Date(this.minDate);\n this.currentMonth.setDate(1);\n }\n if (this.maxDate && this.currentMonth.getTime() > this.maxDate.getTime()) {\n this.currentMonth = new Date(this.maxDate);\n this.currentMonth.setDate(1);\n }\n }\n}","<div class=\"datepicker-container\" [class.datepicker-container--open]=\"isOpen\">\n <input type=\"text\" [value]=\"formattedDate\" [disabled]=\"disabled\" [style]=\"style\"\n [placeholder]=\"placeholder? placeholder : (localeMode === 'TH' ? 'วว/ดด/ปปปป' : 'DD/MM/YYYY')\"\n [title]=\"placeholder? placeholder : (localeMode === 'TH' ? 'Click เพื่อเลือกวันที่' : 'Click for select date')\"\n (click)=\"togglePicker($event)\" class=\"datepicker-input\" [readonly]=\"!dateInput\" (change)=\"onChangeDate($event)\" />\n @if (isOpen) {\n <div class=\"datepicker-dropdown\" [ngStyle]=\"dropdownStyles\">\n <div class=\"calendar\">\n <div class=\"calendar-header\">\n <button class=\"nav-btn\" (click)=\"prevMonth()\" [disabled]=\"!canGoPrevMonth\">\n << </button>\n <select [(ngModel)]=\"selectedMonth\" (ngModelChange)=\"onMonthChange($event)\" [disabled]=\"disabled\">\n @for (month of months; track month.value) {\n <option [value]=\"month.value\" [disabled]=\"isMonthDisabled(month.value)\">{{ month.name }}</option>\n }\n </select>\n <select [(ngModel)]=\"selectedYear\" (ngModelChange)=\"onYearChange($event)\" [disabled]=\"disabled\">\n @for (year of years; track year) {\n <option [value]=\"year\">{{ year }}</option>\n }\n </select>\n <button class=\"nav-btn\" (click)=\"nextMonth()\" [disabled]=\"!canGoNextMonth\">>></button>\n </div>\n\n <div class=\"month-year-display\">{{ currentMonthYear }}</div>\n\n <div class=\"weekdays\">\n @for (weekday of weekdays; track weekday) {\n <div class=\"weekday\">{{ weekday }}</div>\n }\n </div>\n\n <div class=\"days\">\n @for (day of daysInMonth; track day) {\n <button\n [class.selected]=\"isSelected(day)\"\n [class.other-month]=\"!isCurrentMonth(day)\"\n [class.weekend]=\"isWeekend(day)\"\n [class.holiday]=\"isExplicitHoliday(day)\"\n [disabled]=\"disabled || !isDateInRange(day)\"\n [title]=\"isExplicitHoliday(day) ? getHolidayTitle(day) : ''\"\n (click)=\"onDateSelect(day)\">\n {{ day.getDate() }}\n </button>\n }\n </div>\n\n <div class=\"calendar-footer\">\n <button class=\"today-btn\" (click)=\"selectToday()\" [disabled]=\"isTodayDisabled\">\n {{ localeMode === 'TH' ? 'วันนี้' : 'Today' }}\n </button>\n @if (setNull) {\n <button class=\"reset-btn\" (click)=\"resetDate()\" [disabled]=\"disabled\">\n {{ localeMode === 'TH' ? 'ลบ' : 'Clear' }}\n </button>\n }\n </div>\n </div>\n </div>\n }\n</div>","import {\n Component,\n input,\n computed,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ProgressConfig } from './pk-progress.interface';\n\n@Component({\n selector: 'pk-progress',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (config().type === 'circle') {\n <!-- Circle Progress -->\n <div class=\"pk-progress-circle\" [style.width.px]=\"circleSize()\" [style.height.px]=\"circleSize()\">\n <svg [attr.viewBox]=\"'0 0 ' + circleSize() + ' ' + circleSize()\">\n <!-- Background circle -->\n <circle\n class=\"pk-progress-circle-bg\"\n [attr.cx]=\"circleSize() / 2\"\n [attr.cy]=\"circleSize() / 2\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"config().strokeWidth || 6\"\n fill=\"none\" />\n \n <!-- Progress circle -->\n <circle\n class=\"pk-progress-circle-path\"\n [class.pk-progress-success]=\"config().status === 'success'\"\n [class.pk-progress-error]=\"config().status === 'error'\"\n [class.pk-progress-warning]=\"config().status === 'warning'\"\n [attr.cx]=\"circleSize() / 2\"\n [attr.cy]=\"circleSize() / 2\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"config().strokeWidth || 6\"\n [attr.stroke-dasharray]=\"circumference()\"\n [attr.stroke-dashoffset]=\"offset()\"\n [style.stroke]=\"config().color || null\"\n fill=\"none\" />\n </svg>\n \n @if (config().showInfo) {\n <div class=\"pk-progress-circle-text\">\n @if (config().status === 'success') {\n <span class=\"pk-progress-icon\">✓</span>\n } @else if (config().status === 'error') {\n <span class=\"pk-progress-icon\">✕</span>\n } @else {\n <span>{{ config().percent }}%</span>\n }\n </div>\n }\n </div>\n } @else {\n <!-- Line Progress -->\n <div class=\"pk-progress-line\">\n @if (config().label) {\n <div class=\"pk-progress-label\">{{ config().label }}</div>\n }\n \n <div class=\"pk-progress-outer\">\n <div \n class=\"pk-progress-inner\"\n [class.pk-progress-striped]=\"config().striped\"\n [class.pk-progress-animated]=\"config().animated\"\n [class.pk-progress-indeterminate]=\"config().indeterminate\"\n [style.height.px]=\"config().strokeWidth || 8\">\n <div \n class=\"pk-progress-bg\"\n [class.pk-progress-success]=\"config().status === 'success'\"\n [class.pk-progress-error]=\"config().status === 'error'\"\n [class.pk-progress-warning]=\"config().status === 'warning'\"\n [style.width.%]=\"config().indeterminate ? 30 : config().percent\"\n [style.background]=\"config().color || null\">\n </div>\n </div>\n </div>\n \n @if (config().showInfo) {\n <div class=\"pk-progress-text\">\n @if (config().status === 'success') {\n <span class=\"pk-progress-icon\">✓</span>\n } @else if (config().status === 'error') {\n <span class=\"pk-progress-icon\">✕</span>\n } @else {\n {{ config().percent }}%\n }\n </div>\n }\n </div>\n }\n `,\n styles: [`\n /* Line Progress */\n .pk-progress-line {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n\n .pk-progress-label {\n flex-shrink: 0;\n color: #565656;\n font-size: 0.875rem;\n font-weight: 500;\n }\n\n .pk-progress-outer {\n flex: 1;\n background: #e8e8e8;\n border-radius: 100px;\n overflow: hidden;\n }\n\n .pk-progress-inner {\n width: 100%;\n position: relative;\n background: transparent;\n border-radius: 100px;\n overflow: hidden;\n }\n\n .pk-progress-bg {\n height: 100%;\n background: #0072a3;\n border-radius: 100px;\n transition: width 0.3s ease;\n }\n\n .pk-progress-success {\n background: #00A651 !important;\n }\n\n .pk-progress-error {\n background: #E62700 !important;\n }\n\n .pk-progress-warning {\n background: #FFC600 !important;\n }\n\n .pk-progress-striped .pk-progress-bg {\n background-image: linear-gradient(\n 45deg,\n rgba(255, 255, 255, 0.15) 25%,\n transparent 25%,\n transparent 50%,\n rgba(255, 255, 255, 0.15) 50%,\n rgba(255, 255, 255, 0.15) 75%,\n transparent 75%,\n transparent\n );\n background-size: 1rem 1rem;\n }\n\n .pk-progress-animated .pk-progress-bg {\n animation: progress-stripes 1s linear infinite;\n }\n\n @keyframes progress-stripes {\n 0% {\n background-position: 1rem 0;\n }\n 100% {\n background-position: 0 0;\n }\n }\n\n .pk-progress-indeterminate .pk-progress-bg {\n animation: progress-indeterminate 2s linear infinite;\n }\n\n @keyframes progress-indeterminate {\n 0% {\n margin-left: 0;\n }\n 50% {\n margin-left: 70%;\n }\n 100% {\n margin-left: 0;\n }\n }\n\n .pk-progress-text {\n flex-shrink: 0;\n min-width: 2.5rem;\n text-align: right;\n color: #565656;\n font-size: 0.875rem;\n }\n\n /* Circle Progress */\n .pk-progress-circle {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .pk-progress-circle svg {\n transform: rotate(-90deg);\n }\n\n .pk-progress-circle-bg {\n stroke: #e8e8e8;\n }\n\n .pk-progress-circle-path {\n stroke: #0072a3;\n stroke-linecap: round;\n transition: stroke-dashoffset 0.3s ease;\n }\n\n .pk-progress-circle-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: #565656;\n font-size: 1rem;\n font-weight: 600;\n }\n\n .pk-progress-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.25rem;\n height: 1.25rem;\n border-radius: 50%;\n font-size: 0.75rem;\n font-weight: 700;\n }\n\n .pk-progress-success + .pk-progress-text .pk-progress-icon,\n .pk-progress-circle.pk-progress-success .pk-progress-icon {\n color: white;\n background: #00A651;\n }\n\n .pk-progress-error + .pk-progress-text .pk-progress-icon,\n .pk-progress-circle.pk-progress-error .pk-progress-icon {\n color: white;\n background: #E62700;\n }\n\n .pk-progress-warning + .pk-progress-text .pk-progress-icon,\n .pk-progress-circle.pk-progress-warning .pk-progress-icon {\n color: white;\n background: #FFC600;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PkProgressComponent {\n config = input<ProgressConfig>({\n type: 'line',\n percent: 0,\n status: 'normal',\n showInfo: true,\n strokeWidth: 8,\n striped: false,\n animated: false,\n indeterminate: false,\n });\n\n // Circle calculations\n circleSize = computed(() => {\n const strokeWidth = this.config().strokeWidth || 6;\n return 120; // Fixed size for circle\n });\n\n radius = computed(() => {\n const size = this.circleSize();\n const strokeWidth = this.config().strokeWidth || 6;\n return (size - strokeWidth) / 2;\n });\n\n circumference = computed(() => {\n return 2 * Math.PI * this.radius();\n });\n\n offset = computed(() => {\n const percent = this.config().percent || 0;\n return this.circumference() * (1 - percent / 100);\n });\n}\n","import {\n Component, Input, Output, EventEmitter,\n OnChanges, SimpleChanges, ChangeDetectionStrategy\n} from '@angular/core';\n\nimport { RouterModule } from '@angular/router';\nimport { PkIcon } from '../pk-icon/pk-icon';\nimport { TreeNode, TreeSelectionMode } from './pk-treeview.model';\n\n@Component({\n selector: 'pk-treeview-node',\n imports: [RouterModule, PkIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ul class=\"pk-tree-list\">\n @for (node of nodes; track node) {\n <li class=\"pk-tree-item\">\n <!-- Row -->\n <div class=\"pk-tree-row\"\n [class.pk-tree-row--selected]=\"node._selected\"\n (click)=\"onRowClick(node, $event)\">\n <!-- Expand toggle -->\n <span class=\"pk-tree-toggle\"\n [style.visibility]=\"node.children?.length ? 'visible' : 'hidden'\"\n (click)=\"toggleExpand(node, $event)\">\n <pk-icon\n iconSet=\"material-symbols\"\n [name]=\"node._expanded ? 'keyboard_arrow_down' : 'keyboard_arrow_right'\"\n [size]=\"14\"\n color=\"#64748b\">\n </pk-icon>\n </span>\n <!-- Checkbox (single = radio style, multi = checkbox) -->\n @if (selection !== 'none') {\n <span class=\"pk-tree-check\" (click)=\"onCheckClick(node, $event)\">\n <!-- multi: tri-state checkbox -->\n @if (selection === 'multi') {\n <span class=\"pk-tree-cb\"\n [class.pk-tree-cb--checked]=\"node._selected\"\n [class.pk-tree-cb--indeterminate]=\"node._indeterminate && !node._selected\">\n @if (node._selected) {\n <pk-icon iconSet=\"material-symbols\" name=\"check\" [size]=\"11\" color=\"#fff\"></pk-icon>\n }\n @if (node._indeterminate && !node._selected) {\n <span class=\"pk-tree-cb-dash\"></span>\n }\n </span>\n }\n <!-- single: radio dot -->\n @if (selection === 'single') {\n <span class=\"pk-tree-radio\" [class.pk-tree-radio--checked]=\"node._selected\"></span>\n }\n </span>\n }\n <!-- Icon -->\n @if (node.icon) {\n <span class=\"pk-tree-icon\">\n <pk-icon [name]=\"node.icon\" [size]=\"16\" color=\"#64748b\"></pk-icon>\n </span>\n }\n <!-- Label -->\n <span class=\"pk-tree-label\">\n @if (node.routerLink) {\n <a\n [routerLink]=\"node.routerLink\"\n class=\"pk-tree-link\"\n (click)=\"$event.stopPropagation()\">{{ node.label }}</a>\n } @else {\n {{ node.label }}\n }\n </span>\n </div>\n <!-- Recursive children -->\n @if (node._expanded && node.children?.length) {\n <div class=\"pk-tree-children\">\n <pk-treeview-node\n [nodes]=\"node.children!\"\n [selection]=\"selection\"\n (nodeToggled)=\"nodeToggled.emit($event)\"\n (selectionChanged)=\"selectionChanged.emit($event)\">\n </pk-treeview-node>\n </div>\n }\n </li>\n }\n </ul>\n `,\n styles: [`\n .pk-tree-list { list-style: none; margin: 0; padding: 0; }\n .pk-tree-item { margin: 0; }\n .pk-tree-row {\n display: flex; align-items: center; gap: 2px;\n padding: 4px 6px; border-radius: 4px; cursor: pointer;\n user-select: none; transition: background 0.15s;\n }\n .pk-tree-row:hover { background: #f1f5f9; }\n .pk-tree-row--selected { background: #e0f2fe; }\n .pk-tree-toggle { display: inline-flex; align-items: center; width: 18px; cursor: pointer; flex-shrink: 0; }\n .pk-tree-check { display: inline-flex; align-items: center; flex-shrink: 0; margin-right: 2px; }\n .pk-tree-icon { display: inline-flex; align-items: center; flex-shrink: 0; }\n .pk-tree-label { font-size: 14px; color: #1e293b; flex: 1; }\n .pk-tree-link { color: inherit; text-decoration: none; }\n .pk-tree-link:hover { text-decoration: underline; }\n .pk-tree-children { padding-left: 20px; }\n\n /* Checkbox */\n .pk-tree-cb {\n width: 15px; height: 15px; border-radius: 3px;\n border: 1.5px solid #94a3b8; background: #fff;\n display: inline-flex; align-items: center; justify-content: center;\n transition: border-color 0.15s, background 0.15s;\n }\n .pk-tree-cb--checked { background: #0ea5e9; border-color: #0ea5e9; }\n .pk-tree-cb--indeterminate { border-color: #0ea5e9; }\n .pk-tree-cb-dash {\n width: 8px; height: 2px; background: #0ea5e9; border-radius: 1px; display: block;\n }\n\n /* Radio */\n .pk-tree-radio {\n width: 14px; height: 14px; border-radius: 50%;\n border: 1.5px solid #94a3b8; background: #fff;\n display: inline-flex; align-items: center; justify-content: center;\n transition: border-color 0.15s;\n }\n .pk-tree-radio--checked {\n border-color: #0ea5e9;\n box-shadow: inset 0 0 0 3px #0ea5e9;\n }\n `]\n})\nexport class PkTreeviewNodeComponent {\n @Input() nodes: TreeNode[] = [];\n @Input() selection: TreeSelectionMode = 'none';\n @Output() nodeToggled = new EventEmitter<TreeNode>();\n @Output() selectionChanged = new EventEmitter<TreeNode[]>();\n\n toggleExpand(node: TreeNode, e: Event): void {\n e.stopPropagation();\n node._expanded = !node._expanded;\n this.nodeToggled.emit(node);\n }\n\n onRowClick(node: TreeNode, e: Event): void {\n if (this.selection === 'none') {\n this.toggleExpand(node, e);\n } else {\n this.onCheckClick(node, e);\n }\n }\n\n onCheckClick(node: TreeNode, e: Event): void {\n e.stopPropagation();\n if (this.selection === 'single') {\n this.clearAllSelection(this.nodes);\n node._selected = true;\n } else if (this.selection === 'multi') {\n const newState = !node._selected;\n this.setNodeAndChildren(node, newState);\n }\n this.selectionChanged.emit(this.getSelected(this.nodes));\n }\n\n private clearAllSelection(nodes: TreeNode[]): void {\n for (const n of nodes) {\n n._selected = false;\n if (n.children) this.clearAllSelection(n.children);\n }\n }\n\n private setNodeAndChildren(node: TreeNode, selected: boolean): void {\n node._selected = selected;\n node._indeterminate = false;\n if (node.children) {\n for (const c of node.children) this.setNodeAndChildren(c, selected);\n }\n }\n\n private getSelected(nodes: TreeNode[]): TreeNode[] {\n const result: TreeNode[] = [];\n for (const n of nodes) {\n if (n._selected) result.push(n);\n if (n.children) result.push(...this.getSelected(n.children));\n }\n return result;\n }\n}\n","import {\n Component, Input, Output, EventEmitter,\n OnChanges, SimpleChanges, ChangeDetectionStrategy, ChangeDetectorRef\n} from '@angular/core';\n\nimport { PkIcon } from '../pk-icon/pk-icon';\nimport { PkTreeviewNodeComponent } from './pk-treeview-node.component';\nimport { TreeNode, TreeSelectionMode } from './pk-treeview.model';\n\n@Component({\n selector: 'pk-treeview',\n imports: [PkIcon, PkTreeviewNodeComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"pk-treeview\">\n \n <!-- Select All (multi only) -->\n @if (selection === 'multi' && showSelectAll) {\n <div class=\"pk-tree-select-all\">\n <span class=\"pk-tree-cb\"\n [class.pk-tree-cb--checked]=\"allSelected\"\n [class.pk-tree-cb--indeterminate]=\"someSelected && !allSelected\"\n (click)=\"toggleSelectAll()\">\n @if (allSelected) {\n <pk-icon iconSet=\"material-symbols\" name=\"check\" [size]=\"11\" color=\"#fff\"></pk-icon>\n }\n @if (someSelected && !allSelected) {\n <span class=\"pk-tree-cb-dash\"></span>\n }\n </span>\n <span class=\"pk-tree-select-all-label\" (click)=\"toggleSelectAll()\">เลือกทั้งหมด</span>\n </div>\n }\n \n <pk-treeview-node\n [nodes]=\"nodes\"\n [selection]=\"selection\"\n (nodeToggled)=\"onNodeToggled($event)\"\n (selectionChanged)=\"onSelectionChanged($event)\">\n </pk-treeview-node>\n </div>\n `,\n styles: [`\n .pk-treeview {\n font-family: inherit;\n font-size: 14px;\n }\n .pk-tree-select-all {\n display: flex; align-items: center; gap: 6px;\n padding: 4px 8px 6px 8px;\n border-bottom: 1px solid #e2e8f0;\n margin-bottom: 4px;\n cursor: pointer;\n }\n .pk-tree-select-all-label {\n font-size: 13px; color: #475569; font-weight: 500;\n user-select: none;\n }\n .pk-tree-cb {\n width: 15px; height: 15px; border-radius: 3px;\n border: 1.5px solid #94a3b8; background: #fff;\n display: inline-flex; align-items: center; justify-content: center;\n transition: border-color 0.15s, background 0.15s; flex-shrink: 0;\n }\n .pk-tree-cb--checked { background: #0ea5e9; border-color: #0ea5e9; }\n .pk-tree-cb--indeterminate { border-color: #0ea5e9; }\n .pk-tree-cb-dash {\n width: 8px; height: 2px; background: #0ea5e9; border-radius: 1px; display: block;\n }\n `]\n})\nexport class PkTreeviewComponent implements OnChanges {\n /** Tree data */\n @Input() nodes: TreeNode[] = [];\n /** 'none' | 'single' | 'multi' */\n @Input() selection: TreeSelectionMode = 'none';\n /** Show \"เลือกทั้งหมด\" row (multi only) */\n @Input() showSelectAll: boolean = true;\n /** Initially expanded depth (0 = root collapsed) */\n @Input() expandDepth: number = 1;\n\n @Output() selected = new EventEmitter<TreeNode[]>();\n @Output() nodeToggle = new EventEmitter<TreeNode>();\n\n allSelected = false;\n someSelected = false;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['nodes'] && this.nodes) {\n this.initKeys(this.nodes, '', 0);\n this.expandToDepth(this.nodes, 0);\n this.updateSelectAllState();\n }\n }\n\n private initKeys(nodes: TreeNode[], prefix: string, depth: number): void {\n nodes.forEach((n, i) => {\n n.key = n.key ?? `${prefix}${i}`;\n n._selected = n._selected ?? false;\n n._indeterminate = false;\n n._expanded = n._expanded ?? false;\n if (n.children?.length) this.initKeys(n.children, `${n.key}-`, depth + 1);\n });\n }\n\n private expandToDepth(nodes: TreeNode[], depth: number): void {\n for (const n of nodes) {\n n._expanded = n._expanded === true || depth < this.expandDepth;\n if (n.children?.length) this.expandToDepth(n.children, depth + 1);\n }\n }\n\n toggleSelectAll(): void {\n const target = !this.allSelected;\n this.setAll(this.nodes, target);\n this.updateSelectAllState();\n this.selected.emit(this.getSelected(this.nodes));\n this.cdr.markForCheck();\n }\n\n onNodeToggled(node: TreeNode): void {\n this.nodeToggle.emit(node);\n this.cdr.markForCheck();\n }\n\n onSelectionChanged(selectedNodes: TreeNode[]): void {\n if (this.selection === 'multi') {\n this.updateParentStates(this.nodes);\n this.updateSelectAllState();\n }\n this.selected.emit(selectedNodes);\n this.cdr.markForCheck();\n }\n\n private setAll(nodes: TreeNode[], selected: boolean): void {\n for (const n of nodes) {\n n._selected = selected;\n n._indeterminate = false;\n if (n.children?.length) this.setAll(n.children, selected);\n }\n }\n\n /** Returns true=all-selected, false=none, 'indeterminate'=some */\n private updateParentStates(nodes: TreeNode[]): 'all' | 'none' | 'some' {\n let allSel = true, noneSel = true;\n for (const n of nodes) {\n if (n.children?.length) {\n const childState = this.updateParentStates(n.children);\n if (childState === 'all') {\n n._selected = true;\n n._indeterminate = false;\n } else if (childState === 'none') {\n n._selected = false;\n n._indeterminate = false;\n } else {\n n._selected = false;\n n._indeterminate = true;\n }\n }\n if (!n._selected) allSel = false;\n if (n._selected || n._indeterminate) noneSel = false;\n }\n if (allSel) return 'all';\n if (noneSel) return 'none';\n return 'some';\n }\n\n private updateSelectAllState(): void {\n const state = this.calcSelectState(this.nodes);\n this.allSelected = state === 'all';\n this.someSelected = state === 'some';\n }\n\n private calcSelectState(nodes: TreeNode[]): 'all' | 'none' | 'some' {\n if (!nodes.length) return 'none';\n const leafs = this.getAllLeafs(nodes);\n if (!leafs.length) return 'none';\n const selCount = leafs.filter(n => n._selected).length;\n if (selCount === leafs.length) return 'all';\n if (selCount === 0) return 'none';\n return 'some';\n }\n\n private getAllLeafs(nodes: TreeNode[]): TreeNode[] {\n const result: TreeNode[] = [];\n for (const n of nodes) {\n if (!n.children?.length) result.push(n);\n else result.push(...this.getAllLeafs(n.children));\n }\n return result;\n }\n\n private getSelected(nodes: TreeNode[]): TreeNode[] {\n const result: TreeNode[] = [];\n for (const n of nodes) {\n if (n._selected) result.push(n);\n if (n.children) result.push(...this.getSelected(n.children));\n }\n return result;\n }\n\n /** Public API: get currently selected nodes */\n getSelection(): TreeNode[] {\n return this.getSelected(this.nodes);\n }\n\n /** Public API: clear all selection */\n clearSelection(): void {\n this.setAll(this.nodes, false);\n this.updateSelectAllState();\n this.cdr.markForCheck();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { PkTreeviewComponent } from './pk-treeview.component';\nimport { PkTreeviewNodeComponent } from './pk-treeview-node.component';\n\n@NgModule({\n imports: [PkTreeviewComponent, PkTreeviewNodeComponent],\n exports: [PkTreeviewComponent, PkTreeviewNodeComponent]\n})\nexport class PkTreeviewModule { }\n","import { Component, input, output, signal, computed, forwardRef, ElementRef, inject } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SelectOption, SelectMode } from './pk-select.interface';\n\n@Component({\n selector: 'pk-select',\n standalone: true,\n imports: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PkSelectComponent),\n multi: true\n }\n ],\n host: {\n '(document:click)': 'onDocumentClick($event)'\n },\n template: `\n <div class=\"pk-select-container\">\n <div \n class=\"pk-select-trigger\"\n [class.pk-select-trigger-open]=\"isOpen()\"\n [class.pk-select-trigger-disabled]=\"disabled()\"\n (click)=\"toggleDropdown()\">\n <span class=\"pk-select-value\">\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n <span class=\"pk-select-placeholder\">{{ placeholder() }}</span>\n }\n </span>\n <span class=\"pk-select-arrow\" [class.pk-select-arrow-open]=\"isOpen()\">▼</span>\n </div>\n\n @if (isOpen()) {\n <div class=\"pk-select-dropdown\">\n @if (searchable()) {\n <div class=\"pk-select-search\">\n <input \n type=\"text\"\n class=\"pk-select-search-input\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (click)=\"$event.stopPropagation()\"\n placeholder=\"ค้นหา...\" />\n </div>\n }\n\n <div class=\"pk-select-options\">\n @if (filteredOptions().length === 0) {\n <div class=\"pk-select-no-options\">ไม่พบข้อมูล</div>\n }\n\n @for (option of filteredOptions(); track getOptionValue(option)) {\n <div \n class=\"pk-select-option\"\n [class.pk-select-option-selected]=\"isSelected(getOptionValue(option))\"\n [class.pk-select-option-disabled]=\"option.disabled\"\n (click)=\"!option.disabled && selectOption(option)\">\n \n @if (mode() === 'multi') {\n <input \n type=\"checkbox\"\n class=\"pk-select-checkbox\"\n [checked]=\"isSelected(getOptionValue(option))\"\n [disabled]=\"option.disabled\"\n (click)=\"onCheckboxClick(option, $event)\"\n (change)=\"$event.stopPropagation()\" />\n }\n \n <span class=\"pk-select-option-label\">{{ option.label }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n `,\n styles: `\n .pk-select-container {\n position: relative;\n width: 100%;\n }\n\n .pk-select-trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n background-color: white;\n cursor: pointer;\n transition: all 0.2s;\n min-height: 38px;\n }\n\n .pk-select-trigger:hover:not(.pk-select-trigger-disabled) {\n border-color: #3b82f6;\n }\n\n .pk-select-trigger-open {\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n\n .pk-select-trigger-disabled {\n background-color: #f3f4f6;\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .pk-select-value {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .pk-select-placeholder {\n color: #9ca3af;\n }\n\n .pk-select-arrow {\n margin-left: 8px;\n font-size: 12px;\n color: #6b7280;\n transition: transform 0.2s;\n }\n\n .pk-select-arrow-open {\n transform: rotate(180deg);\n }\n\n .pk-select-dropdown {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n background-color: white;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n z-index: 1000;\n max-height: 300px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .pk-select-search {\n padding: 8px;\n border-bottom: 1px solid #e5e7eb;\n }\n\n .pk-select-search-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid #d1d5db;\n border-radius: 4px;\n font-size: 14px;\n outline: none;\n }\n\n .pk-select-search-input:focus {\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n\n .pk-select-options {\n overflow-y: auto;\n max-height: 250px;\n }\n\n .pk-select-option {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n cursor: pointer;\n transition: background-color 0.2s;\n }\n\n .pk-select-option:hover:not(.pk-select-option-disabled) {\n background-color: #f3f4f6;\n }\n\n .pk-select-option-selected {\n background-color: #dbeafe;\n color: #1e40af;\n }\n\n .pk-select-option-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .pk-select-checkbox {\n margin-right: 8px;\n cursor: pointer;\n }\n\n .pk-select-option-label {\n flex: 1;\n }\n\n .pk-select-no-options {\n padding: 16px 12px;\n text-align: center;\n color: #9ca3af;\n font-size: 14px;\n }\n `\n})\nexport class PkSelectComponent implements ControlValueAccessor {\n private elementRef = inject(ElementRef);\n \n options = input.required<SelectOption[]>();\n mode = input<SelectMode>('single');\n placeholder = input<string>('เลือก...');\n searchable = input<boolean>(false);\n disabled = input<boolean>(false);\n labelField = input<string>('label');\n valueField = input<string>('value');\n returnObjects = input<boolean>(false);\n\n change = output<any>();\n\n isOpen = signal<boolean>(false);\n searchQuery = signal<string>('');\n selectedValues = signal<(string | number)[]>([]);\n\n private onChange: (value: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n filteredOptions = computed(() => {\n const query = this.searchQuery().toLowerCase();\n if (!query) return this.options();\n \n return this.options().filter(option => \n this.getOptionLabel(option).toLowerCase().includes(query)\n );\n });\n\n displayValue = computed(() => {\n const selected = this.selectedValues();\n const opts = this.options();\n if (selected.length === 0) return '';\n\n if (this.mode() === 'single') {\n const option = opts.find(o => this.getOptionValue(o) === selected[0]);\n return option ? this.getOptionLabel(option) : '';\n } else {\n const labels = selected\n .map(val => {\n const option = opts.find(o => this.getOptionValue(o) === val);\n return option ? this.getOptionLabel(option) : '';\n })\n .filter(Boolean);\n return labels.join(', ');\n }\n });\n\n toggleDropdown(): void {\n if (this.disabled()) return;\n this.isOpen.update(open => !open);\n if (!this.isOpen()) {\n this.searchQuery.set('');\n }\n }\n\n selectOption(option: SelectOption): void {\n if (option.disabled) return;\n const optionValue = this.getOptionValue(option);\n\n if (this.mode() === 'single') {\n this.selectedValues.set([optionValue]);\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.emitValue();\n } else {\n const current = [...this.selectedValues()];\n const index = current.indexOf(optionValue);\n \n if (index > -1) {\n current.splice(index, 1);\n } else {\n current.push(optionValue);\n }\n this.selectedValues.set(current);\n this.emitValue();\n }\n }\n\n isSelected(value: string | number): boolean {\n return this.selectedValues().includes(value);\n }\n\n onSearchInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.searchQuery.set(target.value);\n }\n\n onDocumentClick(event: MouseEvent): void {\n // Close dropdown when clicking outside\n const clickedInside = this.elementRef.nativeElement.contains(event.target);\n if (!clickedInside && this.isOpen()) {\n this.isOpen.set(false);\n this.searchQuery.set('');\n }\n }\n\n onCheckboxClick(option: SelectOption, event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (option.disabled) {\n return;\n }\n\n this.selectOption(option);\n }\n\n private emitValue(): void {\n const selected = this.selectedValues();\n let value: any;\n\n if (this.returnObjects()) {\n const selectedOptions = selected\n .map(selectedValue => this.options().find(option => this.getOptionValue(option) === selectedValue))\n .filter(Boolean);\n\n value = this.mode() === 'single'\n ? selectedOptions[0] ?? null\n : selectedOptions;\n } else {\n value = this.mode() === 'single'\n ? selected[0] ?? null\n : selected;\n }\n \n this.onChange(value);\n this.onTouched();\n this.change.emit(value);\n }\n\n writeValue(value: any): void {\n if (value === null || value === undefined) {\n this.selectedValues.set([]);\n } else if (Array.isArray(value)) {\n this.selectedValues.set(value.map(item => this.extractIncomingValue(item)));\n } else {\n this.selectedValues.set([this.extractIncomingValue(value)]);\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n // Handled by disabled input\n }\n\n private getOptionLabel(option: SelectOption): string {\n const field = this.labelField();\n const fallbackField = this.valueField();\n const value = option?.[field] ?? option?.label ?? option?.[fallbackField] ?? option?.value ?? '';\n return `${value}`;\n }\n\n getOptionValue(option: SelectOption): string | number {\n const field = this.valueField();\n const fallbackField = this.labelField();\n return option?.[field] ?? option?.value ?? option?.[fallbackField] ?? option?.label ?? '';\n }\n\n private extractIncomingValue(value: any): string | number {\n if (value !== null && typeof value === 'object') {\n return value?.[this.valueField()] ?? value?.value ?? value?.[this.labelField()] ?? value?.label ?? '';\n }\n return value;\n }\n}\n","import {\n Component,\n input,\n signal,\n computed,\n effect,\n ChangeDetectionStrategy,\n forwardRef,\n inject,\n ElementRef,\n HostListener,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { AutocompleteOption, AutocompleteFetchFn } from './pk-autocomplete.interface';\n\n@Component({\n selector: 'pk-autocomplete',\n standalone: true,\n imports: [FormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PkAutocompleteComponent),\n multi: true,\n },\n ],\n template: `\n <div class=\"relative w-full\">\n <!-- Input -->\n <div class=\"relative\">\n <input\n #inputElement\n type=\"text\"\n [value]=\"displayValue()\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (keydown)=\"onKeyDown($event)\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n class=\"w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:bg-gray-100 disabled:cursor-not-allowed\"\n [class.pr-10]=\"loading() || (searchTerm() && !loading())\"\n />\n \n <!-- Loading Spinner or Clear Button -->\n @if (loading()) {\n <div class=\"absolute right-3 top-1/2 -translate-y-1/2\">\n <div class=\"pk-spinner pk-spinner-sm\"></div>\n </div>\n } @else if (searchTerm() && !disabled()) {\n <button\n type=\"button\"\n (click)=\"clear()\"\n class=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600\">\n <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n }\n </div>\n\n <!-- Dropdown -->\n @if (isOpen() && !disabled()) {\n <div class=\"absolute z-50 w-full mt-1 bg-white border border-gray-300 rounded-lg shadow-lg max-h-60 overflow-auto\">\n @if (loading()) {\n <div class=\"px-4 py-8 text-center text-gray-500\">\n <div class=\"pk-spinner pk-spinner-sm mx-auto mb-2\"></div>\n <p class=\"text-sm\">กำลังค้นหา...</p>\n </div>\n } @else if (filteredOptions().length === 0) {\n <div class=\"px-4 py-8 text-center text-gray-500\">\n <svg class=\"w-12 h-12 mx-auto mb-2 text-gray-300\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9.172 16.172a4 4 0 015.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"/>\n </svg>\n <p class=\"text-sm\">ไม่พบข้อมูล</p>\n @if (searchTerm()) {\n <p class=\"text-xs mt-1\">ลองค้นหาด้วยคำอื่น</p>\n }\n </div>\n } @else {\n @for (option of filteredOptions(); track option.value; let idx = $index) {\n <button\n type=\"button\"\n (click)=\"selectOption(option)\"\n [disabled]=\"option.disabled\"\n class=\"w-full px-4 py-2 text-left hover:bg-blue-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n [class.bg-blue-100]=\"highlightedIndex() === idx\"\n [class.font-medium]=\"isSelected(option)\">\n {{ option.label }}\n @if (isSelected(option)) {\n <span class=\"float-right text-blue-600\">✓</span>\n }\n </button>\n }\n }\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PkAutocompleteComponent implements ControlValueAccessor {\n private elementRef = inject(ElementRef);\n\n // Inputs\n options = input<AutocompleteOption[]>([]);\n fetchFn = input<AutocompleteFetchFn | null>(null);\n placeholder = input<string>('ค้นหา...');\n minChars = input<number>(1);\n debounceTime = input<number>(300);\n disabled = input<boolean>(false);\n displayKey = input<string>('label');\n\n // State\n searchTerm = signal<string>('');\n isOpen = signal<boolean>(false);\n loading = signal<boolean>(false);\n highlightedIndex = signal<number>(-1);\n selectedValue = signal<any>(null);\n fetchedOptions = signal<AutocompleteOption[]>([]);\n\n private debounceTimer: any = null;\n private onChange: (value: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n // Auto-fetch when search term changes\n effect(() => {\n const term = this.searchTerm();\n const fn = this.fetchFn();\n const min = this.minChars();\n\n if (fn && term.length >= min) {\n this.performSearch(term);\n }\n });\n }\n\n // Computed\n filteredOptions = computed(() => {\n const fetchFn = this.fetchFn();\n const term = this.searchTerm().toLowerCase().trim();\n\n // If using fetchFn, return fetched options\n if (fetchFn) {\n return this.fetchedOptions();\n }\n\n // Otherwise filter local options\n const opts = this.options();\n if (!term) return opts;\n\n return opts.filter(opt =>\n opt.label.toLowerCase().includes(term)\n );\n });\n\n displayValue = computed(() => {\n const selected = this.selectedValue();\n if (!selected) return this.searchTerm();\n\n const opts = this.fetchFn() ? this.fetchedOptions() : this.options();\n const option = opts.find(opt => opt.value === selected);\n return option ? option.label : this.searchTerm();\n });\n\n @HostListener('document:click', ['$event'])\n onClickOutside(event: MouseEvent) {\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.close();\n }\n }\n\n onInput(event: Event) {\n const input = event.target as HTMLInputElement;\n const value = input.value;\n this.searchTerm.set(value);\n this.isOpen.set(true);\n this.highlightedIndex.set(-1);\n\n // Clear selection if input is cleared\n if (!value) {\n this.selectedValue.set(null);\n this.onChange(null);\n }\n\n // Debounce search\n if (this.fetchFn()) {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n\n if (value.length >= this.minChars()) {\n this.debounceTimer = setTimeout(() => {\n this.performSearch(value);\n }, this.debounceTime());\n }\n }\n }\n\n onFocus() {\n if (!this.disabled()) {\n this.isOpen.set(true);\n \n // If no search term, fetch or show all options\n if (!this.searchTerm() && this.fetchFn()) {\n this.performSearch('');\n }\n }\n }\n\n onKeyDown(event: KeyboardEvent) {\n const opts = this.filteredOptions();\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.isOpen.set(true);\n } else {\n const newIndex = Math.min(this.highlightedIndex() + 1, opts.length - 1);\n this.highlightedIndex.set(newIndex);\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n const newIndex = Math.max(this.highlightedIndex() - 1, 0);\n this.highlightedIndex.set(newIndex);\n break;\n\n case 'Enter':\n event.preventDefault();\n const idx = this.highlightedIndex();\n if (idx >= 0 && idx < opts.length) {\n this.selectOption(opts[idx]);\n }\n break;\n\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n }\n }\n\n async performSearch(term: string) {\n const fn = this.fetchFn();\n if (!fn) return;\n\n this.loading.set(true);\n try {\n const results = await fn(term);\n this.fetchedOptions.set(results);\n } catch (error) {\n console.error('Autocomplete fetch error:', error);\n this.fetchedOptions.set([]);\n } finally {\n this.loading.set(false);\n }\n }\n\n selectOption(option: AutocompleteOption) {\n if (option.disabled) return;\n\n this.selectedValue.set(option.value);\n this.searchTerm.set(option.label);\n this.onChange(option.value);\n this.onTouched();\n this.close();\n }\n\n clear() {\n this.searchTerm.set('');\n this.selectedValue.set(null);\n this.onChange(null);\n this.isOpen.set(false);\n }\n\n close() {\n this.isOpen.set(false);\n this.highlightedIndex.set(-1);\n }\n\n isSelected(option: AutocompleteOption): boolean {\n return this.selectedValue() === option.value;\n }\n\n // ControlValueAccessor implementation\n writeValue(value: any): void {\n this.selectedValue.set(value);\n \n // Find and set display text\n if (value) {\n const opts = this.fetchFn() ? this.fetchedOptions() : this.options();\n const option = opts.find(opt => opt.value === value);\n if (option) {\n this.searchTerm.set(option.label);\n }\n } else {\n this.searchTerm.set('');\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n // Handled by input() signal\n }\n}\n","import { Component, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output } from '@angular/core';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'pk-typeahead',\n standalone: true,\n imports: [NgClass, NgStyle],\n templateUrl: './pk-typeahead.component.html',\n styleUrls: ['./pk-typeahead.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PkTypeaheadComponent),\n multi: true\n }\n ]\n})\nexport class PkTypeaheadComponent implements ControlValueAccessor {\n @Input() items: any[] = [];\n @Input() placeholder: string = '';\n @Input() disabled: boolean = false;\n @Input() style: string = '';\n @Input() customClass: string = '';\n @Input() customStyle: { [key: string]: string } = { width: '100%' };\n @Input() labelField: string = 'label';\n @Input() valueField: string = 'value';\n @Input() allowCustomValue: boolean = true;\n @Input() maxItems: number = 12;\n @Input() minChars: number = 0;\n @Output() itemSelected = new EventEmitter<any>();\n\n value: string = '';\n isOpen: boolean = false;\n highlightedIndex: number = -1;\n\n onChange: (value: any) => void = () => {};\n onTouch: () => void = () => {};\n\n constructor(private elementRef: ElementRef) {}\n\n get filteredItems(): any[] {\n const keyword = (this.value || '').trim().toLowerCase();\n const normalizedItems = this.items || [];\n if (keyword.length < this.minChars) {\n return normalizedItems.slice(0, this.maxItems);\n }\n\n return normalizedItems\n .filter(item => this.getItemLabel(item).toLowerCase().includes(keyword))\n .slice(0, this.maxItems);\n }\n\n writeValue(value: any): void {\n this.value = value || '';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value = target.value;\n this.onChange(this.value);\n this.isOpen = true;\n this.highlightedIndex = this.filteredItems.length ? 0 : -1;\n }\n\n onFocus(): void {\n if (this.disabled) {\n return;\n }\n this.isOpen = true;\n this.highlightedIndex = this.filteredItems.length ? 0 : -1;\n }\n\n onBlur(): void {\n this.onTouch();\n if (!this.allowCustomValue) {\n const exactMatch = (this.items || []).find(item => this.getItemLabel(item) === this.value);\n if (!exactMatch) {\n this.value = '';\n this.onChange(this.value);\n }\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (!this.isOpen && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {\n this.isOpen = true;\n }\n\n if (!this.filteredItems.length) {\n if (event.key === 'Escape') {\n this.isOpen = false;\n }\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.highlightedIndex = (this.highlightedIndex + 1) % this.filteredItems.length;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.highlightedIndex = this.highlightedIndex <= 0 ? this.filteredItems.length - 1 : this.highlightedIndex - 1;\n }\n\n if (event.key === 'Enter' && this.highlightedIndex >= 0) {\n event.preventDefault();\n this.selectItem(this.filteredItems[this.highlightedIndex]);\n }\n\n if (event.key === 'Escape') {\n this.isOpen = false;\n }\n }\n\n selectItem(item: any): void {\n this.value = this.getItemValue(item);\n this.onChange(this.value);\n this.itemSelected.emit(item);\n this.isOpen = false;\n this.highlightedIndex = -1;\n }\n\n getItemLabel(item: any): string {\n if (item == null) {\n return '';\n }\n if (typeof item === 'string' || typeof item === 'number') {\n return `${item}`;\n }\n return `${item[this.labelField] ?? item[this.valueField] ?? ''}`;\n }\n\n getItemValue(item: any): string {\n if (item == null) {\n return '';\n }\n if (typeof item === 'string' || typeof item === 'number') {\n return `${item}`;\n }\n return `${item[this.valueField] ?? item[this.labelField] ?? ''}`;\n }\n\n trackByItem(_: number, item: any): string {\n return this.getItemValue(item);\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event): void {\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.isOpen = false;\n this.highlightedIndex = -1;\n }\n }\n}","<div class=\"pk-typeahead\" [ngClass]=\"customClass\" [ngStyle]=\"customStyle\">\n <input\n type=\"text\"\n class=\"pk-typeahead-input\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [style]=\"style\"\n autocomplete=\"off\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\">\n\n @if (isOpen && filteredItems.length > 0) {\n <div class=\"pk-typeahead-panel\">\n @for (item of filteredItems; track trackByItem($index, item); let index = $index) {\n <button\n type=\"button\"\n class=\"pk-typeahead-option\"\n [class.active]=\"index === highlightedIndex\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"selectItem(item)\">\n {{ getItemLabel(item) }}\n </button>\n }\n </div>\n }\n</div>","/*\n * Public API Surface of ngx-pk-ui\n */\n\n// pk-tabs\nexport * from './lib/pk-tabs/pk-tab';\nexport * from './lib/pk-tabs/pk-tabs';\n\n// pk-toastr\nexport * from './lib/pk-toastr/pk-toastr.model';\nexport * from './lib/pk-toastr/pk-toastr.service';\nexport * from './lib/pk-toastr/pk-toastr';\n\n// pk-alert\nexport * from './lib/pk-alert/pk-alert.model';\nexport * from './lib/pk-alert/pk-alert.service';\nexport * from './lib/pk-alert/pk-alert';\n\n// pk-modal\nexport * from './lib/pk-modal/pk-modal.model';\nexport * from './lib/pk-modal/pk-modal-header';\nexport * from './lib/pk-modal/pk-modal-body';\nexport * from './lib/pk-modal/pk-modal-footer';\nexport * from './lib/pk-modal/pk-modal';\n\n// pk-icon\nexport * from './lib/pk-icon/pk-icon.model';\nexport * from './lib/pk-icon/pk-icon';\n\n// pk-datagrid\nexport * from './lib/pk-datagrid/pk-datagrid.module';\nexport * from './lib/pk-datagrid/pk-datagrid.component';\nexport * from './lib/pk-datagrid/pk-datagrid.directives';\nexport * from './lib/pk-datagrid/pk-dg-column.component';\nexport * from './lib/pk-datagrid/pk-dg-row.component';\nexport * from './lib/pk-datagrid/pk-dg-cell.component';\nexport * from './lib/pk-datagrid/pk-dg-row-detail.component';\nexport * from './lib/pk-datagrid/pk-dg-footer.component';\nexport * from './lib/pk-datagrid/pk-dg-pagination.component';\nexport * from './lib/pk-datagrid/pk-dg-page-size.component';\n\n// pk-datepicker\nexport * from './lib/pk-datepicker/pk-datepicker.component';\nexport * from './lib/pk-datepicker/datepicker.service';\nexport * from './lib/pk-datepicker/holiday.service';\n\n// pk-progress\nexport * from './lib/pk-progress/pk-progress.interface';\nexport * from './lib/pk-progress/pk-progress.component';\n\n// pk-treeview\nexport * from './lib/pk-treeview/pk-treeview.component';\nexport * from './lib/pk-treeview/pk-treeview-node.component';\nexport * from './lib/pk-treeview/pk-treeview.module';\nexport * from './lib/pk-treeview/pk-treeview.model';\n\n// pk-select\nexport * from './lib/pk-select/pk-select.interface';\nexport * from './lib/pk-select/pk-select.component';\n\n// pk-autocomplete\nexport * from './lib/pk-autocomplete/pk-autocomplete.interface';\nexport * from './lib/pk-autocomplete/pk-autocomplete.component';\n\n// pk-typeahead\nexport * from './lib/pk-typeahead/pk-typeahead.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.PkIcon","i1.PkDgRowComponent","i2.PkDgRowComponent","i1.DatepickerService","i2.HolidayService"],"mappings":"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"}