@shival99/z-ui 1.9.20 → 1.9.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"shival99-z-ui-components-z-kanban.mjs","sources":["../../../../libs/core-ui/components/z-kanban/z-kanban.types.ts","../../../../libs/core-ui/components/z-kanban/z-kanban.variants.ts","../../../../libs/core-ui/components/z-kanban/z-kanban.component.ts","../../../../libs/core-ui/components/z-kanban/z-kanban.component.html","../../../../libs/core-ui/components/z-kanban/shival99-z-ui-components-z-kanban.ts"],"sourcesContent":["import type { ZUploadFile } from '@shival99/z-ui/components/z-upload';\n\nexport type ZKanbanPriority = 'risk' | 'high' | 'medium' | 'low';\n\nexport type ZKanbanCardDensity = 'compact' | 'comfortable';\n\nexport interface ZKanbanPriorityOption {\n value: ZKanbanPriority;\n labelKey: string;\n}\n\nexport interface ZKanbanChecklistItem {\n id: string;\n label: string;\n done: boolean;\n}\n\nexport interface ZKanbanActivityItem {\n id: string;\n actor: string;\n action: string;\n createdAt: string;\n}\n\nexport interface ZKanbanTask {\n id: string;\n code?: string;\n title: string;\n description?: string;\n status: string;\n priority: ZKanbanPriority;\n assignees: string[];\n startDate?: string;\n endDate?: string;\n dueDate?: string;\n commentsCount?: number;\n attachmentsCount?: number;\n attachments?: ZUploadFile[];\n checklist?: ZKanbanChecklistItem[];\n activity?: ZKanbanActivityItem[];\n completed?: boolean;\n}\n\nexport interface ZKanbanColumn {\n id: string;\n title: string;\n tasks: ZKanbanTask[];\n}\n\nexport interface ZKanbanDragData {\n taskId: string;\n columnId: string;\n}\n\nexport interface ZKanbanTaskDropEvent {\n taskId: string;\n fromColumnId: string;\n toColumnId: string;\n previousIndex: number;\n currentIndex: number;\n}\n\nexport interface ZKanbanTaskSaveEvent {\n task: ZKanbanTask;\n columnId: string;\n previousTask: ZKanbanTask;\n}\n\nexport interface ZKanbanTaskCreateEvent {\n task: ZKanbanTask;\n columnId: string;\n}\n\nexport const Z_KANBAN_PRIORITY_OPTIONS: readonly ZKanbanPriorityOption[] = [\n { value: 'risk', labelKey: 'i18n_z_ui_kanban_priority_risk' },\n { value: 'high', labelKey: 'i18n_z_ui_kanban_priority_high' },\n { value: 'medium', labelKey: 'i18n_z_ui_kanban_priority_medium' },\n { value: 'low', labelKey: 'i18n_z_ui_kanban_priority_low' },\n];\n","import { cva } from 'class-variance-authority';\n\nexport const zKanbanColumnVariants = cva(\n [\n 'bg-muted/25 border-border/70 flex h-full min-h-[23rem] w-[20rem] shrink-0 flex-col rounded-2xl border',\n 'backdrop-blur-[1px] transition-shadow duration-200',\n ],\n {\n variants: {\n zDensity: {\n compact: 'p-2.5',\n comfortable: 'p-3',\n },\n },\n defaultVariants: {\n zDensity: 'comfortable',\n },\n }\n);\n\nexport const zKanbanTaskCardVariants = cva(\n [\n 'bg-card text-card-foreground border-border shadow-sm ring-0 ring-transparent',\n 'group relative w-full overflow-hidden rounded-lg border',\n 'transition-[border-color,box-shadow,transform,opacity] duration-150 ease-out',\n 'hover:shadow-sm',\n ],\n {\n variants: {\n zDensity: {\n compact: 'space-y-2 p-2.5',\n comfortable: 'space-y-2.5 p-3',\n },\n zPriority: {\n risk: '',\n high: '',\n medium: '',\n low: '',\n },\n },\n defaultVariants: {\n zDensity: 'comfortable',\n zPriority: 'medium',\n },\n }\n);\n\nexport const zKanbanPriorityBadgeVariants = cva(\n 'inline-flex items-center rounded-md px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wide',\n {\n variants: {\n zPriority: {\n risk: 'bg-red-500/15 text-red-600 dark:text-red-400',\n high: 'bg-orange-500/15 text-orange-600 dark:text-orange-400',\n medium: 'bg-blue-500/15 text-blue-600 dark:text-blue-400',\n low: 'bg-emerald-500/15 text-emerald-600 dark:text-emerald-400',\n },\n zActive: {\n true: 'ring-2 ring-primary/30 ring-offset-2 ring-offset-background',\n false: '',\n },\n },\n defaultVariants: {\n zPriority: 'medium',\n zActive: false,\n },\n }\n);\n\nexport const zKanbanChecklistRowVariants = cva('flex w-full items-center gap-2 rounded-md px-1.5 py-1 text-sm', {\n variants: {\n zDone: {\n true: 'text-muted-foreground bg-muted/35',\n false: 'text-foreground hover:bg-muted/25',\n },\n },\n defaultVariants: {\n zDone: false,\n },\n});\n","import {\n CdkDrag,\n CdkDragEnd,\n CdkDragHandle,\n CdkDragMove,\n CdkDropList,\n type CdkDragDrop,\n moveItemInArray,\n} from '@angular/cdk/drag-drop';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n OnDestroy,\n output,\n signal,\n type ElementRef,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZCalendarComponent } from '@shival99/z-ui/components/z-calendar';\nimport { ZCheckboxComponent } from '@shival99/z-ui/components/z-checkbox';\nimport { ZEditorComponent } from '@shival99/z-ui/components/z-editor';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport type { ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZModalComponent } from '@shival99/z-ui/components/z-modal';\nimport { ZSelectComponent, type ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZUploadComponent, type ZUploadFile } from '@shival99/z-ui/components/z-upload';\nimport { ZTranslateService } from '@shival99/z-ui/services';\nimport { zMergeClasses, zTransform } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport {\n Z_KANBAN_PRIORITY_OPTIONS,\n type ZKanbanCardDensity,\n type ZKanbanChecklistItem,\n type ZKanbanColumn,\n type ZKanbanDragData,\n type ZKanbanPriority,\n type ZKanbanTask,\n type ZKanbanTaskCreateEvent,\n type ZKanbanTaskDropEvent,\n type ZKanbanTaskSaveEvent,\n} from './z-kanban.types';\nimport {\n zKanbanChecklistRowVariants,\n zKanbanColumnVariants,\n zKanbanPriorityBadgeVariants,\n zKanbanTaskCardVariants,\n} from './z-kanban.variants';\n\n@Component({\n selector: 'z-kanban',\n imports: [\n FormsModule,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n ZButtonComponent,\n ZCalendarComponent,\n ZCheckboxComponent,\n ZEditorComponent,\n ZIconComponent,\n ZInputComponent,\n ZModalComponent,\n ZSelectComponent,\n ZTooltipDirective,\n ZUploadComponent,\n TranslatePipe,\n ],\n standalone: true,\n templateUrl: './z-kanban.component.html',\n styleUrl: './z-kanban.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n },\n exportAs: 'zKanban',\n})\nexport class ZKanbanComponent implements OnDestroy {\n private readonly _zTranslate = inject(ZTranslateService);\n private readonly _priorityLabelByValue: Record<ZKanbanPriority, string> = {\n risk: 'i18n_z_ui_kanban_priority_risk',\n high: 'i18n_z_ui_kanban_priority_high',\n medium: 'i18n_z_ui_kanban_priority_medium',\n low: 'i18n_z_ui_kanban_priority_low',\n };\n\n private readonly _priorityIconByValue: Record<ZKanbanPriority, ZIcon> = {\n risk: 'lucideCircleAlert',\n high: 'lucideFlag',\n medium: 'lucideTimer',\n low: 'lucideCircleDot',\n };\n\n private readonly _priorityIconClassByValue: Record<ZKanbanPriority, string> = {\n risk: 'text-red-500',\n high: 'text-orange-500',\n medium: 'text-blue-500',\n low: 'text-emerald-500',\n };\n\n public readonly zTaskDrop = output<ZKanbanTaskDropEvent>();\n public readonly zTaskSave = output<ZKanbanTaskSaveEvent>();\n public readonly zTaskClick = output<ZKanbanTask>();\n public readonly zTaskCreate = output<ZKanbanTaskCreateEvent>();\n\n public readonly class = input<ClassValue>('');\n public readonly zColumns = model<ZKanbanColumn[]>([]);\n public readonly zTitle = input('i18n_z_ui_kanban_board_title');\n public readonly zSubtitle = input('i18n_z_ui_kanban_board_subtitle');\n public readonly zSearch = model('');\n public readonly zShowToolbar = input(true, { transform: zTransform });\n public readonly zAllowCreateTask = input(true, { transform: zTransform });\n public readonly zDisabled = input(false, { transform: zTransform });\n public readonly zDensity = input<ZKanbanCardDensity>('comfortable');\n\n protected readonly boardViewportRef = viewChild<ElementRef<HTMLDivElement>>('boardViewport');\n\n protected readonly editorVisible = signal(false);\n protected readonly editingColumnId = signal<string | null>(null);\n protected readonly editingTaskId = signal<string | null>(null);\n protected readonly draftTitle = signal('');\n protected readonly draftDescription = signal('');\n protected readonly draftStatus = signal('');\n protected readonly draftPriority = signal<ZKanbanPriority>('medium');\n protected readonly draftAssignees = signal<string[]>([]);\n protected readonly draftStartDate = signal<Date | null>(null);\n protected readonly draftEndDate = signal<Date | null>(null);\n protected readonly draftChecklist = signal<ZKanbanChecklistItem[]>([]);\n protected readonly draftChecklistItemLabel = signal('');\n protected readonly draftAttachments = signal<ZUploadFile[]>([]);\n protected readonly draftComment = signal('');\n\n protected readonly isDraggingTask = signal(false);\n\n private _dragAutoScrollRafId: number | null = null;\n private _dragAutoScrollVelocity = 0;\n private _lastDragFinishedAt = 0;\n\n protected readonly hostClasses = computed(() => zMergeClasses('z-kanban block w-full min-w-0', this.class()));\n\n protected readonly connectedDropListIds = computed(() => this.zColumns().map(column => column.id));\n\n protected readonly isSearchActive = computed(() => this.zSearch().trim().length > 0);\n\n protected readonly filteredColumns = computed<ZKanbanColumn[]>(() => {\n const query = this.zSearch().trim().toLowerCase();\n if (!query) {\n return this.zColumns();\n }\n\n return this.zColumns().map(column => ({\n ...column,\n tasks: column.tasks.filter(task => this._taskMatchesQuery(task, query)),\n }));\n });\n\n protected readonly activeTask = computed<ZKanbanTask | null>(() => {\n const columnId = this.editingColumnId();\n const taskId = this.editingTaskId();\n if (!columnId || !taskId) {\n return null;\n }\n\n return this._findTask(columnId, taskId);\n });\n\n protected readonly editorMeta = computed(() => {\n const task = this.activeTask();\n if (!task) {\n return '';\n }\n\n if (task.code) {\n return task.code;\n }\n\n return task.id;\n });\n\n protected readonly checklistProgress = computed(() => {\n const checklist = this.draftChecklist();\n if (checklist.length === 0) {\n return 0;\n }\n\n const doneCount = checklist.filter(item => item.done).length;\n return Math.round((doneCount / checklist.length) * 100);\n });\n\n protected readonly checklistDoneCount = computed(() => this.draftChecklist().filter(item => item.done).length);\n protected readonly isEditorSaveDisabled = computed(() => !this.draftTitle().trim());\n protected readonly isCommentSubmitDisabled = computed(() => !this.draftComment().trim());\n protected readonly checklistDoneRowClass = `${zKanbanChecklistRowVariants({ zDone: true })}`;\n protected readonly checklistPendingRowClass = `${zKanbanChecklistRowVariants({ zDone: false })}`;\n\n protected readonly statusOptions = computed<ZSelectOption<string>[]>(() => {\n this._zTranslate.currentLang();\n return this.zColumns().map(column => ({\n value: column.id,\n label: this._zTranslate.instant(column.title),\n icon: this._getStatusIcon(column.id),\n }));\n });\n\n protected readonly priorityOptions = Z_KANBAN_PRIORITY_OPTIONS;\n\n protected readonly prioritySelectOptions = computed<ZSelectOption<ZKanbanPriority>[]>(() => {\n this._zTranslate.currentLang();\n return this.priorityOptions.map(option => ({\n value: option.value,\n label: this._zTranslate.instant(option.labelKey),\n icon: this._priorityIconByValue[option.value],\n }));\n });\n\n protected readonly assigneeOptions = computed<ZSelectOption<string>[]>(() => {\n const assignees = new Set<string>();\n for (const column of this.zColumns()) {\n for (const task of column.tasks) {\n for (const assignee of task.assignees ?? []) {\n if (!assignee.trim()) {\n continue;\n }\n assignees.add(assignee.trim());\n }\n }\n }\n\n return Array.from(assignees)\n .sort((a, b) => a.localeCompare(b))\n .map(name => ({\n label: name,\n value: name,\n }));\n });\n\n protected readonly columnClass = computed(() => zKanbanColumnVariants({ zDensity: this.zDensity() }));\n\n protected readonly taskCardClassByPriority = computed<Record<ZKanbanPriority, string>>(() => {\n const density = this.zDensity();\n return {\n risk: zKanbanTaskCardVariants({ zDensity: density, zPriority: 'risk' }),\n high: zKanbanTaskCardVariants({ zDensity: density, zPriority: 'high' }),\n medium: zKanbanTaskCardVariants({ zDensity: density, zPriority: 'medium' }),\n low: zKanbanTaskCardVariants({ zDensity: density, zPriority: 'low' }),\n };\n });\n\n protected readonly priorityBadgeClassByPriority = computed<Record<ZKanbanPriority, string>>(() => ({\n risk: zKanbanPriorityBadgeVariants({ zPriority: 'risk', zActive: false }),\n high: zKanbanPriorityBadgeVariants({ zPriority: 'high', zActive: false }),\n medium: zKanbanPriorityBadgeVariants({ zPriority: 'medium', zActive: false }),\n low: zKanbanPriorityBadgeVariants({ zPriority: 'low', zActive: false }),\n }));\n\n protected readonly statusIconClassByValue = computed<Record<string, string>>(() => {\n const map: Record<string, string> = {};\n for (const option of this.statusOptions()) {\n map[option.value] = this._getStatusIconClass(option.value);\n }\n return map;\n });\n\n protected readonly priorityIconClassByValue = this._priorityIconClassByValue as Record<string, string>;\n\n protected readonly boardColumnsView = computed(() => {\n const taskCardClassByPriority = this.taskCardClassByPriority();\n const priorityBadgeClassByPriority = this.priorityBadgeClassByPriority();\n\n return this.filteredColumns().map(column => ({\n id: column.id,\n title: column.title,\n taskCount: column.tasks.length,\n rawTasks: column.tasks,\n tasks: column.tasks.map(task => {\n const assigneeViews = (task.assignees ?? []).map((assignee, index) => ({\n name: assignee,\n initials: this._getAssigneeInitials(assignee),\n className: this._getAssigneeAvatarClasses(assignee),\n zIndex: 30 - index,\n }));\n\n const visibleAssignees = assigneeViews.slice(0, 3);\n const hiddenAssignees = assigneeViews.slice(3);\n const checklistDoneCount = task.checklist?.filter(item => item.done).length ?? 0;\n const attachmentCount = task.attachments?.length ?? task.attachmentsCount ?? 0;\n const descriptionPreview = this._stripHtml(task.description ?? '').trim();\n\n return {\n id: task.id,\n columnId: column.id,\n code: task.code,\n title: task.title,\n descriptionPreview,\n priority: task.priority,\n priorityLabelKey: this._priorityLabelByValue[task.priority],\n priorityBadgeClass: priorityBadgeClassByPriority[task.priority],\n taskCardClass: taskCardClassByPriority[task.priority],\n dueDateLabel: this._formatDueDate(task.endDate ?? task.dueDate),\n commentsCount: task.commentsCount ?? 0,\n attachmentCount,\n checklistCount: task.checklist?.length ?? 0,\n checklistDoneCount,\n completed: !!task.completed,\n visibleAssignees,\n hiddenAssigneesCount: hiddenAssignees.length,\n hiddenAssigneesLabel: hiddenAssignees.map(item => item.name).join(', '),\n };\n }),\n }));\n });\n\n protected readonly activeTaskActivityView = computed(() =>\n (this.activeTask()?.activity ?? []).map(entry => ({\n id: entry.id,\n actor: entry.actor,\n action: entry.action,\n createdAtLabel: this._formatDateTime(entry.createdAt),\n }))\n );\n\n public createTaskInFirstColumn(): void {\n const firstColumnId = this.zColumns()[0]?.id;\n if (!firstColumnId) {\n return;\n }\n\n this.createTask(firstColumnId);\n }\n\n public onBoardSearchChange(value: string | number | null): void {\n this.zSearch.set(`${value ?? ''}`);\n }\n\n public onTaskHandleClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n public onTaskCardClick(columnId: string, taskId: string): void {\n if (Date.now() - this._lastDragFinishedAt < 140) {\n return;\n }\n\n this.openTaskEditor(columnId, taskId);\n }\n\n public onTaskDragStarted(): void {\n if (this.zDisabled() || this.isSearchActive()) {\n return;\n }\n\n this.isDraggingTask.set(true);\n }\n\n public onTaskDragMoved(event: CdkDragMove<ZKanbanDragData>): void {\n if (!this.isDraggingTask()) {\n return;\n }\n\n this._updateHorizontalAutoScroll(event.pointerPosition.x);\n }\n\n public onTaskDragEnded(event: CdkDragEnd<ZKanbanDragData>): void {\n this.isDraggingTask.set(false);\n\n const dragDistanceX = Math.abs(event.distance.x);\n const dragDistanceY = Math.abs(event.distance.y);\n if (dragDistanceX > 3 || dragDistanceY > 3) {\n this._lastDragFinishedAt = Date.now();\n }\n\n this._stopHorizontalAutoScroll();\n }\n\n public onTaskDrop(event: CdkDragDrop<ZKanbanTask[]>, toColumnId: string): void {\n if (this.zDisabled() || this.isSearchActive()) {\n return;\n }\n\n const fromColumnId = event.previousContainer.id;\n if (!fromColumnId) {\n return;\n }\n\n const sourceTask = this._findTaskByIndex(fromColumnId, event.previousIndex);\n if (!sourceTask) {\n return;\n }\n\n if (fromColumnId === toColumnId) {\n if (event.previousIndex === event.currentIndex) {\n return;\n }\n\n this._reorderTasksWithinColumn(toColumnId, event.previousIndex, event.currentIndex);\n this.zTaskDrop.emit({\n taskId: sourceTask.id,\n fromColumnId,\n toColumnId,\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n });\n return;\n }\n\n const movedTask: ZKanbanTask = {\n ...sourceTask,\n status: toColumnId,\n completed: toColumnId === 'done' ? true : sourceTask.completed,\n };\n\n this._moveTaskAcrossColumns(fromColumnId, toColumnId, event.previousIndex, event.currentIndex, movedTask);\n this.zTaskDrop.emit({\n taskId: sourceTask.id,\n fromColumnId,\n toColumnId,\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n });\n }\n\n public createTask(columnId: string): void {\n if (!this.zAllowCreateTask() || this.zDisabled()) {\n return;\n }\n\n if (!columnId || !this._hasColumnId(columnId)) {\n return;\n }\n\n const newTask: ZKanbanTask = {\n id: this._createId('task'),\n title: this._zTranslate.instant('i18n_z_ui_kanban_new_task_title'),\n status: columnId,\n priority: 'medium',\n assignees: [],\n checklist: [],\n attachments: [],\n activity: [],\n };\n\n this.zColumns.update(columns =>\n columns.map(column => {\n if (column.id !== columnId) {\n return column;\n }\n\n return {\n ...column,\n tasks: [newTask, ...column.tasks],\n };\n })\n );\n\n this.zTaskCreate.emit({\n task: newTask,\n columnId,\n });\n\n this.openTaskEditor(columnId, newTask.id);\n }\n\n public openTaskEditor(columnId: string, taskId: string): void {\n const task = this._findTask(columnId, taskId);\n if (!task) {\n return;\n }\n\n this.editingColumnId.set(columnId);\n this.editingTaskId.set(taskId);\n this.draftTitle.set(task.title);\n this.draftDescription.set(task.description ?? '');\n this.draftStatus.set(task.status || columnId);\n this.draftPriority.set(task.priority);\n this.draftAssignees.set([...(task.assignees ?? [])]);\n this.draftStartDate.set(this._toDate(task.startDate));\n this.draftEndDate.set(this._toDate(task.endDate ?? task.dueDate));\n this.draftChecklist.set((task.checklist ?? []).map(item => ({ ...item })));\n this.draftChecklistItemLabel.set('');\n this.draftAttachments.set((task.attachments ?? []).map(item => ({ ...item })));\n this.draftComment.set('');\n this.editorVisible.set(true);\n this.zTaskClick.emit(task);\n }\n\n public closeEditor(): void {\n this.editorVisible.set(false);\n }\n\n public saveTaskChanges(): void {\n const sourceColumnId = this.editingColumnId();\n const taskId = this.editingTaskId();\n if (!sourceColumnId || !taskId) {\n return;\n }\n\n const previousTask = this._findTask(sourceColumnId, taskId);\n if (!previousTask) {\n return;\n }\n\n const trimmedTitle = this.draftTitle().trim();\n if (!trimmedTitle) {\n return;\n }\n\n const status = this._hasColumnId(this.draftStatus()) ? this.draftStatus() : sourceColumnId;\n const description = this._normalizeEditorContent(this.draftDescription());\n const normalizedRange = this._normalizeDateRange(this.draftStartDate(), this.draftEndDate());\n const startDate = this._toDateOnlyString(normalizedRange.startDate);\n const endDate = this._toDateOnlyString(normalizedRange.endDate);\n const dueDate = endDate;\n const assignees = this._sanitizeAssignees(this.draftAssignees());\n const attachments = this.draftAttachments().map(item => ({ ...item }));\n\n const updatedTask: ZKanbanTask = {\n ...previousTask,\n title: trimmedTitle,\n description,\n status,\n priority: this.draftPriority(),\n assignees,\n startDate,\n endDate,\n dueDate,\n checklist: this.draftChecklist().map(item => ({ ...item })),\n attachments,\n attachmentsCount: attachments.length,\n completed: status === 'done',\n };\n\n this._replaceTaskAcrossColumns(sourceColumnId, status, updatedTask);\n this.zTaskSave.emit({\n task: updatedTask,\n columnId: status,\n previousTask,\n });\n\n this.closeEditor();\n }\n\n public addChecklistItem(): void {\n const label = this.draftChecklistItemLabel().trim();\n if (!label) {\n return;\n }\n\n const item: ZKanbanChecklistItem = {\n id: this._createId('check'),\n label,\n done: false,\n };\n\n this.draftChecklist.update(items => [...items, item]);\n this.draftChecklistItemLabel.set('');\n }\n\n public toggleChecklistItem(itemId: string, checked: boolean): void {\n this.draftChecklist.update(items =>\n items.map(item => {\n if (item.id !== itemId) {\n return item;\n }\n\n return {\n ...item,\n done: checked,\n };\n })\n );\n }\n\n public removeChecklistItem(itemId: string): void {\n this.draftChecklist.update(items => items.filter(item => item.id !== itemId));\n }\n\n public onEditorStatusChange(value: string | null): void {\n if (!value) {\n return;\n }\n\n this.draftStatus.set(value);\n }\n\n public onEditorPriorityChange(value: ZKanbanPriority | null): void {\n if (!value) {\n return;\n }\n\n this.draftPriority.set(value);\n }\n\n public onEditorAssigneesChange(value: string[] | null): void {\n if (!value) {\n this.draftAssignees.set([]);\n return;\n }\n\n this.draftAssignees.set(this._sanitizeAssignees(value));\n }\n\n public onEditorStartDateChange(value: Date | null): void {\n this.draftStartDate.set(value);\n }\n\n public onEditorEndDateChange(value: Date | null): void {\n this.draftEndDate.set(value);\n }\n\n public onDraftAttachmentsChange(files: ZUploadFile[] | null): void {\n this.draftAttachments.set([...(files ?? [])]);\n }\n\n public submitTaskComment(): void {\n const sourceColumnId = this.editingColumnId();\n const taskId = this.editingTaskId();\n if (!sourceColumnId || !taskId) {\n return;\n }\n\n const comment = this.draftComment().trim();\n if (!comment) {\n return;\n }\n\n const previousTask = this._findTask(sourceColumnId, taskId);\n if (!previousTask) {\n return;\n }\n\n const targetColumnId = this._hasColumnId(previousTask.status) ? previousTask.status : sourceColumnId;\n const updatedTask: ZKanbanTask = {\n ...previousTask,\n activity: this._appendCommentActivity(previousTask.activity ?? [], comment),\n commentsCount: (previousTask.commentsCount ?? previousTask.activity?.length ?? 0) + 1,\n };\n\n this._replaceTaskAcrossColumns(sourceColumnId, targetColumnId, updatedTask);\n this.zTaskSave.emit({\n task: updatedTask,\n columnId: targetColumnId,\n previousTask,\n });\n this.draftComment.set('');\n }\n\n public onEditorVisibleChange(visible: boolean): void {\n this.editorVisible.set(visible);\n }\n\n public onEditorAfterClose(): void {\n if (this.editorVisible()) {\n return;\n }\n\n this._resetEditorState();\n }\n\n public ngOnDestroy(): void {\n this._stopHorizontalAutoScroll();\n }\n\n private _getStatusIcon(status: string): ZIcon {\n const normalized = status.trim().toLowerCase();\n if (normalized === 'done') {\n return 'lucideCheckCircle';\n }\n if (normalized === 'in-progress' || normalized === 'inprogress' || normalized === 'doing') {\n return 'lucideTimer';\n }\n if (normalized === 'review' || normalized === 'qa') {\n return 'lucideListChecks';\n }\n if (normalized === 'blocked') {\n return 'lucideBan';\n }\n\n return 'lucideCircleDot';\n }\n\n private _getStatusIconClass(status: string): string {\n const normalized = status.trim().toLowerCase();\n if (normalized === 'done') {\n return 'text-emerald-500';\n }\n if (normalized === 'in-progress' || normalized === 'inprogress' || normalized === 'doing') {\n return 'text-primary';\n }\n if (normalized === 'review' || normalized === 'qa') {\n return 'text-indigo-500';\n }\n if (normalized === 'blocked') {\n return 'text-red-500';\n }\n\n return 'text-muted-foreground';\n }\n\n private _getAssigneeInitials(name: string): string {\n const normalized = name.trim();\n if (!normalized) {\n return '--';\n }\n\n const parts = normalized.split(/\\s+/);\n const first = parts[0]?.charAt(0) ?? '';\n const second = parts.length > 1 ? (parts[parts.length - 1]?.charAt(0) ?? '') : '';\n return `${first}${second}`.toUpperCase();\n }\n\n private _getAssigneeAvatarClasses(name: string): string {\n const palette = [\n 'bg-emerald-100 text-emerald-700',\n 'bg-sky-100 text-sky-700',\n 'bg-amber-100 text-amber-700',\n 'bg-violet-100 text-violet-700',\n 'bg-rose-100 text-rose-700',\n 'bg-cyan-100 text-cyan-700',\n ];\n\n let hash = 0;\n for (let index = 0; index < name.length; index += 1) {\n hash = (hash * 31 + name.charCodeAt(index)) | 0;\n }\n\n const paletteIndex = Math.abs(hash) % palette.length;\n return `${palette[paletteIndex]} border-background shadow-xs border`;\n }\n\n private _formatDueDate(value?: string): string {\n if (!value) {\n return '';\n }\n\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return value;\n }\n\n return parsed.toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n });\n }\n\n private _formatDateTime(value: string): string {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return value;\n }\n\n return parsed.toLocaleString(undefined, {\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n }\n\n private _resetEditorState(): void {\n this.editingColumnId.set(null);\n this.editingTaskId.set(null);\n this.draftTitle.set('');\n this.draftDescription.set('');\n this.draftStatus.set('');\n this.draftPriority.set('medium');\n this.draftAssignees.set([]);\n this.draftStartDate.set(null);\n this.draftEndDate.set(null);\n this.draftChecklist.set([]);\n this.draftChecklistItemLabel.set('');\n this.draftAttachments.set([]);\n this.draftComment.set('');\n }\n\n private _taskMatchesQuery(task: ZKanbanTask, query: string): boolean {\n const haystack = [\n task.code ?? '',\n task.title,\n this._stripHtml(task.description ?? ''),\n ...(task.assignees ?? []),\n task.startDate ?? '',\n task.endDate ?? '',\n task.dueDate ?? '',\n ]\n .join(' ')\n .toLowerCase();\n\n return haystack.includes(query);\n }\n\n private _findTask(columnId: string, taskId: string): ZKanbanTask | null {\n const column = this.zColumns().find(item => item.id === columnId);\n if (!column) {\n return null;\n }\n\n const task = column.tasks.find(item => item.id === taskId);\n if (!task) {\n return null;\n }\n\n return task;\n }\n\n private _findTaskByIndex(columnId: string, index: number): ZKanbanTask | null {\n const column = this.zColumns().find(item => item.id === columnId);\n if (!column) {\n return null;\n }\n\n if (index < 0 || index >= column.tasks.length) {\n return null;\n }\n\n return column.tasks[index] ?? null;\n }\n\n private _reorderTasksWithinColumn(columnId: string, fromIndex: number, toIndex: number): void {\n this.zColumns.update(columns =>\n columns.map(column => {\n if (column.id !== columnId) {\n return column;\n }\n\n if (fromIndex < 0 || fromIndex >= column.tasks.length) {\n return column;\n }\n\n if (toIndex < 0) {\n return column;\n }\n\n const tasks = [...column.tasks];\n const lastIndex = tasks.length - 1;\n const clampedIndex = Math.max(0, Math.min(toIndex, lastIndex));\n moveItemInArray(tasks, fromIndex, clampedIndex);\n return {\n ...column,\n tasks,\n };\n })\n );\n }\n\n private _moveTaskAcrossColumns(\n fromColumnId: string,\n toColumnId: string,\n fromIndex: number,\n toIndex: number,\n movedTask: ZKanbanTask\n ): void {\n this.zColumns.update(columns => {\n const sourceColumn = columns.find(column => column.id === fromColumnId);\n const targetColumn = columns.find(column => column.id === toColumnId);\n if (!sourceColumn || !targetColumn) {\n return columns;\n }\n\n if (fromIndex < 0 || fromIndex >= sourceColumn.tasks.length) {\n return columns;\n }\n\n const sourceTasks = [...sourceColumn.tasks];\n sourceTasks.splice(fromIndex, 1);\n\n const targetTasks = [...targetColumn.tasks];\n const clampedIndex = Math.max(0, Math.min(toIndex, targetTasks.length));\n targetTasks.splice(clampedIndex, 0, movedTask);\n\n return columns.map(column => {\n if (column.id === fromColumnId) {\n return {\n ...column,\n tasks: sourceTasks,\n };\n }\n\n if (column.id === toColumnId) {\n return {\n ...column,\n tasks: targetTasks,\n };\n }\n\n return column;\n });\n });\n }\n\n private _replaceTaskAcrossColumns(sourceColumnId: string, targetColumnId: string, task: ZKanbanTask): void {\n this.zColumns.update(columns => {\n if (sourceColumnId === targetColumnId) {\n return columns.map(column => {\n if (column.id !== sourceColumnId) {\n return column;\n }\n\n return {\n ...column,\n tasks: column.tasks.map(currentTask => {\n if (currentTask.id !== task.id) {\n return currentTask;\n }\n\n return task;\n }),\n };\n });\n }\n\n return columns.map(column => {\n if (column.id === sourceColumnId) {\n return {\n ...column,\n tasks: column.tasks.filter(currentTask => currentTask.id !== task.id),\n };\n }\n\n if (column.id === targetColumnId) {\n return {\n ...column,\n tasks: [task, ...column.tasks.filter(currentTask => currentTask.id !== task.id)],\n };\n }\n\n return column;\n });\n });\n }\n\n private _hasColumnId(columnId: string): boolean {\n return this.zColumns().some(column => column.id === columnId);\n }\n\n private _sanitizeAssignees(value: string[]): string[] {\n const normalized = value.map(item => item.trim()).filter(item => item.length > 0);\n\n return Array.from(new Set(normalized));\n }\n\n private _appendCommentActivity(\n existing: ZKanbanTask['activity'],\n comment: string\n ): NonNullable<ZKanbanTask['activity']> {\n if (!comment) {\n return [...(existing ?? [])];\n }\n\n return [\n {\n id: this._createId('activity'),\n actor: this._zTranslate.instant('i18n_z_ui_kanban_activity_you'),\n action: comment,\n createdAt: new Date().toISOString(),\n },\n ...(existing ?? []),\n ];\n }\n\n private _normalizeEditorContent(value: string): string | undefined {\n const normalized = value.trim();\n if (!normalized) {\n return undefined;\n }\n\n const text = this._stripHtml(normalized).trim();\n if (!text) {\n return undefined;\n }\n\n return normalized;\n }\n\n private _stripHtml(value: string): string {\n if (!value) {\n return '';\n }\n\n return value\n .replace(/<[^>]+>/g, ' ')\n .replace(/&nbsp;/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n }\n\n private _toDate(value?: string): Date | null {\n if (!value) {\n return null;\n }\n\n const parsed = new Date(`${value}T00:00:00`);\n if (Number.isNaN(parsed.getTime())) {\n return null;\n }\n\n return parsed;\n }\n\n private _toDateOnlyString(value: Date | null): string | undefined {\n if (!value) {\n return undefined;\n }\n\n const year = value.getFullYear();\n const month = `${value.getMonth() + 1}`.padStart(2, '0');\n const day = `${value.getDate()}`.padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n private _normalizeDateRange(\n startDate: Date | null,\n endDate: Date | null\n ): {\n startDate: Date | null;\n endDate: Date | null;\n } {\n if (!startDate || !endDate) {\n return {\n startDate,\n endDate,\n };\n }\n\n if (startDate.getTime() <= endDate.getTime()) {\n return {\n startDate,\n endDate,\n };\n }\n\n return {\n startDate: endDate,\n endDate: startDate,\n };\n }\n\n private _updateHorizontalAutoScroll(pointerX: number): void {\n const viewport = this.boardViewportRef()?.nativeElement;\n if (!viewport) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n const rect = viewport.getBoundingClientRect();\n const threshold = Math.min(120, rect.width * 0.2);\n if (threshold <= 0) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n const maxSpeed = 18;\n const leftEdge = rect.left + threshold;\n if (pointerX < leftEdge) {\n const ratio = Math.min(1, (leftEdge - pointerX) / threshold);\n this._startHorizontalAutoScroll(-maxSpeed * ratio);\n return;\n }\n\n const rightEdge = rect.right - threshold;\n if (pointerX > rightEdge) {\n const ratio = Math.min(1, (pointerX - rightEdge) / threshold);\n this._startHorizontalAutoScroll(maxSpeed * ratio);\n return;\n }\n\n this._stopHorizontalAutoScroll();\n }\n\n private _startHorizontalAutoScroll(velocity: number): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n if (!Number.isFinite(velocity) || Math.abs(velocity) < 0.8) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n this._dragAutoScrollVelocity = velocity;\n if (this._dragAutoScrollRafId !== null) {\n return;\n }\n\n const tick = (): void => {\n if (!this.isDraggingTask()) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n const viewport = this.boardViewportRef()?.nativeElement;\n if (!viewport) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n const currentScrollLeft = viewport.scrollLeft;\n const maxScrollLeft = Math.max(0, viewport.scrollWidth - viewport.clientWidth);\n const nextScrollLeft = Math.min(maxScrollLeft, Math.max(0, currentScrollLeft + this._dragAutoScrollVelocity));\n\n if (nextScrollLeft === currentScrollLeft) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n viewport.scrollLeft = nextScrollLeft;\n this._dragAutoScrollRafId = window.requestAnimationFrame(tick);\n };\n\n this._dragAutoScrollRafId = window.requestAnimationFrame(tick);\n }\n\n private _stopHorizontalAutoScroll(): void {\n if (typeof window !== 'undefined' && this._dragAutoScrollRafId !== null) {\n window.cancelAnimationFrame(this._dragAutoScrollRafId);\n }\n\n this._dragAutoScrollRafId = null;\n this._dragAutoScrollVelocity = 0;\n }\n\n private _createId(prefix: string): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return `${prefix}-${crypto.randomUUID()}`;\n }\n\n return `${prefix}-${Date.now()}-${Math.random().toString(16).slice(2, 10)}`;\n }\n}\n","<div class=\"flex h-full min-h-0 min-w-0 flex-col gap-5\">\n @if (zShowToolbar()) {\n <header class=\"flex flex-col gap-3 md:flex-row md:items-center md:justify-between\">\n <div class=\"min-w-0\">\n <h2 class=\"text-foreground truncate text-xl font-bold\">{{ zTitle() | translate }}</h2>\n <p class=\"text-muted-foreground text-sm\">{{ zSubtitle() | translate }}</p>\n </div>\n\n <div class=\"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center\">\n <z-input\n class=\"w-full sm:w-80\"\n zSize=\"sm\"\n [zSearch]=\"true\"\n [zDebounce]=\"200\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_search_placeholder' | translate\"\n [ngModel]=\"zSearch()\"\n (zOnSearch)=\"onBoardSearchChange($event)\" />\n\n @if (zAllowCreateTask()) {\n <z-button zType=\"outline\" zSize=\"sm\" zTypeIcon=\"lucidePlus\" (click)=\"createTaskInFirstColumn()\">\n {{ 'i18n_z_ui_common_add' | translate }}\n </z-button>\n }\n </div>\n </header>\n }\n\n @if (isSearchActive()) {\n <p class=\"text-muted-foreground text-xs\">\n {{ 'i18n_z_ui_kanban_drag_disabled_while_search' | translate }}\n </p>\n }\n\n <div #boardViewport class=\"z-kanban-board min-h-0 flex-1 overflow-x-auto pb-2\">\n <div class=\"flex h-full min-h-[25rem] min-w-max items-stretch gap-4\">\n @for (column of boardColumnsView(); track column.id) {\n <section [class]=\"columnClass()\">\n <header class=\"mb-2 flex items-center justify-between gap-2 px-0.5\">\n <div class=\"flex min-w-0 items-center gap-2\">\n <h3 class=\"text-foreground truncate text-xs font-bold tracking-wide uppercase\">\n {{ column.title | translate }}\n </h3>\n <span\n class=\"bg-muted text-muted-foreground inline-flex min-w-5 items-center justify-center rounded-full px-1.5 py-0.5 text-[10px] font-bold\">\n {{ column.taskCount }}\n </span>\n </div>\n\n @if (zAllowCreateTask()) {\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:bg-muted hover:text-foreground inline-flex size-7 cursor-pointer items-center justify-center rounded-md transition-colors\"\n (click)=\"createTask(column.id)\">\n <z-icon zType=\"lucidePlus\" zSize=\"16\" />\n </button>\n }\n </header>\n\n <div\n cdkDropList\n [id]=\"column.id\"\n [cdkDropListData]=\"column.rawTasks\"\n [cdkDropListConnectedTo]=\"connectedDropListIds()\"\n [cdkDropListDisabled]=\"zDisabled() || isSearchActive()\"\n class=\"kanban-drop-list -mr-1 flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto p-0.5 pr-1\"\n (cdkDropListDropped)=\"onTaskDrop($event, column.id)\">\n @if (column.taskCount === 0) {\n <div\n class=\"border-border/70 text-muted-foreground flex h-24 items-center justify-center rounded-lg border border-dashed px-3 text-center text-xs\">\n @if (isSearchActive()) {\n {{ 'i18n_z_ui_kanban_no_matches' | translate }}\n } @else {\n {{ 'i18n_z_ui_kanban_drop_here' | translate }}\n }\n </div>\n }\n\n @for (task of column.tasks; track task.id) {\n <article\n cdkDrag\n cdkDragPreviewClass=\"z-kanban-drag-preview\"\n cdkDragPlaceholderClass=\"z-kanban-drag-placeholder\"\n [cdkDragData]=\"{ columnId: column.id, taskId: task.id }\"\n [cdkDragDisabled]=\"zDisabled() || isSearchActive()\"\n [class]=\"'kanban-card shrink-0 ' + task.taskCardClass\"\n (cdkDragStarted)=\"onTaskDragStarted()\"\n (cdkDragMoved)=\"onTaskDragMoved($event)\"\n (cdkDragEnded)=\"onTaskDragEnded($event)\"\n (click)=\"onTaskCardClick(column.id, task.id)\">\n <div class=\"flex items-start justify-between gap-2\">\n <div class=\"min-w-0 space-y-1\">\n @if (task.code) {\n <p class=\"text-muted-foreground text-[10px] font-semibold tracking-wide uppercase\">\n {{ task.code }}\n </p>\n }\n <h4 class=\"line-clamp-2 text-sm leading-5 font-semibold\">{{ task.title }}</h4>\n </div>\n\n <button\n cdkDragHandle\n type=\"button\"\n class=\"text-muted-foreground hover:bg-muted hover:text-foreground inline-flex size-6 shrink-0 cursor-grab items-center justify-center rounded-md transition-colors\"\n (click)=\"onTaskHandleClick($event)\">\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" />\n </button>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <span [class]=\"task.priorityBadgeClass\">\n {{ task.priorityLabelKey | translate }}\n </span>\n @if (task.completed) {\n <span class=\"inline-flex items-center gap-1 text-[11px] font-semibold text-emerald-500\">\n <z-icon zType=\"lucideCircleCheck\" zSize=\"12\" />\n {{ 'i18n_z_ui_kanban_done' | translate }}\n </span>\n }\n </div>\n\n @if (task.descriptionPreview) {\n <p class=\"text-muted-foreground line-clamp-3 text-xs leading-4\">{{ task.descriptionPreview }}</p>\n }\n\n <div class=\"text-muted-foreground flex flex-wrap items-center gap-3 text-[11px]\">\n @if (task.dueDateLabel) {\n <span class=\"inline-flex items-center gap-1\">\n <z-icon zType=\"lucideCalendar\" zSize=\"12\" />\n {{ task.dueDateLabel }}\n </span>\n }\n\n @if (task.commentsCount > 0) {\n <span class=\"inline-flex items-center gap-1\">\n <z-icon zType=\"lucideMessageSquare\" zSize=\"12\" />\n {{ task.commentsCount }}\n </span>\n }\n\n @if (task.attachmentCount > 0) {\n <span class=\"inline-flex items-center gap-1\">\n <z-icon zType=\"lucidePaperclip\" zSize=\"12\" />\n {{ task.attachmentCount }}\n </span>\n }\n\n @if (task.checklistCount > 0) {\n <span class=\"inline-flex items-center gap-1\">\n <z-icon zType=\"lucideListChecks\" zSize=\"12\" />\n {{ task.checklistDoneCount }}/{{ task.checklistCount }}\n </span>\n }\n </div>\n\n <footer class=\"flex items-center justify-between gap-2\">\n <div class=\"flex -space-x-2\">\n @for (assignee of task.visibleAssignees; track assignee.name) {\n <span\n z-tooltip\n zAlwaysShow\n zPosition=\"top\"\n [zContent]=\"assignee.name\"\n class=\"relative inline-flex size-6 items-center justify-center rounded-full text-[10px] font-bold\"\n [class]=\"assignee.className\"\n [style.zIndex]=\"assignee.zIndex\">\n {{ assignee.initials }}\n </span>\n }\n @if (task.hiddenAssigneesCount > 0) {\n <span\n z-tooltip\n zAlwaysShow\n zPosition=\"top\"\n [zContent]=\"task.hiddenAssigneesLabel\"\n class=\"bg-muted text-muted-foreground border-background relative inline-flex size-6 items-center justify-center rounded-full border text-[10px] font-bold shadow-xs\"\n [style.zIndex]=\"20\">\n +{{ task.hiddenAssigneesCount }}\n </span>\n }\n </div>\n\n <z-icon zType=\"lucideChevronRight\" zSize=\"14\" class=\"text-muted-foreground\" />\n </footer>\n </article>\n }\n </div>\n </section>\n }\n </div>\n </div>\n</div>\n\n<z-modal\n [zVisible]=\"editorVisible()\"\n zTitle=\"i18n_z_ui_kanban_editor_title\"\n [zDescription]=\"editorMeta()\"\n [zOkText]=\"'i18n_z_ui_common_save' | translate\"\n [zCancelText]=\"'i18n_z_ui_common_cancel' | translate\"\n zWidth=\"min(96vw, 72rem)\"\n zOverlay=\"blur\"\n [zOkDisabled]=\"isEditorSaveDisabled()\"\n (zVisibleChange)=\"onEditorVisibleChange($event)\"\n (zAfterClose)=\"onEditorAfterClose()\"\n (zOk)=\"saveTaskChanges()\"\n (zCancel)=\"closeEditor()\">\n @if (activeTask()) {\n <div class=\"grid gap-6 xl:grid-cols-[minmax(0,1fr)_20rem]\">\n <div class=\"space-y-5\">\n <section class=\"space-y-2\">\n <z-input\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_title' | translate\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_title_placeholder' | translate\"\n [zRequired]=\"true\"\n [ngModel]=\"draftTitle()\"\n (ngModelChange)=\"draftTitle.set($event)\" />\n </section>\n\n <section class=\"space-y-2\">\n <z-editor\n zSize=\"sm\"\n [zLabel]=\"'i18n_z_ui_kanban_description' | translate\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_description_placeholder' | translate\"\n [ngModel]=\"draftDescription()\"\n (ngModelChange)=\"draftDescription.set($event)\" />\n </section>\n\n <section class=\"grid gap-3 md:grid-cols-2\">\n <ng-template #statusSelectedTpl let-option>\n <span class=\"inline-flex min-w-0 items-center gap-2\">\n <z-icon\n [zType]=\"option.icon || 'lucideCircleDot'\"\n zSize=\"14\"\n [class]=\"statusIconClassByValue()[option.value] + ' shrink-0'\" />\n <span class=\"truncate\">{{ option.label }}</span>\n </span>\n </ng-template>\n\n <ng-template #statusOptionTpl let-option let-selected=\"selected\">\n <span class=\"inline-flex w-full min-w-0 items-center gap-2\">\n <z-icon\n [zType]=\"option.icon || 'lucideCircleDot'\"\n zSize=\"14\"\n [class]=\"statusIconClassByValue()[option.value] + ' shrink-0'\" />\n <span class=\"truncate\" [class.font-medium]=\"selected\">{{ option.label }}</span>\n </span>\n </ng-template>\n\n <ng-template #prioritySelectedTpl let-option>\n <span class=\"inline-flex min-w-0 items-center gap-2\">\n <z-icon\n [zType]=\"option.icon || 'lucideCircleDot'\"\n zSize=\"14\"\n [class]=\"priorityIconClassByValue[option.value] + ' shrink-0'\" />\n <span class=\"truncate\">{{ option.label }}</span>\n </span>\n </ng-template>\n\n <ng-template #priorityOptionTpl let-option let-selected=\"selected\">\n <span class=\"inline-flex w-full min-w-0 items-center gap-2\">\n <z-icon\n [zType]=\"option.icon || 'lucideCircleDot'\"\n zSize=\"14\"\n [class]=\"priorityIconClassByValue[option.value] + ' shrink-0'\" />\n <span class=\"truncate\" [class.font-medium]=\"selected\">{{ option.label }}</span>\n </span>\n </ng-template>\n\n <z-select\n class=\"w-full\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_status' | translate\"\n [zAllowClear]=\"false\"\n [zOptions]=\"statusOptions()\"\n [zSelectedTemplate]=\"statusSelectedTpl\"\n [zOptionTemplate]=\"statusOptionTpl\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_status_placeholder' | translate\"\n [ngModel]=\"draftStatus()\"\n (ngModelChange)=\"onEditorStatusChange($event)\" />\n\n <z-select\n class=\"w-full\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_priority' | translate\"\n [zAllowClear]=\"false\"\n [zOptions]=\"prioritySelectOptions()\"\n [zSelectedTemplate]=\"prioritySelectedTpl\"\n [zOptionTemplate]=\"priorityOptionTpl\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_priority_placeholder' | translate\"\n [ngModel]=\"draftPriority()\"\n (ngModelChange)=\"onEditorPriorityChange($event)\" />\n\n <z-select\n class=\"w-full md:col-span-2\"\n zMode=\"tags\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_assignees' | translate\"\n [zAllowClear]=\"true\"\n [zOptions]=\"assigneeOptions()\"\n [zMaxTagCount]=\"5\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_assignees_select_placeholder' | translate\"\n [ngModel]=\"draftAssignees()\"\n (ngModelChange)=\"onEditorAssigneesChange($event)\" />\n\n <z-calendar\n zMode=\"single\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_start_date' | translate\"\n zAllowClear\n zValueType=\"date\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_start_date' | translate\"\n [ngModel]=\"draftStartDate()\"\n (ngModelChange)=\"onEditorStartDateChange($event)\" />\n\n <z-calendar\n zMode=\"single\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_end_date' | translate\"\n zAllowClear\n zValueType=\"date\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_end_date' | translate\"\n [ngModel]=\"draftEndDate()\"\n (ngModelChange)=\"onEditorEndDateChange($event)\" />\n </section>\n\n <section class=\"space-y-3\">\n <div class=\"flex items-center justify-between gap-2\">\n <h4 class=\"text-sm font-semibold\">\n {{ 'i18n_z_ui_kanban_checklist' | translate }} ({{ checklistDoneCount() }}/{{ draftChecklist().length }})\n </h4>\n <span class=\"text-muted-foreground text-xs font-semibold\">{{ checklistProgress() }}%</span>\n </div>\n\n <div class=\"bg-muted h-2 w-full rounded-full\">\n <div class=\"bg-primary h-2 rounded-full transition-all\" [style.width.%]=\"checklistProgress()\"></div>\n </div>\n\n <div class=\"max-h-44 space-y-1 overflow-y-auto\">\n @for (item of draftChecklist(); track item.id) {\n <div [class]=\"item.done ? checklistDoneRowClass : checklistPendingRowClass\">\n <z-checkbox\n [class]=\"item.done ? 'min-w-0 flex-1 line-through' : 'min-w-0 flex-1'\"\n [zChecked]=\"item.done\"\n [zText]=\"item.label\"\n (zChange)=\"toggleChecklistItem(item.id, $event)\" />\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-destructive hover:bg-destructive/10 ml-auto inline-flex size-6 shrink-0 cursor-pointer items-center justify-center rounded transition-colors\"\n (click)=\"removeChecklistItem(item.id)\">\n <z-icon zType=\"lucideTrash2\" zSize=\"12\" />\n </button>\n </div>\n } @empty {\n <p class=\"text-muted-foreground bg-muted/35 rounded-md px-3 py-2 text-xs\">\n {{ 'i18n_z_ui_kanban_no_checklist_items' | translate }}\n </p>\n }\n </div>\n\n <div class=\"flex items-end gap-2\">\n <z-input\n class=\"flex-1\"\n zSize=\"lg\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_checklist_add_placeholder' | translate\"\n [ngModel]=\"draftChecklistItemLabel()\"\n (ngModelChange)=\"draftChecklistItemLabel.set($event)\"\n (zOnEnter)=\"addChecklistItem()\" />\n <button\n type=\"button\"\n zSize=\"lg\"\n z-button\n zType=\"outline\"\n zTypeIcon=\"lucidePlus\"\n (click)=\"addChecklistItem()\">\n {{ 'i18n_z_ui_common_add' | translate }}\n </button>\n </div>\n </section>\n\n <section class=\"space-y-2\">\n <z-upload\n [zLabel]=\"'i18n_z_ui_kanban_attachments' | translate\"\n [zNote]=\"'i18n_z_ui_kanban_attachments_note' | translate\"\n [zMultipleFile]=\"true\"\n [zShowProgress]=\"true\"\n [ngModel]=\"draftAttachments()\"\n (ngModelChange)=\"onDraftAttachmentsChange($event)\" />\n </section>\n </div>\n\n <aside\n class=\"bg-muted/25 border-border/70 flex h-[34rem] min-h-0 flex-col overflow-hidden rounded-lg border p-4 shadow-xs xl:h-[38rem]\">\n <section class=\"flex min-h-0 flex-1 flex-col gap-1.5\">\n <label class=\"text-muted-foreground text-[11px] font-semibold tracking-widest uppercase\">\n {{ 'i18n_z_ui_kanban_activity' | translate }}\n </label>\n <div class=\"-mr-3 min-h-0 flex-1 space-y-2 overflow-y-auto pr-3 pb-2\">\n @for (entry of activeTaskActivityView(); track entry.id) {\n <div class=\"border-border/70 bg-background/60 rounded-md border px-3 py-2\">\n <p class=\"text-xs font-semibold\">{{ entry.actor }}</p>\n <p class=\"text-muted-foreground mt-1 text-xs leading-4\">{{ entry.action }}</p>\n <p class=\"text-muted-foreground mt-1 text-[10px]\">{{ entry.createdAtLabel }}</p>\n </div>\n } @empty {\n <p class=\"text-muted-foreground bg-muted/40 rounded-md px-3 py-2 text-xs\">\n {{ 'i18n_z_ui_kanban_no_activity' | translate }}\n </p>\n }\n </div>\n </section>\n\n <section class=\"border-border/70 mt-3 shrink-0 space-y-2 border-t pt-3\">\n <z-input\n zType=\"textarea\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_add_comment' | translate\"\n [zRows]=\"3\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_comment_placeholder' | translate\"\n [ngModel]=\"draftComment()\"\n (ngModelChange)=\"draftComment.set($event)\" />\n\n <div class=\"flex justify-end pt-2\">\n <button\n type=\"button\"\n zTypeIcon=\"lucideSend\"\n z-button\n [disabled]=\"isCommentSubmitDisabled()\"\n (click)=\"submitTaskComment()\">\n {{ 'i18n_z_ui_kanban_comment_submit' | translate }}\n </button>\n </div>\n </section>\n </aside>\n </div>\n }\n</z-modal>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shival99-z-ui-components-z-kanban.mjs","sources":["../../../../libs/core-ui/components/z-kanban/z-kanban.types.ts","../../../../libs/core-ui/components/z-kanban/z-kanban.variants.ts","../../../../libs/core-ui/components/z-kanban/z-kanban.component.ts","../../../../libs/core-ui/components/z-kanban/z-kanban.component.html","../../../../libs/core-ui/components/z-kanban/shival99-z-ui-components-z-kanban.ts"],"sourcesContent":["import type { ZUploadFile } from '@shival99/z-ui/components/z-upload';\n\nexport type ZKanbanPriority = 'risk' | 'high' | 'medium' | 'low';\n\nexport type ZKanbanCardDensity = 'compact' | 'comfortable';\n\nexport interface ZKanbanPriorityOption {\n value: ZKanbanPriority;\n labelKey: string;\n}\n\nexport interface ZKanbanChecklistItem {\n id: string;\n label: string;\n done: boolean;\n}\n\nexport interface ZKanbanActivityItem {\n id: string;\n actor: string;\n action: string;\n createdAt: string;\n}\n\nexport interface ZKanbanTask {\n id: string;\n code?: string;\n title: string;\n description?: string;\n status: string;\n priority: ZKanbanPriority;\n assignees: string[];\n startDate?: string;\n endDate?: string;\n dueDate?: string;\n commentsCount?: number;\n attachmentsCount?: number;\n attachments?: ZUploadFile[];\n checklist?: ZKanbanChecklistItem[];\n activity?: ZKanbanActivityItem[];\n completed?: boolean;\n}\n\nexport interface ZKanbanColumn {\n id: string;\n title: string;\n tasks: ZKanbanTask[];\n}\n\nexport interface ZKanbanDragData {\n taskId: string;\n columnId: string;\n}\n\nexport interface ZKanbanTaskDropEvent {\n taskId: string;\n fromColumnId: string;\n toColumnId: string;\n previousIndex: number;\n currentIndex: number;\n}\n\nexport interface ZKanbanTaskSaveEvent {\n task: ZKanbanTask;\n columnId: string;\n previousTask: ZKanbanTask;\n}\n\nexport interface ZKanbanTaskCreateEvent {\n task: ZKanbanTask;\n columnId: string;\n}\n\nexport const Z_KANBAN_PRIORITY_OPTIONS: readonly ZKanbanPriorityOption[] = [\n { value: 'risk', labelKey: 'i18n_z_ui_kanban_priority_risk' },\n { value: 'high', labelKey: 'i18n_z_ui_kanban_priority_high' },\n { value: 'medium', labelKey: 'i18n_z_ui_kanban_priority_medium' },\n { value: 'low', labelKey: 'i18n_z_ui_kanban_priority_low' },\n];\n","import { cva } from 'class-variance-authority';\n\nexport const zKanbanColumnVariants = cva(\n [\n 'bg-muted/25 border-border/70 flex h-full min-h-[23rem] w-[20rem] shrink-0 flex-col rounded-2xl border',\n 'backdrop-blur-[1px] transition-shadow duration-200',\n ],\n {\n variants: {\n zDensity: {\n compact: 'p-2.5',\n comfortable: 'p-3',\n },\n },\n defaultVariants: {\n zDensity: 'comfortable',\n },\n }\n);\n\nexport const zKanbanTaskCardVariants = cva(\n [\n 'bg-card text-card-foreground border-border shadow-sm ring-0 ring-transparent',\n 'group relative w-full overflow-hidden rounded-lg border',\n 'transition-[border-color,box-shadow,transform,opacity] duration-150 ease-out',\n 'hover:shadow-sm',\n ],\n {\n variants: {\n zDensity: {\n compact: 'space-y-2 p-2.5',\n comfortable: 'space-y-2.5 p-3',\n },\n zPriority: {\n risk: '',\n high: '',\n medium: '',\n low: '',\n },\n },\n defaultVariants: {\n zDensity: 'comfortable',\n zPriority: 'medium',\n },\n }\n);\n\nexport const zKanbanPriorityBadgeVariants = cva(\n 'inline-flex items-center rounded-md px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wide',\n {\n variants: {\n zPriority: {\n risk: 'bg-red-500/15 text-red-600 dark:text-red-400',\n high: 'bg-orange-500/15 text-orange-600 dark:text-orange-400',\n medium: 'bg-blue-500/15 text-blue-600 dark:text-blue-400',\n low: 'bg-emerald-500/15 text-emerald-600 dark:text-emerald-400',\n },\n zActive: {\n true: 'ring-2 ring-primary/30 ring-offset-2 ring-offset-background',\n false: '',\n },\n },\n defaultVariants: {\n zPriority: 'medium',\n zActive: false,\n },\n }\n);\n\nexport const zKanbanChecklistRowVariants = cva('flex w-full items-center gap-2 rounded-md px-1.5 py-1 text-sm', {\n variants: {\n zDone: {\n true: 'text-muted-foreground bg-muted/35',\n false: 'text-foreground hover:bg-muted/25',\n },\n },\n defaultVariants: {\n zDone: false,\n },\n});\n","import {\n CdkDrag,\n CdkDragEnd,\n CdkDragHandle,\n CdkDragMove,\n CdkDropList,\n type CdkDragDrop,\n moveItemInArray,\n} from '@angular/cdk/drag-drop';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n OnDestroy,\n output,\n signal,\n type ElementRef,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZCalendarComponent } from '@shival99/z-ui/components/z-calendar';\nimport { ZCheckboxComponent } from '@shival99/z-ui/components/z-checkbox';\nimport { ZEditorComponent } from '@shival99/z-ui/components/z-editor';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport type { ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZModalComponent } from '@shival99/z-ui/components/z-modal';\nimport { ZSelectComponent, type ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZUploadComponent, type ZUploadFile } from '@shival99/z-ui/components/z-upload';\nimport { ZTranslateService } from '@shival99/z-ui/services';\nimport { zMergeClasses, zTransform } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport {\n Z_KANBAN_PRIORITY_OPTIONS,\n type ZKanbanCardDensity,\n type ZKanbanChecklistItem,\n type ZKanbanColumn,\n type ZKanbanDragData,\n type ZKanbanPriority,\n type ZKanbanTask,\n type ZKanbanTaskCreateEvent,\n type ZKanbanTaskDropEvent,\n type ZKanbanTaskSaveEvent,\n} from './z-kanban.types';\nimport {\n zKanbanChecklistRowVariants,\n zKanbanColumnVariants,\n zKanbanPriorityBadgeVariants,\n zKanbanTaskCardVariants,\n} from './z-kanban.variants';\n\n@Component({\n selector: 'z-kanban',\n imports: [\n FormsModule,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n ZButtonComponent,\n ZCalendarComponent,\n ZCheckboxComponent,\n ZEditorComponent,\n ZIconComponent,\n ZInputComponent,\n ZModalComponent,\n ZSelectComponent,\n ZTooltipDirective,\n ZUploadComponent,\n TranslatePipe,\n ],\n standalone: true,\n templateUrl: './z-kanban.component.html',\n styleUrl: './z-kanban.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n },\n exportAs: 'zKanban',\n})\nexport class ZKanbanComponent implements OnDestroy {\n private readonly _zTranslate = inject(ZTranslateService);\n private readonly _priorityLabelByValue: Record<ZKanbanPriority, string> = {\n risk: 'i18n_z_ui_kanban_priority_risk',\n high: 'i18n_z_ui_kanban_priority_high',\n medium: 'i18n_z_ui_kanban_priority_medium',\n low: 'i18n_z_ui_kanban_priority_low',\n };\n\n private readonly _priorityIconByValue: Record<ZKanbanPriority, ZIcon> = {\n risk: 'lucideCircleAlert',\n high: 'lucideFlag',\n medium: 'lucideTimer',\n low: 'lucideCircleDot',\n };\n\n private readonly _priorityIconClassByValue: Record<ZKanbanPriority, string> = {\n risk: 'text-red-500',\n high: 'text-orange-500',\n medium: 'text-blue-500',\n low: 'text-emerald-500',\n };\n\n public readonly zTaskDrop = output<ZKanbanTaskDropEvent>();\n public readonly zTaskSave = output<ZKanbanTaskSaveEvent>();\n public readonly zTaskClick = output<ZKanbanTask>();\n public readonly zTaskCreate = output<ZKanbanTaskCreateEvent>();\n\n public readonly class = input<ClassValue>('');\n public readonly zColumns = model<ZKanbanColumn[]>([]);\n public readonly zTitle = input('i18n_z_ui_kanban_board_title');\n public readonly zSubtitle = input('i18n_z_ui_kanban_board_subtitle');\n public readonly zSearch = model('');\n public readonly zShowToolbar = input(true, { transform: zTransform });\n public readonly zAllowCreateTask = input(true, { transform: zTransform });\n public readonly zDisabled = input(false, { transform: zTransform });\n public readonly zDensity = input<ZKanbanCardDensity>('comfortable');\n\n protected readonly boardViewportRef = viewChild<ElementRef<HTMLDivElement>>('boardViewport');\n\n protected readonly editorVisible = signal(false);\n protected readonly editingColumnId = signal<string | null>(null);\n protected readonly editingTaskId = signal<string | null>(null);\n protected readonly draftTitle = signal('');\n protected readonly draftDescription = signal('');\n protected readonly draftStatus = signal('');\n protected readonly draftPriority = signal<ZKanbanPriority>('medium');\n protected readonly draftAssignees = signal<string[]>([]);\n protected readonly draftStartDate = signal<Date | null>(null);\n protected readonly draftEndDate = signal<Date | null>(null);\n protected readonly draftChecklist = signal<ZKanbanChecklistItem[]>([]);\n protected readonly draftChecklistItemLabel = signal('');\n protected readonly draftAttachments = signal<ZUploadFile[]>([]);\n protected readonly draftComment = signal('');\n\n protected readonly isDraggingTask = signal(false);\n\n private _dragAutoScrollRafId: number | null = null;\n private _dragAutoScrollVelocity = 0;\n private _lastDragFinishedAt = 0;\n\n protected readonly hostClasses = computed(() => zMergeClasses('z-kanban block w-full min-w-0', this.class()));\n\n protected readonly connectedDropListIds = computed(() => this.zColumns().map(column => column.id));\n\n protected readonly isSearchActive = computed(() => this.zSearch().trim().length > 0);\n\n protected readonly filteredColumns = computed<ZKanbanColumn[]>(() => {\n const query = this.zSearch().trim().toLowerCase();\n if (!query) {\n return this.zColumns();\n }\n\n return this.zColumns().map(column => ({\n ...column,\n tasks: column.tasks.filter(task => this._taskMatchesQuery(task, query)),\n }));\n });\n\n protected readonly activeTask = computed<ZKanbanTask | null>(() => {\n const columnId = this.editingColumnId();\n const taskId = this.editingTaskId();\n if (!columnId || !taskId) {\n return null;\n }\n\n return this._findTask(columnId, taskId);\n });\n\n protected readonly editorMeta = computed(() => {\n const task = this.activeTask();\n if (!task) {\n return '';\n }\n\n if (task.code) {\n return task.code;\n }\n\n return task.id;\n });\n\n protected readonly checklistProgress = computed(() => {\n const checklist = this.draftChecklist();\n if (checklist.length === 0) {\n return 0;\n }\n\n const doneCount = checklist.filter(item => item.done).length;\n return Math.round((doneCount / checklist.length) * 100);\n });\n\n protected readonly checklistDoneCount = computed(() => this.draftChecklist().filter(item => item.done).length);\n protected readonly isEditorSaveDisabled = computed(() => !this.draftTitle().trim());\n protected readonly isCommentSubmitDisabled = computed(() => !this.draftComment().trim());\n protected readonly checklistDoneRowClass = `${zKanbanChecklistRowVariants({ zDone: true })}`;\n protected readonly checklistPendingRowClass = `${zKanbanChecklistRowVariants({ zDone: false })}`;\n\n protected readonly statusOptions = computed<ZSelectOption<string>[]>(() => {\n this._zTranslate.currentLang();\n return this.zColumns().map(column => ({\n value: column.id,\n label: this._zTranslate.instant(column.title),\n icon: this._getStatusIcon(column.id),\n }));\n });\n\n protected readonly priorityOptions = Z_KANBAN_PRIORITY_OPTIONS;\n\n protected readonly prioritySelectOptions = computed<ZSelectOption<ZKanbanPriority>[]>(() => {\n this._zTranslate.currentLang();\n return this.priorityOptions.map(option => ({\n value: option.value,\n label: this._zTranslate.instant(option.labelKey),\n icon: this._priorityIconByValue[option.value],\n }));\n });\n\n protected readonly assigneeOptions = computed<ZSelectOption<string>[]>(() => {\n const assignees = new Set<string>();\n for (const column of this.zColumns()) {\n for (const task of column.tasks) {\n for (const assignee of task.assignees ?? []) {\n if (!assignee.trim()) {\n continue;\n }\n assignees.add(assignee.trim());\n }\n }\n }\n\n return Array.from(assignees)\n .sort((a, b) => a.localeCompare(b))\n .map(name => ({\n label: name,\n value: name,\n }));\n });\n\n protected readonly columnClass = computed(() => zKanbanColumnVariants({ zDensity: this.zDensity() }));\n\n protected readonly taskCardClassByPriority = computed<Record<ZKanbanPriority, string>>(() => {\n const density = this.zDensity();\n return {\n risk: zKanbanTaskCardVariants({ zDensity: density, zPriority: 'risk' }),\n high: zKanbanTaskCardVariants({ zDensity: density, zPriority: 'high' }),\n medium: zKanbanTaskCardVariants({ zDensity: density, zPriority: 'medium' }),\n low: zKanbanTaskCardVariants({ zDensity: density, zPriority: 'low' }),\n };\n });\n\n protected readonly priorityBadgeClassByPriority = computed<Record<ZKanbanPriority, string>>(() => ({\n risk: zKanbanPriorityBadgeVariants({ zPriority: 'risk', zActive: false }),\n high: zKanbanPriorityBadgeVariants({ zPriority: 'high', zActive: false }),\n medium: zKanbanPriorityBadgeVariants({ zPriority: 'medium', zActive: false }),\n low: zKanbanPriorityBadgeVariants({ zPriority: 'low', zActive: false }),\n }));\n\n protected readonly statusIconClassByValue = computed<Record<string, string>>(() => {\n const map: Record<string, string> = {};\n for (const option of this.statusOptions()) {\n map[option.value] = this._getStatusIconClass(option.value);\n }\n return map;\n });\n\n protected readonly priorityIconClassByValue = this._priorityIconClassByValue as Record<string, string>;\n\n protected readonly boardColumnsView = computed(() => {\n const taskCardClassByPriority = this.taskCardClassByPriority();\n const priorityBadgeClassByPriority = this.priorityBadgeClassByPriority();\n\n return this.filteredColumns().map(column => ({\n id: column.id,\n title: column.title,\n taskCount: column.tasks.length,\n rawTasks: column.tasks,\n tasks: column.tasks.map(task => {\n const assigneeViews = (task.assignees ?? []).map((assignee, index) => ({\n name: assignee,\n initials: this._getAssigneeInitials(assignee),\n className: this._getAssigneeAvatarClasses(assignee),\n zIndex: 30 - index,\n }));\n\n const visibleAssignees = assigneeViews.slice(0, 3);\n const hiddenAssignees = assigneeViews.slice(3);\n const checklistDoneCount = task.checklist?.filter(item => item.done).length ?? 0;\n const attachmentCount = task.attachments?.length ?? task.attachmentsCount ?? 0;\n const descriptionPreview = this._stripHtml(task.description ?? '').trim();\n\n return {\n id: task.id,\n columnId: column.id,\n code: task.code,\n title: task.title,\n descriptionPreview,\n priority: task.priority,\n priorityLabelKey: this._priorityLabelByValue[task.priority],\n priorityBadgeClass: priorityBadgeClassByPriority[task.priority],\n taskCardClass: taskCardClassByPriority[task.priority],\n dueDateLabel: this._formatDueDate(task.endDate ?? task.dueDate),\n commentsCount: task.commentsCount ?? 0,\n attachmentCount,\n checklistCount: task.checklist?.length ?? 0,\n checklistDoneCount,\n completed: !!task.completed,\n visibleAssignees,\n hiddenAssigneesCount: hiddenAssignees.length,\n hiddenAssigneesLabel: hiddenAssignees.map(item => item.name).join(', '),\n };\n }),\n }));\n });\n\n protected readonly activeTaskActivityView = computed(() =>\n (this.activeTask()?.activity ?? []).map(entry => ({\n id: entry.id,\n actor: entry.actor,\n action: entry.action,\n createdAtLabel: this._formatDateTime(entry.createdAt),\n }))\n );\n\n public createTaskInFirstColumn(): void {\n const firstColumnId = this.zColumns()[0]?.id;\n if (!firstColumnId) {\n return;\n }\n\n this.createTask(firstColumnId);\n }\n\n public onBoardSearchChange(value: string | number | null): void {\n this.zSearch.set(`${value ?? ''}`);\n }\n\n public onTaskHandleClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n public onTaskCardClick(columnId: string, taskId: string): void {\n if (Date.now() - this._lastDragFinishedAt < 140) {\n return;\n }\n\n this.openTaskEditor(columnId, taskId);\n }\n\n public onTaskDragStarted(): void {\n if (this.zDisabled() || this.isSearchActive()) {\n return;\n }\n\n this.isDraggingTask.set(true);\n }\n\n public onTaskDragMoved(event: CdkDragMove<ZKanbanDragData>): void {\n if (!this.isDraggingTask()) {\n return;\n }\n\n this._updateHorizontalAutoScroll(event.pointerPosition.x);\n }\n\n public onTaskDragEnded(event: CdkDragEnd<ZKanbanDragData>): void {\n this.isDraggingTask.set(false);\n\n const dragDistanceX = Math.abs(event.distance.x);\n const dragDistanceY = Math.abs(event.distance.y);\n if (dragDistanceX > 3 || dragDistanceY > 3) {\n this._lastDragFinishedAt = Date.now();\n }\n\n this._stopHorizontalAutoScroll();\n }\n\n public onTaskDrop(event: CdkDragDrop<ZKanbanTask[]>, toColumnId: string): void {\n if (this.zDisabled() || this.isSearchActive()) {\n return;\n }\n\n const fromColumnId = event.previousContainer.id;\n if (!fromColumnId) {\n return;\n }\n\n const sourceTask = this._findTaskByIndex(fromColumnId, event.previousIndex);\n if (!sourceTask) {\n return;\n }\n\n if (fromColumnId === toColumnId) {\n if (event.previousIndex === event.currentIndex) {\n return;\n }\n\n this._reorderTasksWithinColumn(toColumnId, event.previousIndex, event.currentIndex);\n this.zTaskDrop.emit({\n taskId: sourceTask.id,\n fromColumnId,\n toColumnId,\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n });\n return;\n }\n\n const movedTask: ZKanbanTask = {\n ...sourceTask,\n status: toColumnId,\n completed: toColumnId === 'done' ? true : sourceTask.completed,\n };\n\n this._moveTaskAcrossColumns(fromColumnId, toColumnId, event.previousIndex, event.currentIndex, movedTask);\n this.zTaskDrop.emit({\n taskId: sourceTask.id,\n fromColumnId,\n toColumnId,\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n });\n }\n\n public createTask(columnId: string): void {\n if (!this.zAllowCreateTask() || this.zDisabled()) {\n return;\n }\n\n if (!columnId || !this._hasColumnId(columnId)) {\n return;\n }\n\n const newTask: ZKanbanTask = {\n id: this._createId('task'),\n title: this._zTranslate.instant('i18n_z_ui_kanban_new_task_title'),\n status: columnId,\n priority: 'medium',\n assignees: [],\n checklist: [],\n attachments: [],\n activity: [],\n };\n\n this.zColumns.update(columns =>\n columns.map(column => {\n if (column.id !== columnId) {\n return column;\n }\n\n return {\n ...column,\n tasks: [newTask, ...column.tasks],\n };\n })\n );\n\n this.zTaskCreate.emit({\n task: newTask,\n columnId,\n });\n\n this.openTaskEditor(columnId, newTask.id);\n }\n\n public openTaskEditor(columnId: string, taskId: string): void {\n const task = this._findTask(columnId, taskId);\n if (!task) {\n return;\n }\n\n this.editingColumnId.set(columnId);\n this.editingTaskId.set(taskId);\n this.draftTitle.set(task.title);\n this.draftDescription.set(task.description ?? '');\n this.draftStatus.set(task.status || columnId);\n this.draftPriority.set(task.priority);\n this.draftAssignees.set([...(task.assignees ?? [])]);\n this.draftStartDate.set(this._toDate(task.startDate));\n this.draftEndDate.set(this._toDate(task.endDate ?? task.dueDate));\n this.draftChecklist.set((task.checklist ?? []).map(item => ({ ...item })));\n this.draftChecklistItemLabel.set('');\n this.draftAttachments.set((task.attachments ?? []).map(item => ({ ...item })));\n this.draftComment.set('');\n this.editorVisible.set(true);\n this.zTaskClick.emit(task);\n }\n\n public closeEditor(): void {\n this.editorVisible.set(false);\n }\n\n public saveTaskChanges(): void {\n const sourceColumnId = this.editingColumnId();\n const taskId = this.editingTaskId();\n if (!sourceColumnId || !taskId) {\n return;\n }\n\n const previousTask = this._findTask(sourceColumnId, taskId);\n if (!previousTask) {\n return;\n }\n\n const trimmedTitle = this.draftTitle().trim();\n if (!trimmedTitle) {\n return;\n }\n\n const status = this._hasColumnId(this.draftStatus()) ? this.draftStatus() : sourceColumnId;\n const description = this._normalizeEditorContent(this.draftDescription());\n const normalizedRange = this._normalizeDateRange(this.draftStartDate(), this.draftEndDate());\n const startDate = this._toDateOnlyString(normalizedRange.startDate);\n const endDate = this._toDateOnlyString(normalizedRange.endDate);\n const dueDate = endDate;\n const assignees = this._sanitizeAssignees(this.draftAssignees());\n const attachments = this.draftAttachments().map(item => ({ ...item }));\n\n const updatedTask: ZKanbanTask = {\n ...previousTask,\n title: trimmedTitle,\n description,\n status,\n priority: this.draftPriority(),\n assignees,\n startDate,\n endDate,\n dueDate,\n checklist: this.draftChecklist().map(item => ({ ...item })),\n attachments,\n attachmentsCount: attachments.length,\n completed: status === 'done',\n };\n\n this._replaceTaskAcrossColumns(sourceColumnId, status, updatedTask);\n this.zTaskSave.emit({\n task: updatedTask,\n columnId: status,\n previousTask,\n });\n\n this.closeEditor();\n }\n\n public addChecklistItem(): void {\n const label = this.draftChecklistItemLabel().trim();\n if (!label) {\n return;\n }\n\n const item: ZKanbanChecklistItem = {\n id: this._createId('check'),\n label,\n done: false,\n };\n\n this.draftChecklist.update(items => [...items, item]);\n this.draftChecklistItemLabel.set('');\n }\n\n public toggleChecklistItem(itemId: string, checked: boolean): void {\n this.draftChecklist.update(items =>\n items.map(item => {\n if (item.id !== itemId) {\n return item;\n }\n\n return {\n ...item,\n done: checked,\n };\n })\n );\n }\n\n public removeChecklistItem(itemId: string): void {\n this.draftChecklist.update(items => items.filter(item => item.id !== itemId));\n }\n\n public onEditorStatusChange(value: string | null): void {\n if (!value) {\n return;\n }\n\n this.draftStatus.set(value);\n }\n\n public onEditorPriorityChange(value: ZKanbanPriority | null): void {\n if (!value) {\n return;\n }\n\n this.draftPriority.set(value);\n }\n\n public onEditorAssigneesChange(value: string[] | null): void {\n if (!value) {\n this.draftAssignees.set([]);\n return;\n }\n\n this.draftAssignees.set(this._sanitizeAssignees(value));\n }\n\n public onEditorStartDateChange(value: Date | null): void {\n this.draftStartDate.set(value);\n }\n\n public onEditorEndDateChange(value: Date | null): void {\n this.draftEndDate.set(value);\n }\n\n public onDraftAttachmentsChange(files: ZUploadFile[] | null): void {\n this.draftAttachments.set([...(files ?? [])]);\n }\n\n public submitTaskComment(): void {\n const sourceColumnId = this.editingColumnId();\n const taskId = this.editingTaskId();\n if (!sourceColumnId || !taskId) {\n return;\n }\n\n const comment = this.draftComment().trim();\n if (!comment) {\n return;\n }\n\n const previousTask = this._findTask(sourceColumnId, taskId);\n if (!previousTask) {\n return;\n }\n\n const targetColumnId = this._hasColumnId(previousTask.status) ? previousTask.status : sourceColumnId;\n const updatedTask: ZKanbanTask = {\n ...previousTask,\n activity: this._appendCommentActivity(previousTask.activity ?? [], comment),\n commentsCount: (previousTask.commentsCount ?? previousTask.activity?.length ?? 0) + 1,\n };\n\n this._replaceTaskAcrossColumns(sourceColumnId, targetColumnId, updatedTask);\n this.zTaskSave.emit({\n task: updatedTask,\n columnId: targetColumnId,\n previousTask,\n });\n this.draftComment.set('');\n }\n\n public onEditorVisibleChange(visible: boolean): void {\n this.editorVisible.set(visible);\n }\n\n public onEditorAfterClose(): void {\n if (this.editorVisible()) {\n return;\n }\n\n this._resetEditorState();\n }\n\n public ngOnDestroy(): void {\n this._stopHorizontalAutoScroll();\n }\n\n private _getStatusIcon(status: string): ZIcon {\n const normalized = status.trim().toLowerCase();\n if (normalized === 'done') {\n return 'lucideCheckCircle';\n }\n if (normalized === 'in-progress' || normalized === 'inprogress' || normalized === 'doing') {\n return 'lucideTimer';\n }\n if (normalized === 'review' || normalized === 'qa') {\n return 'lucideListChecks';\n }\n if (normalized === 'blocked') {\n return 'lucideBan';\n }\n\n return 'lucideCircleDot';\n }\n\n private _getStatusIconClass(status: string): string {\n const normalized = status.trim().toLowerCase();\n if (normalized === 'done') {\n return 'text-emerald-500';\n }\n if (normalized === 'in-progress' || normalized === 'inprogress' || normalized === 'doing') {\n return 'text-primary';\n }\n if (normalized === 'review' || normalized === 'qa') {\n return 'text-indigo-500';\n }\n if (normalized === 'blocked') {\n return 'text-red-500';\n }\n\n return 'text-muted-foreground';\n }\n\n private _getAssigneeInitials(name: string): string {\n const normalized = name.trim();\n if (!normalized) {\n return '--';\n }\n\n const parts = normalized.split(/\\s+/);\n const first = parts[0]?.charAt(0) ?? '';\n const second = parts.length > 1 ? (parts[parts.length - 1]?.charAt(0) ?? '') : '';\n return `${first}${second}`.toUpperCase();\n }\n\n private _getAssigneeAvatarClasses(name: string): string {\n const palette = [\n 'bg-emerald-100 text-emerald-700',\n 'bg-sky-100 text-sky-700',\n 'bg-amber-100 text-amber-700',\n 'bg-violet-100 text-violet-700',\n 'bg-rose-100 text-rose-700',\n 'bg-cyan-100 text-cyan-700',\n ];\n\n let hash = 0;\n for (let index = 0; index < name.length; index += 1) {\n hash = (hash * 31 + name.charCodeAt(index)) | 0;\n }\n\n const paletteIndex = Math.abs(hash) % palette.length;\n return `${palette[paletteIndex]} border-background shadow-xs border`;\n }\n\n private _formatDueDate(value?: string): string {\n if (!value) {\n return '';\n }\n\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return value;\n }\n\n return parsed.toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n });\n }\n\n private _formatDateTime(value: string): string {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return value;\n }\n\n return parsed.toLocaleString(undefined, {\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n }\n\n private _resetEditorState(): void {\n this.editingColumnId.set(null);\n this.editingTaskId.set(null);\n this.draftTitle.set('');\n this.draftDescription.set('');\n this.draftStatus.set('');\n this.draftPriority.set('medium');\n this.draftAssignees.set([]);\n this.draftStartDate.set(null);\n this.draftEndDate.set(null);\n this.draftChecklist.set([]);\n this.draftChecklistItemLabel.set('');\n this.draftAttachments.set([]);\n this.draftComment.set('');\n }\n\n private _taskMatchesQuery(task: ZKanbanTask, query: string): boolean {\n const haystack = [\n task.code ?? '',\n task.title,\n this._stripHtml(task.description ?? ''),\n ...(task.assignees ?? []),\n task.startDate ?? '',\n task.endDate ?? '',\n task.dueDate ?? '',\n ]\n .join(' ')\n .toLowerCase();\n\n return haystack.includes(query);\n }\n\n private _findTask(columnId: string, taskId: string): ZKanbanTask | null {\n const column = this.zColumns().find(item => item.id === columnId);\n if (!column) {\n return null;\n }\n\n const task = column.tasks.find(item => item.id === taskId);\n if (!task) {\n return null;\n }\n\n return task;\n }\n\n private _findTaskByIndex(columnId: string, index: number): ZKanbanTask | null {\n const column = this.zColumns().find(item => item.id === columnId);\n if (!column) {\n return null;\n }\n\n if (index < 0 || index >= column.tasks.length) {\n return null;\n }\n\n return column.tasks[index] ?? null;\n }\n\n private _reorderTasksWithinColumn(columnId: string, fromIndex: number, toIndex: number): void {\n this.zColumns.update(columns =>\n columns.map(column => {\n if (column.id !== columnId) {\n return column;\n }\n\n if (fromIndex < 0 || fromIndex >= column.tasks.length) {\n return column;\n }\n\n if (toIndex < 0) {\n return column;\n }\n\n const tasks = [...column.tasks];\n const lastIndex = tasks.length - 1;\n const clampedIndex = Math.max(0, Math.min(toIndex, lastIndex));\n moveItemInArray(tasks, fromIndex, clampedIndex);\n return {\n ...column,\n tasks,\n };\n })\n );\n }\n\n private _moveTaskAcrossColumns(\n fromColumnId: string,\n toColumnId: string,\n fromIndex: number,\n toIndex: number,\n movedTask: ZKanbanTask\n ): void {\n this.zColumns.update(columns => {\n const sourceColumn = columns.find(column => column.id === fromColumnId);\n const targetColumn = columns.find(column => column.id === toColumnId);\n if (!sourceColumn || !targetColumn) {\n return columns;\n }\n\n if (fromIndex < 0 || fromIndex >= sourceColumn.tasks.length) {\n return columns;\n }\n\n const sourceTasks = [...sourceColumn.tasks];\n sourceTasks.splice(fromIndex, 1);\n\n const targetTasks = [...targetColumn.tasks];\n const clampedIndex = Math.max(0, Math.min(toIndex, targetTasks.length));\n targetTasks.splice(clampedIndex, 0, movedTask);\n\n return columns.map(column => {\n if (column.id === fromColumnId) {\n return {\n ...column,\n tasks: sourceTasks,\n };\n }\n\n if (column.id === toColumnId) {\n return {\n ...column,\n tasks: targetTasks,\n };\n }\n\n return column;\n });\n });\n }\n\n private _replaceTaskAcrossColumns(sourceColumnId: string, targetColumnId: string, task: ZKanbanTask): void {\n this.zColumns.update(columns => {\n if (sourceColumnId === targetColumnId) {\n return columns.map(column => {\n if (column.id !== sourceColumnId) {\n return column;\n }\n\n return {\n ...column,\n tasks: column.tasks.map(currentTask => {\n if (currentTask.id !== task.id) {\n return currentTask;\n }\n\n return task;\n }),\n };\n });\n }\n\n return columns.map(column => {\n if (column.id === sourceColumnId) {\n return {\n ...column,\n tasks: column.tasks.filter(currentTask => currentTask.id !== task.id),\n };\n }\n\n if (column.id === targetColumnId) {\n return {\n ...column,\n tasks: [task, ...column.tasks.filter(currentTask => currentTask.id !== task.id)],\n };\n }\n\n return column;\n });\n });\n }\n\n private _hasColumnId(columnId: string): boolean {\n return this.zColumns().some(column => column.id === columnId);\n }\n\n private _sanitizeAssignees(value: string[]): string[] {\n const normalized = value.map(item => item.trim()).filter(item => item.length > 0);\n\n return Array.from(new Set(normalized));\n }\n\n private _appendCommentActivity(\n existing: ZKanbanTask['activity'],\n comment: string\n ): NonNullable<ZKanbanTask['activity']> {\n if (!comment) {\n return [...(existing ?? [])];\n }\n\n return [\n {\n id: this._createId('activity'),\n actor: this._zTranslate.instant('i18n_z_ui_kanban_activity_you'),\n action: comment,\n createdAt: new Date().toISOString(),\n },\n ...(existing ?? []),\n ];\n }\n\n private _normalizeEditorContent(value: string): string | undefined {\n const normalized = value.trim();\n if (!normalized) {\n return undefined;\n }\n\n const text = this._stripHtml(normalized).trim();\n if (!text) {\n return undefined;\n }\n\n return normalized;\n }\n\n private _stripHtml(value: string): string {\n if (!value) {\n return '';\n }\n\n return value\n .replace(/<[^>]+>/g, ' ')\n .replace(/&nbsp;/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n }\n\n private _toDate(value?: string): Date | null {\n if (!value) {\n return null;\n }\n\n const parsed = new Date(`${value}T00:00:00`);\n if (Number.isNaN(parsed.getTime())) {\n return null;\n }\n\n return parsed;\n }\n\n private _toDateOnlyString(value: Date | null): string | undefined {\n if (!value) {\n return undefined;\n }\n\n const year = value.getFullYear();\n const month = `${value.getMonth() + 1}`.padStart(2, '0');\n const day = `${value.getDate()}`.padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n private _normalizeDateRange(\n startDate: Date | null,\n endDate: Date | null\n ): {\n startDate: Date | null;\n endDate: Date | null;\n } {\n if (!startDate || !endDate) {\n return {\n startDate,\n endDate,\n };\n }\n\n if (startDate.getTime() <= endDate.getTime()) {\n return {\n startDate,\n endDate,\n };\n }\n\n return {\n startDate: endDate,\n endDate: startDate,\n };\n }\n\n private _updateHorizontalAutoScroll(pointerX: number): void {\n const viewport = this.boardViewportRef()?.nativeElement;\n if (!viewport) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n const rect = viewport.getBoundingClientRect();\n const threshold = Math.min(120, rect.width * 0.2);\n if (threshold <= 0) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n const maxSpeed = 18;\n const leftEdge = rect.left + threshold;\n if (pointerX < leftEdge) {\n const ratio = Math.min(1, (leftEdge - pointerX) / threshold);\n this._startHorizontalAutoScroll(-maxSpeed * ratio);\n return;\n }\n\n const rightEdge = rect.right - threshold;\n if (pointerX > rightEdge) {\n const ratio = Math.min(1, (pointerX - rightEdge) / threshold);\n this._startHorizontalAutoScroll(maxSpeed * ratio);\n return;\n }\n\n this._stopHorizontalAutoScroll();\n }\n\n private _startHorizontalAutoScroll(velocity: number): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n if (!Number.isFinite(velocity) || Math.abs(velocity) < 0.8) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n this._dragAutoScrollVelocity = velocity;\n if (this._dragAutoScrollRafId !== null) {\n return;\n }\n\n const tick = (): void => {\n if (!this.isDraggingTask()) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n const viewport = this.boardViewportRef()?.nativeElement;\n if (!viewport) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n const currentScrollLeft = viewport.scrollLeft;\n const maxScrollLeft = Math.max(0, viewport.scrollWidth - viewport.clientWidth);\n const nextScrollLeft = Math.min(maxScrollLeft, Math.max(0, currentScrollLeft + this._dragAutoScrollVelocity));\n\n if (nextScrollLeft === currentScrollLeft) {\n this._stopHorizontalAutoScroll();\n return;\n }\n\n viewport.scrollLeft = nextScrollLeft;\n this._dragAutoScrollRafId = window.requestAnimationFrame(tick);\n };\n\n this._dragAutoScrollRafId = window.requestAnimationFrame(tick);\n }\n\n private _stopHorizontalAutoScroll(): void {\n if (typeof window !== 'undefined' && this._dragAutoScrollRafId !== null) {\n window.cancelAnimationFrame(this._dragAutoScrollRafId);\n }\n\n this._dragAutoScrollRafId = null;\n this._dragAutoScrollVelocity = 0;\n }\n\n private _createId(prefix: string): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return `${prefix}-${crypto.randomUUID()}`;\n }\n\n return `${prefix}-${Date.now()}-${Math.random().toString(16).slice(2, 10)}`;\n }\n}\n","<div class=\"flex h-full min-h-0 min-w-0 flex-col gap-5\">\n @if (zShowToolbar()) {\n <header class=\"flex flex-col gap-3 md:flex-row md:items-center md:justify-between\">\n <div class=\"min-w-0\">\n <h2 class=\"text-foreground truncate text-xl font-bold\">{{ zTitle() | translate }}</h2>\n <p class=\"text-muted-foreground text-sm\">{{ zSubtitle() | translate }}</p>\n </div>\n\n <div class=\"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center\">\n <z-input\n class=\"w-full sm:w-80\"\n zSize=\"sm\"\n [zSearch]=\"true\"\n [zDebounce]=\"200\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_search_placeholder' | translate\"\n [ngModel]=\"zSearch()\"\n (zOnSearch)=\"onBoardSearchChange($event)\" />\n\n @if (zAllowCreateTask()) {\n <z-button zType=\"outline\" zSize=\"sm\" zTypeIcon=\"lucidePlus\" (click)=\"createTaskInFirstColumn()\">\n {{ 'i18n_z_ui_common_add' | translate }}\n </z-button>\n }\n </div>\n </header>\n }\n\n @if (isSearchActive()) {\n <p class=\"text-muted-foreground text-xs\">\n {{ 'i18n_z_ui_kanban_drag_disabled_while_search' | translate }}\n </p>\n }\n\n <div #boardViewport class=\"z-kanban-board min-h-0 flex-1 overflow-x-auto pb-2\">\n <div class=\"flex h-full min-h-[25rem] min-w-max items-stretch gap-4\">\n @for (column of boardColumnsView(); track column.id) {\n <section [class]=\"columnClass()\">\n <header class=\"mb-2 flex items-center justify-between gap-2 px-0.5\">\n <div class=\"flex min-w-0 items-center gap-2\">\n <h3 class=\"text-foreground truncate text-xs font-bold tracking-wide uppercase\">\n {{ column.title | translate }}\n </h3>\n <span\n class=\"bg-muted text-muted-foreground inline-flex min-w-5 items-center justify-center rounded-full px-1.5 py-0.5 text-[10px] font-bold\">\n {{ column.taskCount }}\n </span>\n </div>\n\n @if (zAllowCreateTask()) {\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:bg-muted hover:text-foreground inline-flex size-7 cursor-pointer items-center justify-center rounded-md transition-colors\"\n (click)=\"createTask(column.id)\">\n <z-icon zType=\"lucidePlus\" zSize=\"16\" />\n </button>\n }\n </header>\n\n <div\n cdkDropList\n [id]=\"column.id\"\n [cdkDropListData]=\"column.rawTasks\"\n [cdkDropListConnectedTo]=\"connectedDropListIds()\"\n [cdkDropListDisabled]=\"zDisabled() || isSearchActive()\"\n class=\"kanban-drop-list -mr-1 flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto p-0.5 pr-1\"\n (cdkDropListDropped)=\"onTaskDrop($event, column.id)\">\n @if (column.taskCount === 0) {\n <div\n class=\"border-border/70 text-muted-foreground flex h-24 items-center justify-center rounded-lg border border-dashed px-3 text-center text-xs\">\n @if (isSearchActive()) {\n {{ 'i18n_z_ui_kanban_no_matches' | translate }}\n } @else {\n {{ 'i18n_z_ui_kanban_drop_here' | translate }}\n }\n </div>\n }\n\n @for (task of column.tasks; track task.id) {\n <article\n cdkDrag\n cdkDragPreviewClass=\"z-kanban-drag-preview\"\n cdkDragPlaceholderClass=\"z-kanban-drag-placeholder\"\n [cdkDragData]=\"{ columnId: column.id, taskId: task.id }\"\n [cdkDragDisabled]=\"zDisabled() || isSearchActive()\"\n [class]=\"'kanban-card shrink-0 ' + task.taskCardClass\"\n (cdkDragStarted)=\"onTaskDragStarted()\"\n (cdkDragMoved)=\"onTaskDragMoved($event)\"\n (cdkDragEnded)=\"onTaskDragEnded($event)\"\n (click)=\"onTaskCardClick(column.id, task.id)\">\n <div class=\"flex items-start justify-between gap-2\">\n <div class=\"min-w-0 space-y-1\">\n @if (task.code) {\n <p class=\"text-muted-foreground text-[10px] font-semibold tracking-wide uppercase\">\n {{ task.code }}\n </p>\n }\n <h4 class=\"line-clamp-2 text-sm leading-5 font-semibold\">{{ task.title }}</h4>\n </div>\n\n <button\n cdkDragHandle\n type=\"button\"\n class=\"text-muted-foreground hover:bg-muted hover:text-foreground inline-flex size-6 shrink-0 cursor-grab items-center justify-center rounded-md transition-colors\"\n (click)=\"onTaskHandleClick($event)\">\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" />\n </button>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <span [class]=\"task.priorityBadgeClass\">\n {{ task.priorityLabelKey | translate }}\n </span>\n @if (task.completed) {\n <span class=\"inline-flex items-center gap-1 text-[11px] font-semibold text-emerald-500\">\n <z-icon zType=\"lucideCircleCheck\" zSize=\"12\" />\n {{ 'i18n_z_ui_kanban_done' | translate }}\n </span>\n }\n </div>\n\n @if (task.descriptionPreview) {\n <p class=\"text-muted-foreground line-clamp-3 text-xs leading-4\">{{ task.descriptionPreview }}</p>\n }\n\n <div class=\"text-muted-foreground flex flex-wrap items-center gap-3 text-[11px]\">\n @if (task.dueDateLabel) {\n <span class=\"inline-flex items-center gap-1\">\n <z-icon zType=\"lucideCalendar\" zSize=\"12\" />\n {{ task.dueDateLabel }}\n </span>\n }\n\n @if (task.commentsCount > 0) {\n <span class=\"inline-flex items-center gap-1\">\n <z-icon zType=\"lucideMessageSquare\" zSize=\"12\" />\n {{ task.commentsCount }}\n </span>\n }\n\n @if (task.attachmentCount > 0) {\n <span class=\"inline-flex items-center gap-1\">\n <z-icon zType=\"lucidePaperclip\" zSize=\"12\" />\n {{ task.attachmentCount }}\n </span>\n }\n\n @if (task.checklistCount > 0) {\n <span class=\"inline-flex items-center gap-1\">\n <z-icon zType=\"lucideListChecks\" zSize=\"12\" />\n {{ task.checklistDoneCount }}/{{ task.checklistCount }}\n </span>\n }\n </div>\n\n <footer class=\"flex items-center justify-between gap-2\">\n <div class=\"flex -space-x-2\">\n @for (assignee of task.visibleAssignees; track assignee.name) {\n <span\n z-tooltip\n zAlwaysShow\n zPosition=\"top\"\n [zContent]=\"assignee.name\"\n class=\"relative inline-flex size-6 items-center justify-center rounded-full text-[10px] font-bold\"\n [class]=\"assignee.className\"\n [style.zIndex]=\"assignee.zIndex\">\n {{ assignee.initials }}\n </span>\n }\n @if (task.hiddenAssigneesCount > 0) {\n <span\n z-tooltip\n zAlwaysShow\n zPosition=\"top\"\n [zContent]=\"task.hiddenAssigneesLabel\"\n class=\"bg-muted text-muted-foreground border-background relative inline-flex size-6 items-center justify-center rounded-full border text-[10px] font-bold shadow-xs\"\n [style.zIndex]=\"20\">\n +{{ task.hiddenAssigneesCount }}\n </span>\n }\n </div>\n\n <z-icon zType=\"lucideChevronRight\" zSize=\"14\" class=\"text-muted-foreground\" />\n </footer>\n </article>\n }\n </div>\n </section>\n }\n </div>\n </div>\n</div>\n\n<z-modal\n [zVisible]=\"editorVisible()\"\n zTitle=\"i18n_z_ui_kanban_editor_title\"\n [zDescription]=\"editorMeta()\"\n [zOkText]=\"'i18n_z_ui_common_save' | translate\"\n [zCancelText]=\"'i18n_z_ui_common_cancel' | translate\"\n zWidth=\"min(96vw, 72rem)\"\n zOverlay=\"blur\"\n [zOkDisabled]=\"isEditorSaveDisabled()\"\n (zVisibleChange)=\"onEditorVisibleChange($event)\"\n (zAfterClose)=\"onEditorAfterClose()\"\n (zOk)=\"saveTaskChanges()\"\n (zCancel)=\"closeEditor()\">\n @if (activeTask()) {\n <div class=\"grid gap-6 xl:grid-cols-[minmax(0,1fr)_20rem]\">\n <div class=\"space-y-5\">\n <section class=\"space-y-2\">\n <z-input\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_title' | translate\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_title_placeholder' | translate\"\n [zRequired]=\"true\"\n [ngModel]=\"draftTitle()\"\n (ngModelChange)=\"draftTitle.set($event)\" />\n </section>\n\n <section class=\"space-y-2\">\n <z-editor\n zSize=\"sm\"\n [zLabel]=\"'i18n_z_ui_kanban_description' | translate\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_description_placeholder' | translate\"\n [ngModel]=\"draftDescription()\"\n (ngModelChange)=\"draftDescription.set($event)\" />\n </section>\n\n <section class=\"grid gap-3 md:grid-cols-2\">\n <ng-template #statusSelectedTpl let-option>\n <span class=\"inline-flex min-w-0 items-center gap-2\">\n <z-icon\n [zType]=\"option.icon || 'lucideCircleDot'\"\n zSize=\"14\"\n [class]=\"statusIconClassByValue()[option.value] + ' shrink-0'\" />\n <span class=\"truncate\">{{ option.label }}</span>\n </span>\n </ng-template>\n\n <ng-template #statusOptionTpl let-option let-selected=\"selected\">\n <span class=\"inline-flex w-full min-w-0 items-center gap-2\">\n <z-icon\n [zType]=\"option.icon || 'lucideCircleDot'\"\n zSize=\"14\"\n [class]=\"statusIconClassByValue()[option.value] + ' shrink-0'\" />\n <span class=\"truncate\" [class.font-medium]=\"selected\">{{ option.label }}</span>\n </span>\n </ng-template>\n\n <ng-template #prioritySelectedTpl let-option>\n <span class=\"inline-flex min-w-0 items-center gap-2\">\n <z-icon\n [zType]=\"option.icon || 'lucideCircleDot'\"\n zSize=\"14\"\n [class]=\"priorityIconClassByValue[option.value] + ' shrink-0'\" />\n <span class=\"truncate\">{{ option.label }}</span>\n </span>\n </ng-template>\n\n <ng-template #priorityOptionTpl let-option let-selected=\"selected\">\n <span class=\"inline-flex w-full min-w-0 items-center gap-2\">\n <z-icon\n [zType]=\"option.icon || 'lucideCircleDot'\"\n zSize=\"14\"\n [class]=\"priorityIconClassByValue[option.value] + ' shrink-0'\" />\n <span class=\"truncate\" [class.font-medium]=\"selected\">{{ option.label }}</span>\n </span>\n </ng-template>\n\n <z-select\n class=\"w-full\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_status' | translate\"\n [zAllowClear]=\"false\"\n [zOptions]=\"statusOptions()\"\n [zSelectedTemplate]=\"statusSelectedTpl\"\n [zOptionTemplate]=\"statusOptionTpl\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_status_placeholder' | translate\"\n [ngModel]=\"draftStatus()\"\n (ngModelChange)=\"onEditorStatusChange($event)\" />\n\n <z-select\n class=\"w-full\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_priority' | translate\"\n [zAllowClear]=\"false\"\n [zOptions]=\"prioritySelectOptions()\"\n [zSelectedTemplate]=\"prioritySelectedTpl\"\n [zOptionTemplate]=\"priorityOptionTpl\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_priority_placeholder' | translate\"\n [ngModel]=\"draftPriority()\"\n (ngModelChange)=\"onEditorPriorityChange($event)\" />\n\n <z-select\n class=\"w-full md:col-span-2\"\n zMode=\"tags\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_assignees' | translate\"\n [zAllowClear]=\"true\"\n [zOptions]=\"assigneeOptions()\"\n [zMaxTagCount]=\"5\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_assignees_select_placeholder' | translate\"\n [ngModel]=\"draftAssignees()\"\n (ngModelChange)=\"onEditorAssigneesChange($event)\" />\n\n <z-calendar\n zMode=\"single\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_start_date' | translate\"\n zAllowClear\n zValueType=\"date\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_start_date' | translate\"\n [ngModel]=\"draftStartDate()\"\n (ngModelChange)=\"onEditorStartDateChange($event)\" />\n\n <z-calendar\n zMode=\"single\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_end_date' | translate\"\n zAllowClear\n zValueType=\"date\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_end_date' | translate\"\n [ngModel]=\"draftEndDate()\"\n (ngModelChange)=\"onEditorEndDateChange($event)\" />\n </section>\n\n <section class=\"space-y-3\">\n <div class=\"flex items-center justify-between gap-2\">\n <h4 class=\"text-sm font-semibold\">\n {{ 'i18n_z_ui_kanban_checklist' | translate }} ({{ checklistDoneCount() }}/{{ draftChecklist().length }})\n </h4>\n <span class=\"text-muted-foreground text-xs font-semibold\">{{ checklistProgress() }}%</span>\n </div>\n\n <div class=\"bg-muted h-2 w-full rounded-full\">\n <div class=\"bg-primary h-2 rounded-full transition-all\" [style.width.%]=\"checklistProgress()\"></div>\n </div>\n\n <div class=\"max-h-44 space-y-1 overflow-y-auto\">\n @for (item of draftChecklist(); track item.id) {\n <div [class]=\"item.done ? checklistDoneRowClass : checklistPendingRowClass\">\n <z-checkbox\n [class]=\"item.done ? 'min-w-0 flex-1 line-through' : 'min-w-0 flex-1'\"\n [zChecked]=\"item.done\"\n [zText]=\"item.label\"\n (zChange)=\"toggleChecklistItem(item.id, $event)\" />\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-destructive hover:bg-destructive/10 ml-auto inline-flex size-6 shrink-0 cursor-pointer items-center justify-center rounded transition-colors\"\n (click)=\"removeChecklistItem(item.id)\">\n <z-icon zType=\"lucideTrash2\" zSize=\"12\" />\n </button>\n </div>\n } @empty {\n <p class=\"text-muted-foreground bg-muted/35 rounded-md px-3 py-2 text-xs\">\n {{ 'i18n_z_ui_kanban_no_checklist_items' | translate }}\n </p>\n }\n </div>\n\n <div class=\"flex items-end gap-2\">\n <z-input\n class=\"flex-1\"\n zSize=\"lg\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_checklist_add_placeholder' | translate\"\n [ngModel]=\"draftChecklistItemLabel()\"\n (ngModelChange)=\"draftChecklistItemLabel.set($event)\"\n (zOnEnter)=\"addChecklistItem()\" />\n <button\n type=\"button\"\n zSize=\"lg\"\n z-button\n zType=\"outline\"\n zTypeIcon=\"lucidePlus\"\n (click)=\"addChecklistItem()\">\n {{ 'i18n_z_ui_common_add' | translate }}\n </button>\n </div>\n </section>\n\n <section class=\"space-y-2\">\n <z-upload\n [zLabel]=\"'i18n_z_ui_kanban_attachments' | translate\"\n [zNote]=\"'i18n_z_ui_kanban_attachments_note' | translate\"\n [zMultipleFile]=\"true\"\n [zShowProgress]=\"true\"\n [ngModel]=\"draftAttachments()\"\n (ngModelChange)=\"onDraftAttachmentsChange($event)\" />\n </section>\n </div>\n\n <aside\n class=\"bg-muted/25 border-border/70 flex h-[34rem] min-h-0 flex-col overflow-hidden rounded-lg border p-4 shadow-xs xl:h-[38rem]\">\n <section class=\"flex min-h-0 flex-1 flex-col gap-1.5\">\n <label class=\"text-muted-foreground text-[11px] font-semibold tracking-widest uppercase\">\n {{ 'i18n_z_ui_kanban_activity' | translate }}\n </label>\n <div class=\"-mr-3 min-h-0 flex-1 space-y-2 overflow-y-auto pr-3 pb-2\">\n @for (entry of activeTaskActivityView(); track entry.id) {\n <div class=\"border-border/70 bg-background/60 rounded-md border px-3 py-2\">\n <p class=\"text-xs font-semibold\">{{ entry.actor }}</p>\n <p class=\"text-muted-foreground mt-1 text-xs leading-4\">{{ entry.action }}</p>\n <p class=\"text-muted-foreground mt-1 text-[10px]\">{{ entry.createdAtLabel }}</p>\n </div>\n } @empty {\n <p class=\"text-muted-foreground bg-muted/40 rounded-md px-3 py-2 text-xs\">\n {{ 'i18n_z_ui_kanban_no_activity' | translate }}\n </p>\n }\n </div>\n </section>\n\n <section class=\"border-border/70 mt-3 shrink-0 space-y-2 border-t pt-3\">\n <z-input\n zType=\"textarea\"\n zSize=\"lg\"\n [zLabel]=\"'i18n_z_ui_kanban_add_comment' | translate\"\n [zRows]=\"3\"\n [zPlaceholder]=\"'i18n_z_ui_kanban_comment_placeholder' | translate\"\n [ngModel]=\"draftComment()\"\n (ngModelChange)=\"draftComment.set($event)\" />\n\n <div class=\"flex justify-end pt-2\">\n <button\n type=\"button\"\n zTypeIcon=\"lucideSend\"\n z-button\n [disabled]=\"isCommentSubmitDisabled()\"\n (click)=\"submitTaskComment()\">\n {{ 'i18n_z_ui_kanban_comment_submit' | translate }}\n </button>\n </div>\n </section>\n </aside>\n </div>\n }\n</z-modal>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -133,7 +133,7 @@ class ZPaginationComponent {
133
133
  });
134
134
  }
135
135
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: ZPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
136
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: ZPaginationComponent, isStandalone: true, selector: "z-pagination", inputs: { zPageIndex: { classPropertyName: "zPageIndex", publicName: "zPageIndex", isSignal: true, isRequired: false, transformFunction: null }, zPageSize: { classPropertyName: "zPageSize", publicName: "zPageSize", isSignal: true, isRequired: false, transformFunction: null }, zTotal: { classPropertyName: "zTotal", publicName: "zTotal", isSignal: true, isRequired: true, transformFunction: null }, zPageSizeOptions: { classPropertyName: "zPageSizeOptions", publicName: "zPageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, zShowSizeChanger: { classPropertyName: "zShowSizeChanger", publicName: "zShowSizeChanger", isSignal: true, isRequired: false, transformFunction: null }, zShowQuickJumper: { classPropertyName: "zShowQuickJumper", publicName: "zShowQuickJumper", isSignal: true, isRequired: false, transformFunction: null }, zShowTotal: { classPropertyName: "zShowTotal", publicName: "zShowTotal", isSignal: true, isRequired: false, transformFunction: null }, zSimple: { classPropertyName: "zSimple", publicName: "zSimple", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zDisabled: { classPropertyName: "zDisabled", publicName: "zDisabled", isSignal: true, isRequired: false, transformFunction: null }, zTotalLabel: { classPropertyName: "zTotalLabel", publicName: "zTotalLabel", isSignal: true, isRequired: false, transformFunction: null }, zPerPageLabel: { classPropertyName: "zPerPageLabel", publicName: "zPerPageLabel", isSignal: true, isRequired: false, transformFunction: null }, zGoToLabel: { classPropertyName: "zGoToLabel", publicName: "zGoToLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zOnPageChange: "zOnPageChange", zPageIndex: "zPageIndexChange", zPageSize: "zPageSizeChange" }, host: { classAttribute: "z-pagination flex items-center gap-2" }, ngImport: i0, template: "@if (zShowTotal()) {\n <span class=\"text-muted-foreground text-sm whitespace-nowrap\">{{ totalLabelText() }}</span>\n}\n\n@if (!zSimple()) {\n <!-- Page Size Selector -->\n @if (zShowSizeChanger()) {\n <z-select\n class=\"w-fit\"\n zSize=\"sm\"\n [zOptions]=\"pageSizeOptions()\"\n [ngModel]=\"zPageSize()\"\n (ngModelChange)=\"onPageSizeChange($event)\"\n [zDisabled]=\"zDisabled()\"\n [zShowSearch]=\"false\" />\n }\n\n <z-button-group class=\"z-pagination-pages\">\n <!-- Prev Button -->\n <z-button zType=\"outline\" zSize=\"sm\" [zDisabled]=\"!canGoPrev() || zDisabled()\" (click)=\"goToPrev()\">\n <z-icon zType=\"lucideChevronLeft\" zSize=\"16\" />\n </z-button>\n\n <!-- Page Numbers -->\n @for (page of visiblePages(); track $index) {\n @if (page === 'ellipsis') {\n <span\n class=\"z-pagination-ellipsis text-muted-foreground border-input flex h-8 w-8 items-center justify-center border-y border-r bg-transparent text-sm\">\n ...\n </span>\n } @else {\n <z-button\n zType=\"outline\"\n [zWave]=\"false\"\n zSize=\"sm\"\n [class]=\"\n page === zPageIndex() ? 'relative min-w-8 overflow-hidden !bg-transparent hover:!bg-transparent' : 'min-w-8'\n \"\n [zDisabled]=\"zDisabled()\"\n (click)=\"goToPage(page)\">\n @if (page === zPageIndex()) {\n <span class=\"bg-primary pointer-events-none absolute inset-[1px] rounded-[1px]\"></span>\n }\n <span [class]=\"page === zPageIndex() ? 'text-primary-foreground relative z-[1]' : ''\">{{ page }}</span>\n </z-button>\n }\n }\n\n <!-- Next Button -->\n <z-button zType=\"outline\" zSize=\"sm\" [zDisabled]=\"!canGoNext() || zDisabled()\" (click)=\"goToNext()\">\n <z-icon zType=\"lucideChevronRight\" zSize=\"16\" />\n </z-button>\n </z-button-group>\n\n <!-- Quick Jumper -->\n @if (zShowQuickJumper()) {\n <div class=\"flex items-center gap-2 text-sm\">\n <span class=\"text-muted-foreground whitespace-nowrap\">{{ goToLabelText() }}</span>\n <z-input\n zType=\"number\"\n zSize=\"sm\"\n class=\"w-14\"\n [ngModel]=\"zPageIndex()\"\n [zMin]=\"1\"\n [zMax]=\"totalPages()\"\n [zDisabled]=\"zDisabled()\"\n (keydown.enter)=\"onQuickJump($event)\"\n (blur)=\"onQuickJump($event)\" />\n </div>\n }\n} @else {\n <!-- Simple Mode -->\n <z-button-group>\n <z-button zType=\"outline\" zSize=\"sm\" [zDisabled]=\"!canGoPrev() || zDisabled()\" (click)=\"goToPrev()\">\n <z-icon zType=\"lucideChevronLeft\" zSize=\"16\" />\n <span class=\"ml-1\">{{ 'i18n_z_ui_pagination_previous' | translate }}</span>\n </z-button>\n\n <span class=\"text-muted-foreground border-input flex h-8 items-center border-y bg-transparent px-3 text-sm\">\n {{ zPageIndex() }} / {{ totalPages() }}\n </span>\n\n <z-button zType=\"outline\" zSize=\"sm\" [zDisabled]=\"!canGoNext() || zDisabled()\" (click)=\"goToNext()\">\n <span class=\"mr-1\">{{ 'i18n_z_ui_pagination_next' | translate }}</span>\n <z-icon zType=\"lucideChevronRight\" zSize=\"16\" />\n </z-button>\n </z-button-group>\n}\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ZButtonComponent, selector: "z-button, button[z-button], a[z-button]", inputs: ["class", "zType", "zSize", "zShape", "zLabel", "zLoading", "zDisabled", "zTypeIcon", "zSizeIcon", "zStrokeWidthIcon", "zWave"], exportAs: ["zButton"] }, { kind: "component", type: ZButtonGroupComponent, selector: "z-button-group", inputs: ["zClass", "zOrientation", "zActive"], outputs: ["zActiveChange"], exportAs: ["zButtonGroup"] }, { kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zSize", "zStrokeWidth", "zSvg"] }, { kind: "component", type: ZInputComponent, selector: "z-input", inputs: ["class", "zType", "zSize", "zAlign", "zLabel", "zLabelClass", "zPlaceholder", "zRequired", "zDisabled", "zReadonly", "zPrefix", "zSuffix", "zMin", "zMax", "zStep", "zShowArrows", "zMask", "zDecimalPlaces", "zAllowNegative", "zThousandSeparator", "zDecimalMarker", "zValidators", "zAsyncValidators", "zAsyncDebounce", "zAsyncValidateOn", "zShowPasswordToggle", "zSearch", "zDebounce", "zAutofocus", "zAutoComplete", "zAllowClear", "zAutoSizeContent", "zRows", "zResize", "zMaxLength", "zAutoSuggest", "zColorConfig"], outputs: ["zOnSearch", "zOnChange", "zOnBlur", "zOnFocus", "zOnKeydown", "zOnEnter", "zOnColorCollapse", "zControl", "zEvent"], exportAs: ["zInput"] }, { kind: "component", type: ZSelectComponent, selector: "z-select", inputs: ["class", "zMode", "zSize", "zLabel", "zLabelClass", "zPlaceholder", "zRequired", "zDisabled", "zReadonly", "zLoading", "zPrefix", "zAllowClear", "zWrap", "zShowSearch", "zPlaceholderSearch", "zDebounce", "zNotFoundText", "zEmptyText", "zEmptyIcon", "zMaxTagCount", "zDropdownMaxHeight", "zOptionHeight", "zVirtualScroll", "zShowAction", "zOptions", "zTranslateLabels", "zKey", "zSearchServer", "zLoadingMore", "zEnableLoadMore", "zScrollDistance", "zMaxVisible", "zScrollClose", "zPosition", "zSelectedTemplate", "zOptionTemplate", "zActionTemplate", "zAsyncValidators", "zAsyncDebounce", "zAsyncValidateOn", "zValidators"], outputs: ["zOnSearch", "zOnLoadMore", "zOnBlur", "zOnFocus", "zControl", "zEvent"], exportAs: ["zSelect"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
136
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: ZPaginationComponent, isStandalone: true, selector: "z-pagination", inputs: { zPageIndex: { classPropertyName: "zPageIndex", publicName: "zPageIndex", isSignal: true, isRequired: false, transformFunction: null }, zPageSize: { classPropertyName: "zPageSize", publicName: "zPageSize", isSignal: true, isRequired: false, transformFunction: null }, zTotal: { classPropertyName: "zTotal", publicName: "zTotal", isSignal: true, isRequired: true, transformFunction: null }, zPageSizeOptions: { classPropertyName: "zPageSizeOptions", publicName: "zPageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, zShowSizeChanger: { classPropertyName: "zShowSizeChanger", publicName: "zShowSizeChanger", isSignal: true, isRequired: false, transformFunction: null }, zShowQuickJumper: { classPropertyName: "zShowQuickJumper", publicName: "zShowQuickJumper", isSignal: true, isRequired: false, transformFunction: null }, zShowTotal: { classPropertyName: "zShowTotal", publicName: "zShowTotal", isSignal: true, isRequired: false, transformFunction: null }, zSimple: { classPropertyName: "zSimple", publicName: "zSimple", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zDisabled: { classPropertyName: "zDisabled", publicName: "zDisabled", isSignal: true, isRequired: false, transformFunction: null }, zTotalLabel: { classPropertyName: "zTotalLabel", publicName: "zTotalLabel", isSignal: true, isRequired: false, transformFunction: null }, zPerPageLabel: { classPropertyName: "zPerPageLabel", publicName: "zPerPageLabel", isSignal: true, isRequired: false, transformFunction: null }, zGoToLabel: { classPropertyName: "zGoToLabel", publicName: "zGoToLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zOnPageChange: "zOnPageChange", zPageIndex: "zPageIndexChange", zPageSize: "zPageSizeChange" }, host: { classAttribute: "z-pagination flex items-center gap-2" }, ngImport: i0, template: "@if (zShowTotal()) {\n <span class=\"text-muted-foreground text-sm whitespace-nowrap\">{{ totalLabelText() }}</span>\n}\n\n@if (!zSimple()) {\n <!-- Page Size Selector -->\n @if (zShowSizeChanger()) {\n <z-select\n class=\"w-fit\"\n zSize=\"sm\"\n [zOptions]=\"pageSizeOptions()\"\n [ngModel]=\"zPageSize()\"\n (ngModelChange)=\"onPageSizeChange($event)\"\n [zDisabled]=\"zDisabled()\"\n [zShowSearch]=\"false\" />\n }\n\n <z-button-group class=\"z-pagination-pages\">\n <!-- Prev Button -->\n <z-button zType=\"outline\" zSize=\"sm\" [zDisabled]=\"!canGoPrev() || zDisabled()\" (click)=\"goToPrev()\">\n <z-icon zType=\"lucideChevronLeft\" zSize=\"16\" />\n </z-button>\n\n <!-- Page Numbers -->\n @for (page of visiblePages(); track $index) {\n @if (page === 'ellipsis') {\n <span\n class=\"z-pagination-ellipsis text-muted-foreground border-input flex h-8 w-8 items-center justify-center border-y border-r bg-transparent text-sm\">\n ...\n </span>\n } @else {\n <z-button\n zType=\"outline\"\n [zWave]=\"false\"\n zSize=\"sm\"\n [class]=\"\n page === zPageIndex() ? 'relative min-w-8 overflow-hidden !bg-transparent hover:!bg-transparent' : 'min-w-8'\n \"\n [zDisabled]=\"zDisabled()\"\n (click)=\"goToPage(page)\">\n @if (page === zPageIndex()) {\n <span class=\"bg-primary pointer-events-none absolute inset-[1px] rounded-[1px]\"></span>\n }\n <span [class]=\"page === zPageIndex() ? 'text-primary-foreground relative z-[1]' : ''\">{{ page }}</span>\n </z-button>\n }\n }\n\n <!-- Next Button -->\n <z-button zType=\"outline\" zSize=\"sm\" [zDisabled]=\"!canGoNext() || zDisabled()\" (click)=\"goToNext()\">\n <z-icon zType=\"lucideChevronRight\" zSize=\"16\" />\n </z-button>\n </z-button-group>\n\n <!-- Quick Jumper -->\n @if (zShowQuickJumper()) {\n <div class=\"flex items-center gap-2 text-sm\">\n <span class=\"text-muted-foreground whitespace-nowrap\">{{ goToLabelText() }}</span>\n <z-input\n zType=\"number\"\n zSize=\"sm\"\n class=\"w-14\"\n [ngModel]=\"zPageIndex()\"\n [zMin]=\"1\"\n [zMax]=\"totalPages()\"\n [zDisabled]=\"zDisabled()\"\n (keydown.enter)=\"onQuickJump($event)\"\n (blur)=\"onQuickJump($event)\" />\n </div>\n }\n} @else {\n <!-- Simple Mode -->\n <z-button-group>\n <z-button zType=\"outline\" zSize=\"sm\" [zDisabled]=\"!canGoPrev() || zDisabled()\" (click)=\"goToPrev()\">\n <z-icon zType=\"lucideChevronLeft\" zSize=\"16\" />\n <span class=\"ml-1\">{{ 'i18n_z_ui_pagination_previous' | translate }}</span>\n </z-button>\n\n <span class=\"text-muted-foreground border-input flex h-8 items-center border-y bg-transparent px-3 text-sm\">\n {{ zPageIndex() }} / {{ totalPages() }}\n </span>\n\n <z-button zType=\"outline\" zSize=\"sm\" [zDisabled]=\"!canGoNext() || zDisabled()\" (click)=\"goToNext()\">\n <span class=\"mr-1\">{{ 'i18n_z_ui_pagination_next' | translate }}</span>\n <z-icon zType=\"lucideChevronRight\" zSize=\"16\" />\n </z-button>\n </z-button-group>\n}\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ZButtonComponent, selector: "z-button, button[z-button], a[z-button]", inputs: ["class", "zType", "zSize", "zShape", "zLabel", "zLoading", "zDisabled", "zTypeIcon", "zSizeIcon", "zStrokeWidthIcon", "zWave"], exportAs: ["zButton"] }, { kind: "component", type: ZButtonGroupComponent, selector: "z-button-group", inputs: ["zClass", "zOrientation", "zActive"], outputs: ["zActiveChange"], exportAs: ["zButtonGroup"] }, { kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zSize", "zStrokeWidth", "zSvg"] }, { kind: "component", type: ZInputComponent, selector: "z-input", inputs: ["class", "zType", "zSize", "zAlign", "zLabel", "zLabelClass", "zPlaceholder", "zRequired", "zDisabled", "zReadonly", "zPrefix", "zSuffix", "zMin", "zMax", "zStep", "zShowArrows", "zMask", "zDecimalPlaces", "zAllowNegative", "zThousandSeparator", "zDecimalMarker", "zValidators", "zAsyncValidators", "zAsyncDebounce", "zAsyncValidateOn", "zShowPasswordToggle", "zSearch", "zDebounce", "zAutofocus", "zAutoComplete", "zAllowClear", "zAutoSizeContent", "zRows", "zResize", "zMaxLength", "zAutoSuggest", "zColorConfig"], outputs: ["zOnSearch", "zOnChange", "zOnBlur", "zOnFocus", "zOnKeydown", "zOnEnter", "zOnColorCollapse", "zControl", "zEvent"], exportAs: ["zInput"] }, { kind: "component", type: ZSelectComponent, selector: "z-select", inputs: ["class", "zMode", "zSize", "zLabel", "zLabelClass", "zPlaceholder", "zRequired", "zDisabled", "zReadonly", "zLoading", "zPrefix", "zAllowClear", "zWrap", "zShowSearch", "zPlaceholderSearch", "zDebounce", "zNotFoundText", "zEmptyText", "zEmptyIcon", "zMaxTagCount", "zDropdownMaxHeight", "zOptionHeight", "zVirtualScroll", "zShowAction", "zOptions", "zConfig", "zTranslateLabels", "zKey", "zSearchServer", "zLoadingMore", "zEnableLoadMore", "zScrollDistance", "zMaxVisible", "zScrollClose", "zPosition", "zSelectedTemplate", "zOptionTemplate", "zActionTemplate", "zAsyncValidators", "zAsyncDebounce", "zAsyncValidateOn", "zValidators"], outputs: ["zOnSearch", "zOnLoadMore", "zOnBlur", "zOnFocus", "zControl", "zEvent"], exportAs: ["zSelect"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
137
137
  }
138
138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: ZPaginationComponent, decorators: [{
139
139
  type: Component,