@flusys/ng-task-manager 7.1.0 → 8.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,17 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, inject, signal, DestroyRef, computed, input, output, Component, model, effect, untracked } from '@angular/core';
3
- import { ApiResourceService, TranslatePipe, AngularModule, TranslateService, UserSelectComponent, resolveTranslationModule, SHARED_MESSAGES } from '@flusys/ng-shared';
2
+ import { Service, inject, signal, DestroyRef, computed, input, output, Component, model, effect, untracked } from '@angular/core';
3
+ import { ApiResourceService, TranslatePipe, TranslateService, UserSelectComponent, resolveTranslationModule, SHARED_MESSAGES } from '@flusys/ng-shared';
4
4
  import { firstValueFrom, Subject } from 'rxjs';
5
5
  import { io } from 'socket.io-client';
6
6
  import { APP_CONFIG } from '@flusys/ng-core';
7
7
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
- import * as i3 from '@angular/common';
9
8
  import { DatePipe } from '@angular/common';
10
- import * as i1 from '@flusys/ng-ui';
11
- import { TooltipDirective, UiModule, ConfirmationService, MessageService } from '@flusys/ng-ui';
12
- import * as i2 from '@angular/forms';
9
+ import { TooltipDirective, AvatarComponent, TagComponent, UiIconComponent, DatePickerComponent, DialogComponent, FButtonDirective, InputTextDirective, MultiSelectComponent, SelectComponent, TextareaDirective, DrawerComponent, SkeletonComponent, ConfirmationService, MessageService, SortableColumnDirective, SortIconComponent, TableComponent } from '@flusys/ng-ui';
10
+ import * as i1 from '@angular/forms';
13
11
  import { FormsModule } from '@angular/forms';
12
+ import { form, required, FormField } from '@angular/forms/signals';
14
13
  import { Router } from '@angular/router';
15
- import * as i2$1 from '@angular/cdk/drag-drop';
14
+ import * as i1$1 from '@angular/cdk/drag-drop';
16
15
  import { moveItemInArray, transferArrayItem, DragDropModule } from '@angular/cdk/drag-drop';
17
16
 
18
17
  class TaskBoardApiService extends ApiResourceService {
@@ -31,12 +30,11 @@ class TaskBoardApiService extends ApiResourceService {
31
30
  userId,
32
31
  }));
33
32
  }
34
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskBoardApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
35
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskBoardApiService, providedIn: 'root' });
33
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
34
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardApiService });
36
35
  }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskBoardApiService, decorators: [{
38
- type: Injectable,
39
- args: [{ providedIn: 'root' }]
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardApiService, decorators: [{
37
+ type: Service
40
38
  }], ctorParameters: () => [] });
41
39
 
42
40
  class TaskApiService extends ApiResourceService {
@@ -46,12 +44,11 @@ class TaskApiService extends ApiResourceService {
46
44
  moveTask(dto) {
47
45
  return firstValueFrom(this.http.post(`${this.baseUrl}/move`, dto));
48
46
  }
49
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
50
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskApiService, providedIn: 'root' });
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
48
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskApiService });
51
49
  }
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskApiService, decorators: [{
53
- type: Injectable,
54
- args: [{ providedIn: 'root' }]
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskApiService, decorators: [{
51
+ type: Service
55
52
  }], ctorParameters: () => [] });
56
53
  class TaskListApiService extends ApiResourceService {
57
54
  constructor() {
@@ -63,34 +60,31 @@ class TaskListApiService extends ApiResourceService {
63
60
  reorderLists(dto) {
64
61
  return firstValueFrom(this.http.post(`${this.baseUrl}/reorder`, dto));
65
62
  }
66
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskListApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
67
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskListApiService, providedIn: 'root' });
63
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskListApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
64
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskListApiService });
68
65
  }
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskListApiService, decorators: [{
70
- type: Injectable,
71
- args: [{ providedIn: 'root' }]
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskListApiService, decorators: [{
67
+ type: Service
72
68
  }], ctorParameters: () => [] });
73
69
  class TaskLabelApiService extends ApiResourceService {
74
70
  constructor() {
75
71
  super('label', 'taskManager');
76
72
  }
77
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskLabelApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
78
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskLabelApiService, providedIn: 'root' });
73
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskLabelApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
74
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskLabelApiService });
79
75
  }
80
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskLabelApiService, decorators: [{
81
- type: Injectable,
82
- args: [{ providedIn: 'root' }]
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskLabelApiService, decorators: [{
77
+ type: Service
83
78
  }], ctorParameters: () => [] });
84
79
  class TaskCommentApiService extends ApiResourceService {
85
80
  constructor() {
86
81
  super('comment', 'taskManager');
87
82
  }
88
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskCommentApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
89
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskCommentApiService, providedIn: 'root' });
83
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskCommentApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
84
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskCommentApiService });
90
85
  }
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskCommentApiService, decorators: [{
92
- type: Injectable,
93
- args: [{ providedIn: 'root' }]
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskCommentApiService, decorators: [{
87
+ type: Service
94
88
  }], ctorParameters: () => [] });
95
89
 
96
90
  class TaskBoardSocketService {
@@ -136,12 +130,11 @@ class TaskBoardSocketService {
136
130
  const services = this.appConfig.services;
137
131
  return services?.['taskManager']?.socketUrl ?? this.appConfig.apiBaseUrl;
138
132
  }
139
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskBoardSocketService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
140
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskBoardSocketService, providedIn: 'root' });
133
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardSocketService, deps: [], target: i0.ɵɵFactoryTarget.Service });
134
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardSocketService });
141
135
  }
142
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskBoardSocketService, decorators: [{
143
- type: Injectable,
144
- args: [{ providedIn: 'root' }]
136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardSocketService, decorators: [{
137
+ type: Service
145
138
  }] });
146
139
 
147
140
  class TaskBoardStateService {
@@ -359,12 +352,11 @@ class TaskBoardStateService {
359
352
  }
360
353
  }
361
354
  }
362
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskBoardStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
363
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskBoardStateService, providedIn: 'root' });
355
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardStateService, deps: [], target: i0.ɵɵFactoryTarget.Service });
356
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardStateService });
364
357
  }
365
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskBoardStateService, decorators: [{
366
- type: Injectable,
367
- args: [{ providedIn: 'root' }]
358
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardStateService, decorators: [{
359
+ type: Service
368
360
  }], ctorParameters: () => [] });
369
361
 
370
362
  const MEMBER_COLOR_PALETTE = [
@@ -426,8 +418,8 @@ class TaskCardComponent {
426
418
  initials = memberInitials;
427
419
  isOverdue = isTaskOverdue;
428
420
  memberColor = memberColorFromId;
429
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
430
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: TaskCardComponent, isStandalone: true, selector: "tm-task-card", inputs: { task: { classPropertyName: "task", publicName: "task", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { cardClick: "cardClick", editClick: "editClick", deleteClick: "deleteClick" }, ngImport: i0, template: `
421
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
422
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: TaskCardComponent, isStandalone: true, selector: "tm-task-card", inputs: { task: { classPropertyName: "task", publicName: "task", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { cardClick: "cardClick", editClick: "editClick", deleteClick: "deleteClick" }, ngImport: i0, template: `
431
423
  <div
432
424
  class="task-card group relative rounded-border border border-surface p-3 cursor-pointer shadow-sm hover:shadow-md transition-shadow"
433
425
  (click)="cardClick.emit(task())"
@@ -507,13 +499,13 @@ class TaskCardComponent {
507
499
  }
508
500
  </div>
509
501
  </div>
510
- `, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "ngmodule", type: UiModule }, { kind: "component", type: i1.AvatarComponent, selector: "f-avatar", inputs: ["label", "icon", "image", "shape", "size", "color", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: i1.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
502
+ `, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: AvatarComponent, selector: "f-avatar", inputs: ["label", "icon", "image", "shape", "size", "color", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
511
503
  }
512
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskCardComponent, decorators: [{
504
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskCardComponent, decorators: [{
513
505
  type: Component,
514
506
  args: [{
515
507
  selector: 'tm-task-card',
516
- imports: [DatePipe, TranslatePipe, TooltipDirective, UiModule],
508
+ imports: [DatePipe, TranslatePipe, TooltipDirective, AvatarComponent, TagComponent, UiIconComponent],
517
509
  template: `
518
510
  <div
519
511
  class="task-card group relative rounded-border border border-surface p-3 cursor-pointer shadow-sm hover:shadow-md transition-shadow"
@@ -622,22 +614,33 @@ class TaskFormDialogComponent {
622
614
  isSaving = signal(false, /* @ts-ignore */
623
615
  ...(ngDevMode ? [{ debugName: "isSaving" }] : /* istanbul ignore next */ []));
624
616
  priorityOptions = PRIORITY_OPTIONS;
625
- title = '';
626
- description = '';
627
- priority = 'MEDIUM';
628
- dueDate = null;
629
- selectedAssigneeIds = [];
630
- selectedLabelIds = [];
617
+ formModel = signal({
618
+ title: '',
619
+ description: '',
620
+ priority: 'MEDIUM',
621
+ }, /* @ts-ignore */
622
+ ...(ngDevMode ? [{ debugName: "formModel" }] : /* istanbul ignore next */ []));
623
+ taskForm = form(this.formModel, (f) => {
624
+ required(f.title);
625
+ });
626
+ dueDate = signal(null, /* @ts-ignore */
627
+ ...(ngDevMode ? [{ debugName: "dueDate" }] : /* istanbul ignore next */ []));
628
+ selectedAssigneeIds = signal([], /* @ts-ignore */
629
+ ...(ngDevMode ? [{ debugName: "selectedAssigneeIds" }] : /* istanbul ignore next */ []));
630
+ selectedLabelIds = signal([], /* @ts-ignore */
631
+ ...(ngDevMode ? [{ debugName: "selectedLabelIds" }] : /* istanbul ignore next */ []));
631
632
  constructor() {
632
633
  effect(() => {
633
634
  const t = this.task();
634
635
  if (t) {
635
- this.title = t.title;
636
- this.description = t.description ?? '';
637
- this.priority = t.priority;
638
- this.dueDate = t.dueDate ? new Date(t.dueDate) : null;
639
- this.selectedAssigneeIds = t.assignees?.map((a) => a.userId) ?? [];
640
- this.selectedLabelIds = t.labelIds ?? [];
636
+ this.formModel.set({
637
+ title: t.title,
638
+ description: t.description ?? '',
639
+ priority: t.priority,
640
+ });
641
+ this.dueDate.set(t.dueDate ? new Date(t.dueDate) : null);
642
+ this.selectedAssigneeIds.set(t.assignees?.map((a) => a.userId) ?? []);
643
+ this.selectedLabelIds.set(t.labelIds ?? []);
641
644
  }
642
645
  else {
643
646
  this.reset();
@@ -645,25 +648,26 @@ class TaskFormDialogComponent {
645
648
  });
646
649
  }
647
650
  async onSave() {
648
- if (!this.title.trim())
651
+ const { title, description, priority } = this.formModel();
652
+ if (!title.trim())
649
653
  return;
650
654
  this.isSaving.set(true);
651
655
  try {
652
- const dueDateStr = this.dueDate
653
- ? this.dueDate.toISOString().slice(0, 10)
654
- : undefined;
656
+ const dueDate = this.dueDate();
657
+ const dueDateStr = dueDate ? dueDate.toISOString().slice(0, 10) : undefined;
655
658
  const existing = this.task();
656
- const priority = this.priority;
659
+ const assigneeIds = this.selectedAssigneeIds();
660
+ const labelIds = this.selectedLabelIds();
657
661
  let result;
658
662
  if (existing) {
659
663
  const dto = {
660
664
  id: existing.id,
661
- title: this.title,
662
- description: this.description || undefined,
665
+ title,
666
+ description: description || undefined,
663
667
  priority,
664
668
  dueDate: dueDateStr,
665
- assigneeIds: this.selectedAssigneeIds,
666
- labelIds: this.selectedLabelIds,
669
+ assigneeIds,
670
+ labelIds,
667
671
  };
668
672
  result = await this.taskApi.update(dto);
669
673
  }
@@ -671,12 +675,12 @@ class TaskFormDialogComponent {
671
675
  const dto = {
672
676
  boardId: this.boardId(),
673
677
  listId: this.listId(),
674
- title: this.title,
675
- description: this.description || undefined,
678
+ title,
679
+ description: description || undefined,
676
680
  priority,
677
681
  dueDate: dueDateStr,
678
- assigneeIds: this.selectedAssigneeIds,
679
- labelIds: this.selectedLabelIds,
682
+ assigneeIds,
683
+ labelIds,
680
684
  };
681
685
  result = await this.taskApi.insert(dto);
682
686
  }
@@ -693,15 +697,13 @@ class TaskFormDialogComponent {
693
697
  this.reset();
694
698
  }
695
699
  reset() {
696
- this.title = '';
697
- this.description = '';
698
- this.priority = 'MEDIUM';
699
- this.dueDate = null;
700
- this.selectedAssigneeIds = [];
701
- this.selectedLabelIds = [];
702
- }
703
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskFormDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
704
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: TaskFormDialogComponent, isStandalone: true, selector: "tm-task-form-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, task: { classPropertyName: "task", publicName: "task", isSignal: true, isRequired: false, transformFunction: null }, boardId: { classPropertyName: "boardId", publicName: "boardId", isSignal: true, isRequired: true, transformFunction: null }, listId: { classPropertyName: "listId", publicName: "listId", isSignal: true, isRequired: true, transformFunction: null }, members: { classPropertyName: "members", publicName: "members", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visible: "visibleChange", saved: "saved" }, ngImport: i0, template: `
700
+ this.formModel.set({ title: '', description: '', priority: 'MEDIUM' });
701
+ this.dueDate.set(null);
702
+ this.selectedAssigneeIds.set([]);
703
+ this.selectedLabelIds.set([]);
704
+ }
705
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskFormDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
706
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: TaskFormDialogComponent, isStandalone: true, selector: "tm-task-form-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, task: { classPropertyName: "task", publicName: "task", isSignal: true, isRequired: false, transformFunction: null }, boardId: { classPropertyName: "boardId", publicName: "boardId", isSignal: true, isRequired: true, transformFunction: null }, listId: { classPropertyName: "listId", publicName: "listId", isSignal: true, isRequired: true, transformFunction: null }, members: { classPropertyName: "members", publicName: "members", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visible: "visibleChange", saved: "saved" }, ngImport: i0, template: `
705
707
  <f-dialog
706
708
  [header]="
707
709
  (task() ? 'task.form.title.edit' : 'task.form.title.create') | translate
@@ -719,7 +721,7 @@ class TaskFormDialogComponent {
719
721
  >
720
722
  <input
721
723
  fInputText
722
- [(ngModel)]="title"
724
+ [formField]="taskForm.title"
723
725
  [placeholder]="'task.form.title.placeholder' | translate"
724
726
  />
725
727
  </div>
@@ -730,7 +732,7 @@ class TaskFormDialogComponent {
730
732
  }}</label>
731
733
  <textarea
732
734
  fTextarea
733
- [(ngModel)]="description"
735
+ [formField]="taskForm.description"
734
736
  rows="3"
735
737
  [placeholder]="'task.form.description.placeholder' | translate"
736
738
  ></textarea>
@@ -742,7 +744,7 @@ class TaskFormDialogComponent {
742
744
  'task.form.priority.label' | translate
743
745
  }}</label>
744
746
  <f-select
745
- [(ngModel)]="priority"
747
+ [formField]="taskForm.priority"
746
748
  [options]="priorityOptions"
747
749
  optionLabel="labelKey"
748
750
  optionValue="value"
@@ -762,7 +764,8 @@ class TaskFormDialogComponent {
762
764
  'task.form.due.date.label' | translate
763
765
  }}</label>
764
766
  <f-datepicker
765
- [(ngModel)]="dueDate"
767
+ [ngModel]="dueDate()"
768
+ (ngModelChange)="dueDate.set($event)"
766
769
  [showClear]="true"
767
770
  [placeholder]="'task.form.due.date.placeholder' | translate"
768
771
  />
@@ -774,7 +777,8 @@ class TaskFormDialogComponent {
774
777
  'task.form.assignee.label' | translate
775
778
  }}</label>
776
779
  <f-multiselect
777
- [(ngModel)]="selectedAssigneeIds"
780
+ [ngModel]="selectedAssigneeIds()"
781
+ (ngModelChange)="selectedAssigneeIds.set($event)"
778
782
  [options]="members()"
779
783
  optionLabel="userName"
780
784
  optionValue="userId"
@@ -788,7 +792,8 @@ class TaskFormDialogComponent {
788
792
  'task.form.labels.label' | translate
789
793
  }}</label>
790
794
  <f-multiselect
791
- [(ngModel)]="selectedLabelIds"
795
+ [ngModel]="selectedLabelIds()"
796
+ (ngModelChange)="selectedLabelIds.set($event)"
792
797
  [options]="labels()"
793
798
  optionLabel="name"
794
799
  optionValue="id"
@@ -811,13 +816,25 @@ class TaskFormDialogComponent {
811
816
  </div>
812
817
  </ng-template>
813
818
  </f-dialog>
814
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1.DatePickerComponent, selector: "f-datepicker", inputs: ["placeholder", "dateFormat", "disabled", "readonly", "readonlyInput", "showTime", "timeOnly", "hourFormat", "showSeconds", "selectionMode", "minDate", "maxDate", "disabledDates", "disabledDays", "inputId", "invalid", "touched", "showClear", "inputStyleClass", "showIcon", "iconDisplay", "showButtonBar", "inline", "numberOfMonths", "view", "showOtherMonths", "selectOtherMonths", "firstDayOfWeek", "appendTo", "styleClass", "style"], outputs: ["onBlur", "onSelect", "onShow", "onHide", "onClearClick", "onTodayClick", "onMonthChange", "onYearChange"] }, { kind: "directive", type: i1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: i1.MultiSelectComponent, selector: "f-multiselect", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "inputId", "invalid", "touched", "showClear", "optionDisabled", "display", "maxSelectedLabels", "selectionLimit", "showToggleAll", "styleClass", "style", "appendTo", "readonly", "autofocus", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onBlur", "onFocus", "onChange", "onFilter", "onShow", "onHide", "onClear", "onLazyLoad", "onSelectAllChange"] }, { kind: "component", type: i1.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: i1.TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: i1.DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
819
+ `, isInline: true, dependencies: [{ kind: "component", type: DatePickerComponent, selector: "f-datepicker", inputs: ["placeholder", "dateFormat", "disabled", "readonly", "readonlyInput", "showTime", "timeOnly", "hourFormat", "showSeconds", "selectionMode", "minDate", "maxDate", "disabledDates", "disabledDays", "inputId", "invalid", "touched", "showClear", "inputStyleClass", "showIcon", "iconDisplay", "showButtonBar", "inline", "numberOfMonths", "view", "showOtherMonths", "selectOtherMonths", "firstDayOfWeek", "appendTo", "styleClass", "style"], outputs: ["onBlur", "onSelect", "onShow", "onHide", "onClearClick", "onTodayClick", "onMonthChange", "onYearChange"] }, { kind: "component", type: DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: MultiSelectComponent, selector: "f-multiselect", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "inputId", "invalid", "touched", "showClear", "optionDisabled", "display", "maxSelectedLabels", "selectionLimit", "showToggleAll", "styleClass", "style", "appendTo", "readonly", "autofocus", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onBlur", "onFocus", "onChange", "onFilter", "onShow", "onHide", "onClear", "onLazyLoad", "onSelectAllChange"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { 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: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
815
820
  }
816
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskFormDialogComponent, decorators: [{
821
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskFormDialogComponent, decorators: [{
817
822
  type: Component,
818
823
  args: [{
819
824
  selector: 'tm-task-form-dialog',
820
- imports: [UiModule, FormsModule, TranslatePipe],
825
+ imports: [
826
+ DatePickerComponent,
827
+ DialogComponent,
828
+ FButtonDirective,
829
+ InputTextDirective,
830
+ MultiSelectComponent,
831
+ SelectComponent,
832
+ TextareaDirective,
833
+ UiIconComponent,
834
+ FormsModule,
835
+ FormField,
836
+ TranslatePipe,
837
+ ],
821
838
  template: `
822
839
  <f-dialog
823
840
  [header]="
@@ -836,7 +853,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
836
853
  >
837
854
  <input
838
855
  fInputText
839
- [(ngModel)]="title"
856
+ [formField]="taskForm.title"
840
857
  [placeholder]="'task.form.title.placeholder' | translate"
841
858
  />
842
859
  </div>
@@ -847,7 +864,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
847
864
  }}</label>
848
865
  <textarea
849
866
  fTextarea
850
- [(ngModel)]="description"
867
+ [formField]="taskForm.description"
851
868
  rows="3"
852
869
  [placeholder]="'task.form.description.placeholder' | translate"
853
870
  ></textarea>
@@ -859,7 +876,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
859
876
  'task.form.priority.label' | translate
860
877
  }}</label>
861
878
  <f-select
862
- [(ngModel)]="priority"
879
+ [formField]="taskForm.priority"
863
880
  [options]="priorityOptions"
864
881
  optionLabel="labelKey"
865
882
  optionValue="value"
@@ -879,7 +896,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
879
896
  'task.form.due.date.label' | translate
880
897
  }}</label>
881
898
  <f-datepicker
882
- [(ngModel)]="dueDate"
899
+ [ngModel]="dueDate()"
900
+ (ngModelChange)="dueDate.set($event)"
883
901
  [showClear]="true"
884
902
  [placeholder]="'task.form.due.date.placeholder' | translate"
885
903
  />
@@ -891,7 +909,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
891
909
  'task.form.assignee.label' | translate
892
910
  }}</label>
893
911
  <f-multiselect
894
- [(ngModel)]="selectedAssigneeIds"
912
+ [ngModel]="selectedAssigneeIds()"
913
+ (ngModelChange)="selectedAssigneeIds.set($event)"
895
914
  [options]="members()"
896
915
  optionLabel="userName"
897
916
  optionValue="userId"
@@ -905,7 +924,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
905
924
  'task.form.labels.label' | translate
906
925
  }}</label>
907
926
  <f-multiselect
908
- [(ngModel)]="selectedLabelIds"
927
+ [ngModel]="selectedLabelIds()"
928
+ (ngModelChange)="selectedLabelIds.set($event)"
909
929
  [options]="labels()"
910
930
  optionLabel="name"
911
931
  optionValue="id"
@@ -949,8 +969,10 @@ class TaskDetailPanelComponent {
949
969
  ...(ngDevMode ? [{ debugName: "replyingToId" }] : /* istanbul ignore next */ []));
950
970
  isDeleting = signal(false, /* @ts-ignore */
951
971
  ...(ngDevMode ? [{ debugName: "isDeleting" }] : /* istanbul ignore next */ []));
952
- newComment = '';
953
- replyText = '';
972
+ newComment = signal('', /* @ts-ignore */
973
+ ...(ngDevMode ? [{ debugName: "newComment" }] : /* istanbul ignore next */ []));
974
+ replyText = signal('', /* @ts-ignore */
975
+ ...(ngDevMode ? [{ debugName: "replyText" }] : /* istanbul ignore next */ []));
954
976
  assigneeMembers = computed(() => this.task()?.assignees ?? [], /* @ts-ignore */
955
977
  ...(ngDevMode ? [{ debugName: "assigneeMembers" }] : /* istanbul ignore next */ []));
956
978
  rootComments = computed(() => this.comments().filter((c) => !c.parentCommentId), /* @ts-ignore */
@@ -975,12 +997,12 @@ class TaskDetailPanelComponent {
975
997
  }
976
998
  else {
977
999
  this.replyingToId.set(commentId);
978
- this.replyText = '';
1000
+ this.replyText.set('');
979
1001
  }
980
1002
  }
981
1003
  cancelReply() {
982
1004
  this.replyingToId.set(null);
983
- this.replyText = '';
1005
+ this.replyText.set('');
984
1006
  }
985
1007
  async deleteTask(taskId) {
986
1008
  this.isDeleting.set(true);
@@ -999,30 +1021,30 @@ class TaskDetailPanelComponent {
999
1021
  this.comments.set(res.data ?? []);
1000
1022
  }
1001
1023
  async addComment(taskId) {
1002
- if (!this.newComment.trim())
1024
+ if (!this.newComment().trim())
1003
1025
  return;
1004
1026
  this.isSendingComment.set(true);
1005
1027
  try {
1006
1028
  const res = await this.commentApi.insert({
1007
1029
  taskId,
1008
- content: this.newComment,
1030
+ content: this.newComment(),
1009
1031
  });
1010
1032
  if (res.data)
1011
1033
  this.comments.update((list) => [...list, res.data]);
1012
- this.newComment = '';
1034
+ this.newComment.set('');
1013
1035
  }
1014
1036
  finally {
1015
1037
  this.isSendingComment.set(false);
1016
1038
  }
1017
1039
  }
1018
1040
  async submitReply(taskId, parentCommentId) {
1019
- if (!this.replyText.trim())
1041
+ if (!this.replyText().trim())
1020
1042
  return;
1021
1043
  this.isSendingReply.set(true);
1022
1044
  try {
1023
1045
  const res = await this.commentApi.insert({
1024
1046
  taskId,
1025
- content: this.replyText,
1047
+ content: this.replyText(),
1026
1048
  parentCommentId,
1027
1049
  });
1028
1050
  if (res.data)
@@ -1033,8 +1055,8 @@ class TaskDetailPanelComponent {
1033
1055
  this.isSendingReply.set(false);
1034
1056
  }
1035
1057
  }
1036
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskDetailPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1037
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: TaskDetailPanelComponent, isStandalone: true, selector: "tm-task-detail-panel", inputs: { task: { classPropertyName: "task", publicName: "task", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closePanel: "closePanel", editTask: "editTask" }, ngImport: i0, template: `
1058
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskDetailPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1059
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: TaskDetailPanelComponent, isStandalone: true, selector: "tm-task-detail-panel", inputs: { task: { classPropertyName: "task", publicName: "task", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closePanel: "closePanel", editTask: "editTask" }, ngImport: i0, template: `
1038
1060
  <f-drawer
1039
1061
  [visible]="!!task()"
1040
1062
  position="right"
@@ -1169,7 +1191,8 @@ class TaskDetailPanelComponent {
1169
1191
  >
1170
1192
  <textarea
1171
1193
  fTextarea
1172
- [(ngModel)]="replyText"
1194
+ [ngModel]="replyText()"
1195
+ (ngModelChange)="replyText.set($event)"
1173
1196
  rows="2"
1174
1197
  [placeholder]="
1175
1198
  'task.comment.reply.placeholder' | translate
@@ -1181,7 +1204,7 @@ class TaskDetailPanelComponent {
1181
1204
  <button
1182
1205
  fButton
1183
1206
  size="small"
1184
- [disabled]="!replyText.trim() || isSendingReply()"
1207
+ [disabled]="!replyText().trim() || isSendingReply()"
1185
1208
  (click)="submitReply(t.id, comment.id)"
1186
1209
  >
1187
1210
  @if (isSendingReply()) {
@@ -1214,14 +1237,15 @@ class TaskDetailPanelComponent {
1214
1237
  <div class="flex gap-2 mt-3">
1215
1238
  <textarea
1216
1239
  fTextarea
1217
- [(ngModel)]="newComment"
1240
+ [ngModel]="newComment()"
1241
+ (ngModelChange)="newComment.set($event)"
1218
1242
  rows="2"
1219
1243
  [placeholder]="'task.detail.comment.placeholder' | translate"
1220
1244
  class="flex-1 resize-none"
1221
1245
  ></textarea>
1222
1246
  <button
1223
1247
  fButton
1224
- [disabled]="!newComment.trim() || isSendingComment()"
1248
+ [disabled]="!newComment().trim() || isSendingComment()"
1225
1249
  (click)="addComment(t.id)"
1226
1250
  >
1227
1251
  @if (isSendingComment()) {
@@ -1235,15 +1259,24 @@ class TaskDetailPanelComponent {
1235
1259
  </div>
1236
1260
  }
1237
1261
  </f-drawer>
1238
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "component", type: i1.AvatarComponent, selector: "f-avatar", inputs: ["label", "icon", "image", "shape", "size", "color", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "directive", type: i1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: i1.TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: i1.DrawerComponent, selector: "f-drawer", inputs: ["header", "visible", "position", "fullScreen", "modal", "closable", "closeOnEscape", "dismissable", "blockScroll", "returnFocusOnClose", "style", "styleClass"], outputs: ["visibleChange", "onShow", "onHide"] }, { kind: "directive", type: i1.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1262
+ `, isInline: true, dependencies: [{ kind: "component", type: AvatarComponent, selector: "f-avatar", inputs: ["label", "icon", "image", "shape", "size", "color", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: DrawerComponent, selector: "f-drawer", inputs: ["header", "visible", "position", "fullScreen", "modal", "closable", "closeOnEscape", "dismissable", "blockScroll", "returnFocusOnClose", "style", "styleClass"], outputs: ["visibleChange", "onShow", "onHide"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1239
1263
  }
1240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskDetailPanelComponent, decorators: [{
1264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskDetailPanelComponent, decorators: [{
1241
1265
  type: Component,
1242
1266
  args: [{
1243
1267
  selector: 'tm-task-detail-panel',
1244
- imports: [UiModule, DatePipe,
1268
+ imports: [
1269
+ AvatarComponent,
1270
+ DrawerComponent,
1271
+ FButtonDirective,
1272
+ TagComponent,
1273
+ TextareaDirective,
1274
+ TooltipDirective,
1275
+ UiIconComponent,
1276
+ DatePipe,
1245
1277
  FormsModule,
1246
- TranslatePipe,],
1278
+ TranslatePipe,
1279
+ ],
1247
1280
  template: `
1248
1281
  <f-drawer
1249
1282
  [visible]="!!task()"
@@ -1379,7 +1412,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
1379
1412
  >
1380
1413
  <textarea
1381
1414
  fTextarea
1382
- [(ngModel)]="replyText"
1415
+ [ngModel]="replyText()"
1416
+ (ngModelChange)="replyText.set($event)"
1383
1417
  rows="2"
1384
1418
  [placeholder]="
1385
1419
  'task.comment.reply.placeholder' | translate
@@ -1391,7 +1425,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
1391
1425
  <button
1392
1426
  fButton
1393
1427
  size="small"
1394
- [disabled]="!replyText.trim() || isSendingReply()"
1428
+ [disabled]="!replyText().trim() || isSendingReply()"
1395
1429
  (click)="submitReply(t.id, comment.id)"
1396
1430
  >
1397
1431
  @if (isSendingReply()) {
@@ -1424,14 +1458,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
1424
1458
  <div class="flex gap-2 mt-3">
1425
1459
  <textarea
1426
1460
  fTextarea
1427
- [(ngModel)]="newComment"
1461
+ [ngModel]="newComment()"
1462
+ (ngModelChange)="newComment.set($event)"
1428
1463
  rows="2"
1429
1464
  [placeholder]="'task.detail.comment.placeholder' | translate"
1430
1465
  class="flex-1 resize-none"
1431
1466
  ></textarea>
1432
1467
  <button
1433
1468
  fButton
1434
- [disabled]="!newComment.trim() || isSendingComment()"
1469
+ [disabled]="!newComment().trim() || isSendingComment()"
1435
1470
  (click)="addComment(t.id)"
1436
1471
  >
1437
1472
  @if (isSendingComment()) {
@@ -1490,8 +1525,8 @@ class BoardListPageComponent {
1490
1525
  this.isCreating.set(false);
1491
1526
  }
1492
1527
  }
1493
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: BoardListPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1494
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: BoardListPageComponent, isStandalone: true, selector: "tm-board-list-page", ngImport: i0, template: `
1528
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BoardListPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1529
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: BoardListPageComponent, isStandalone: true, selector: "tm-board-list-page", ngImport: i0, template: `
1495
1530
  <div class="p-2 sm:p-4">
1496
1531
  <div
1497
1532
  class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 mb-4"
@@ -1723,13 +1758,24 @@ class BoardListPageComponent {
1723
1758
  </div>
1724
1759
  </ng-template>
1725
1760
  </f-dialog>
1726
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1.SkeletonComponent, selector: "f-skeleton", inputs: ["width", "height", "size", "borderRadius", "shape", "animation", "styleClass"] }, { kind: "directive", type: i1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "directive", type: i1.TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: i1.DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: i1.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1761
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: SkeletonComponent, selector: "f-skeleton", inputs: ["width", "height", "size", "borderRadius", "shape", "animation", "styleClass"] }, { kind: "directive", type: TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
1727
1762
  }
1728
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: BoardListPageComponent, decorators: [{
1763
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BoardListPageComponent, decorators: [{
1729
1764
  type: Component,
1730
1765
  args: [{
1731
1766
  selector: 'tm-board-list-page',
1732
- imports: [AngularModule, UiModule, TranslatePipe],
1767
+ imports: [
1768
+ DatePipe,
1769
+ FormsModule,
1770
+ DialogComponent,
1771
+ FButtonDirective,
1772
+ InputTextDirective,
1773
+ SkeletonComponent,
1774
+ TextareaDirective,
1775
+ TooltipDirective,
1776
+ UiIconComponent,
1777
+ TranslatePipe,
1778
+ ],
1733
1779
  template: `
1734
1780
  <div class="p-2 sm:p-4">
1735
1781
  <div
@@ -2231,8 +2277,8 @@ class BoardViewPageComponent {
2231
2277
  this.isAddingList.set(false);
2232
2278
  }
2233
2279
  }
2234
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: BoardViewPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2235
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: BoardViewPageComponent, isStandalone: true, selector: "tm-board-view-page", inputs: { boardId: { classPropertyName: "boardId", publicName: "boardId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
2280
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BoardViewPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2281
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: BoardViewPageComponent, isStandalone: true, selector: "tm-board-view-page", inputs: { boardId: { classPropertyName: "boardId", publicName: "boardId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
2236
2282
  <div class="flex flex-col h-full">
2237
2283
  <div class="flex flex-col">
2238
2284
  <div class="flex items-center justify-between px-5 py-2.5 gap-4">
@@ -3035,16 +3081,29 @@ class BoardViewPageComponent {
3035
3081
  </div>
3036
3082
  </ng-template>
3037
3083
  </f-dialog>
3038
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "component", type: i1.AvatarComponent, selector: "f-avatar", inputs: ["label", "icon", "image", "shape", "size", "color", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "directive", type: i1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1.SkeletonComponent, selector: "f-skeleton", inputs: ["width", "height", "size", "borderRadius", "shape", "animation", "styleClass"] }, { kind: "component", type: i1.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: i1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: i1.SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: i1.TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: i1.DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "component", type: i1.SortIconComponent, selector: "f-sorticon", inputs: ["field"] }, { kind: "directive", type: i1.SortableColumnDirective, selector: "[fSortableColumn]", inputs: ["fSortableColumn"] }, { kind: "component", type: i1.TableComponent, selector: "f-table", inputs: ["value", "lazy", "loading", "rows", "totalRecords", "rowHover", "dataKey", "scrollable", "scrollHeight", "paginator", "first", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "tableStyle", "styleClass", "globalFilterFields", "filterDelay", "responsiveLayout", "selectionMode", "sortMode", "rowExpandMode", "resizableColumns", "rowStyleClass", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "expandedRowKeys", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "expandedRowKeysChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onRowSelect", "onRowUnselect", "onSelectAllChange", "onRowExpand", "onRowCollapse", "onColResize", "onRowContextMenu"] }, { kind: "directive", type: i1.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2$1.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2$1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2$1.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TaskCardComponent, selector: "tm-task-card", inputs: ["task"], outputs: ["cardClick", "editClick", "deleteClick"] }, { kind: "component", type: TaskFormDialogComponent, selector: "tm-task-form-dialog", inputs: ["visible", "task", "boardId", "listId", "members", "labels"], outputs: ["visibleChange", "saved"] }, { kind: "component", type: TaskDetailPanelComponent, selector: "tm-task-detail-panel", inputs: ["task"], outputs: ["closePanel", "editTask"] }, { kind: "component", type: UserSelectComponent, selector: "lib-user-select", inputs: ["showClear", "value"], outputs: ["valueChange", "userSelected"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
3084
+ `, isInline: true, dependencies: [{ kind: "component", type: AvatarComponent, selector: "f-avatar", inputs: ["label", "icon", "image", "shape", "size", "color", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: SkeletonComponent, selector: "f-skeleton", inputs: ["width", "height", "size", "borderRadius", "shape", "animation", "styleClass"] }, { kind: "directive", type: SortableColumnDirective, selector: "[fSortableColumn]", inputs: ["fSortableColumn"] }, { kind: "component", type: SortIconComponent, selector: "f-sorticon", inputs: ["field"] }, { kind: "component", type: TableComponent, selector: "f-table", inputs: ["value", "lazy", "loading", "rows", "totalRecords", "rowHover", "dataKey", "scrollable", "scrollHeight", "paginator", "first", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "tableStyle", "styleClass", "globalFilterFields", "filterDelay", "responsiveLayout", "selectionMode", "sortMode", "rowExpandMode", "resizableColumns", "rowStyleClass", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "expandedRowKeys", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "expandedRowKeysChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onRowSelect", "onRowUnselect", "onSelectAllChange", "onRowExpand", "onRowCollapse", "onColResize", "onRowContextMenu"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1$1.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i1$1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i1$1.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TaskCardComponent, selector: "tm-task-card", inputs: ["task"], outputs: ["cardClick", "editClick", "deleteClick"] }, { kind: "component", type: TaskFormDialogComponent, selector: "tm-task-form-dialog", inputs: ["visible", "task", "boardId", "listId", "members", "labels"], outputs: ["visibleChange", "saved"] }, { kind: "component", type: TaskDetailPanelComponent, selector: "tm-task-detail-panel", inputs: ["task"], outputs: ["closePanel", "editTask"] }, { kind: "component", type: UserSelectComponent, selector: "lib-user-select", inputs: ["showClear", "value"], outputs: ["valueChange", "userSelected"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
3039
3085
  }
3040
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: BoardViewPageComponent, decorators: [{
3086
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BoardViewPageComponent, decorators: [{
3041
3087
  type: Component,
3042
3088
  args: [{
3043
3089
  selector: 'tm-board-view-page',
3044
3090
  imports: [
3045
- UiModule,
3091
+ AvatarComponent,
3092
+ DialogComponent,
3093
+ FButtonDirective,
3094
+ InputTextDirective,
3095
+ SelectComponent,
3096
+ SkeletonComponent,
3097
+ SortableColumnDirective,
3098
+ SortIconComponent,
3099
+ TableComponent,
3100
+ TagComponent,
3101
+ TextareaDirective,
3102
+ TooltipDirective,
3103
+ UiIconComponent,
3046
3104
  DragDropModule,
3047
- AngularModule,
3105
+ DatePipe,
3106
+ FormsModule,
3048
3107
  TaskCardComponent,
3049
3108
  TaskFormDialogComponent,
3050
3109
  TaskDetailPanelComponent,