@caribeng/ui 22.2.0 → 22.4.0

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.
Files changed (121) hide show
  1. package/README.md +93 -11
  2. package/fesm2022/caribeng-ui-accordion.mjs +2 -2
  3. package/fesm2022/caribeng-ui-avatar.mjs +2 -2
  4. package/fesm2022/caribeng-ui-badge.mjs +8 -2
  5. package/fesm2022/caribeng-ui-breadcrumb.mjs +13 -6
  6. package/fesm2022/caribeng-ui-chart.mjs +8 -5
  7. package/fesm2022/caribeng-ui-chat.mjs +1303 -0
  8. package/fesm2022/caribeng-ui-code-block.mjs +332 -0
  9. package/fesm2022/caribeng-ui-colorpicker.mjs +99 -5
  10. package/fesm2022/caribeng-ui-command-palette.mjs +476 -0
  11. package/fesm2022/caribeng-ui-confirmdialog.mjs +78 -13
  12. package/fesm2022/caribeng-ui-confirmpopup.mjs +91 -16
  13. package/fesm2022/caribeng-ui-contextmenu.mjs +8 -4
  14. package/fesm2022/caribeng-ui-copy-button.mjs +230 -0
  15. package/fesm2022/caribeng-ui-dataview.mjs +4 -1
  16. package/fesm2022/caribeng-ui-dock.mjs +52 -12
  17. package/fesm2022/caribeng-ui-drawer.mjs +9 -4
  18. package/fesm2022/caribeng-ui-editor.mjs +21 -0
  19. package/fesm2022/caribeng-ui-fieldset.mjs +2 -2
  20. package/fesm2022/caribeng-ui-file-card.mjs +134 -17
  21. package/fesm2022/caribeng-ui-folder-card.mjs +122 -12
  22. package/fesm2022/caribeng-ui-inlinemessage.mjs +2 -2
  23. package/fesm2022/caribeng-ui-inputmask.mjs +8 -2
  24. package/fesm2022/caribeng-ui-kanban.mjs +4612 -0
  25. package/fesm2022/caribeng-ui-kbd.mjs +122 -0
  26. package/fesm2022/caribeng-ui-megamenu.mjs +13 -9
  27. package/fesm2022/caribeng-ui-mentions.mjs +495 -0
  28. package/fesm2022/caribeng-ui-menu.mjs +8 -4
  29. package/fesm2022/caribeng-ui-menubar.mjs +9 -5
  30. package/fesm2022/caribeng-ui-message.mjs +6 -3
  31. package/fesm2022/caribeng-ui-organizationchart.mjs +6 -10
  32. package/fesm2022/caribeng-ui-panel.mjs +6 -6
  33. package/fesm2022/caribeng-ui-panelmenu.mjs +9 -6
  34. package/fesm2022/caribeng-ui-phone-input.mjs +688 -0
  35. package/fesm2022/caribeng-ui-pricing.mjs +263 -69
  36. package/fesm2022/caribeng-ui-qrcode.mjs +564 -0
  37. package/fesm2022/caribeng-ui-ripple.mjs +2 -0
  38. package/fesm2022/caribeng-ui-scrolltop.mjs +3 -1
  39. package/fesm2022/caribeng-ui-sidebar.mjs +573 -0
  40. package/fesm2022/caribeng-ui-stepper.mjs +10 -3
  41. package/fesm2022/caribeng-ui-table.mjs +10 -4
  42. package/fesm2022/caribeng-ui-tabmenu.mjs +8 -4
  43. package/fesm2022/caribeng-ui-tieredmenu.mjs +109 -19
  44. package/fesm2022/caribeng-ui.mjs +388 -1
  45. package/package.json +42 -2
  46. package/schematics/collection.json +5 -0
  47. package/schematics/migrate-from-primeng/core-icons.json +1 -0
  48. package/schematics/migrate-from-primeng/icons.js +269 -0
  49. package/schematics/migrate-from-primeng/index.js +290 -0
  50. package/schematics/migrate-from-primeng/mappings/button.js +93 -0
  51. package/schematics/migrate-from-primeng/mappings/card.js +33 -0
  52. package/schematics/migrate-from-primeng/mappings/checkbox.js +44 -0
  53. package/schematics/migrate-from-primeng/mappings/confirm.js +221 -0
  54. package/schematics/migrate-from-primeng/mappings/datepicker.js +121 -0
  55. package/schematics/migrate-from-primeng/mappings/dialog.js +84 -0
  56. package/schematics/migrate-from-primeng/mappings/index.js +88 -0
  57. package/schematics/migrate-from-primeng/mappings/inputnumber.js +62 -0
  58. package/schematics/migrate-from-primeng/mappings/inputtext.js +60 -0
  59. package/schematics/migrate-from-primeng/mappings/menu.js +468 -0
  60. package/schematics/migrate-from-primeng/mappings/multiselect.js +49 -0
  61. package/schematics/migrate-from-primeng/mappings/radiobutton.js +22 -0
  62. package/schematics/migrate-from-primeng/mappings/rules.js +206 -0
  63. package/schematics/migrate-from-primeng/mappings/select.js +97 -0
  64. package/schematics/migrate-from-primeng/mappings/service-calls.js +100 -0
  65. package/schematics/migrate-from-primeng/mappings/table.js +613 -0
  66. package/schematics/migrate-from-primeng/mappings/tabs.js +225 -0
  67. package/schematics/migrate-from-primeng/mappings/tag.js +29 -0
  68. package/schematics/migrate-from-primeng/mappings/textarea.js +44 -0
  69. package/schematics/migrate-from-primeng/mappings/toast.js +173 -0
  70. package/schematics/migrate-from-primeng/mappings/toggleswitch.js +37 -0
  71. package/schematics/migrate-from-primeng/mappings/tooltip.js +44 -0
  72. package/schematics/migrate-from-primeng/mappings/types.js +10 -0
  73. package/schematics/migrate-from-primeng/report.js +79 -0
  74. package/schematics/migrate-from-primeng/schema.js +2 -0
  75. package/schematics/migrate-from-primeng/schema.json +34 -0
  76. package/schematics/migrate-from-primeng/template.js +387 -0
  77. package/schematics/migrate-from-primeng/todo.js +5 -0
  78. package/schematics/migrate-from-primeng/typescript.js +442 -0
  79. package/schematics/migrate-from-primeng/workspace.js +117 -0
  80. package/schematics/ng-add/index.js +16 -1
  81. package/types/caribeng-ui-badge.d.ts +3 -1
  82. package/types/caribeng-ui-breadcrumb.d.ts +8 -0
  83. package/types/caribeng-ui-chart.d.ts +3 -1
  84. package/types/caribeng-ui-chat.d.ts +299 -0
  85. package/types/caribeng-ui-code-block.d.ts +65 -0
  86. package/types/caribeng-ui-colorpicker.d.ts +5 -1
  87. package/types/caribeng-ui-command-palette.d.ts +133 -0
  88. package/types/caribeng-ui-confirmdialog.d.ts +34 -2
  89. package/types/caribeng-ui-confirmpopup.d.ts +39 -2
  90. package/types/caribeng-ui-contextmenu.d.ts +7 -0
  91. package/types/caribeng-ui-copy-button.d.ts +90 -0
  92. package/types/caribeng-ui-dataview.d.ts +2 -0
  93. package/types/caribeng-ui-dock.d.ts +13 -1
  94. package/types/caribeng-ui-drawer.d.ts +3 -1
  95. package/types/caribeng-ui-file-card.d.ts +27 -2
  96. package/types/caribeng-ui-folder-card.d.ts +27 -5
  97. package/types/caribeng-ui-inputmask.d.ts +3 -1
  98. package/types/caribeng-ui-kanban.d.ts +783 -0
  99. package/types/caribeng-ui-kbd.d.ts +36 -0
  100. package/types/caribeng-ui-megamenu.d.ts +11 -0
  101. package/types/caribeng-ui-mentions.d.ts +127 -0
  102. package/types/caribeng-ui-menu.d.ts +7 -0
  103. package/types/caribeng-ui-menubar.d.ts +7 -0
  104. package/types/caribeng-ui-message.d.ts +2 -0
  105. package/types/caribeng-ui-panelmenu.d.ts +7 -0
  106. package/types/caribeng-ui-phone-input.d.ts +168 -0
  107. package/types/caribeng-ui-pricing.d.ts +41 -4
  108. package/types/caribeng-ui-qrcode.d.ts +88 -0
  109. package/types/caribeng-ui-sidebar.d.ts +167 -0
  110. package/types/caribeng-ui-stepper.d.ts +2 -0
  111. package/types/caribeng-ui-table.d.ts +1 -1
  112. package/types/caribeng-ui-tabmenu.d.ts +7 -0
  113. package/types/caribeng-ui-tieredmenu.d.ts +17 -1
  114. package/types/caribeng-ui.d.ts +276 -2
  115. package/styles/caribeng.css +0 -380
  116. package/styles/scss/_mixins.scss +0 -46
  117. package/styles/scss/_overlay.scss +0 -15
  118. package/styles/scss/_tokens.scss +0 -267
  119. package/styles/scss/_utilities.scss +0 -73
  120. package/styles/scss/_variables.scss +0 -33
  121. package/styles/scss/index.scss +0 -16
@@ -0,0 +1,783 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ElementRef, TemplateRef } from '@angular/core';
3
+ import { CdkDrag, CdkDropList, CdkDragDrop } from '@angular/cdk/drag-drop';
4
+ import { CbMenuItem } from '@caribeng/ui/menu';
5
+ import * as _caribeng_ui from '@caribeng/ui';
6
+ import { cbFormat } from '@caribeng/ui';
7
+ import { CbChartType, CbChartData } from '@caribeng/ui/chart';
8
+ import { CbEditorTool } from '@caribeng/ui/editor';
9
+
10
+ /** Persona que se puede asignar a una tarea. */
11
+ interface CbKanbanPerson {
12
+ readonly id: string;
13
+ readonly name: string;
14
+ /** Foto (si no hay, se muestran las iniciales). */
15
+ readonly image?: string;
16
+ }
17
+ /** Nivel de prioridad. `severity` da el color de la etiqueta. */
18
+ interface CbKanbanPriority {
19
+ readonly id: string;
20
+ readonly label: string;
21
+ readonly severity?: 'secondary' | 'info' | 'success' | 'warning' | 'danger';
22
+ }
23
+ /** Archivo adjunto a una tarea. Los recién añadidos llevan `file` (para subirlo) y una `url` local. */
24
+ interface CbKanbanAttachment {
25
+ readonly id: string;
26
+ readonly name: string;
27
+ /** Tamaño en bytes. */
28
+ readonly size?: number;
29
+ /** Tipo MIME. */
30
+ readonly type?: string;
31
+ /** Enlace para abrir o descargar el archivo. */
32
+ readonly url?: string;
33
+ /** Archivo elegido en el navegador (solo en los adjuntos nuevos). */
34
+ readonly file?: File;
35
+ }
36
+ /**
37
+ * Campos que entiende el panel de detalle y la tarjeta por defecto. Todos son
38
+ * opcionales salvo el id y el título (sus nombres los fijan `itemKey` e `itemLabel`).
39
+ * Las fechas se guardan como `'AAAA-MM-DD'` (también se aceptan `Date`).
40
+ */
41
+ interface CbKanbanTask {
42
+ readonly id: string | number;
43
+ readonly title: string;
44
+ readonly description?: string;
45
+ /** Ids de las personas responsables (de `people`). */
46
+ readonly assignees?: readonly string[];
47
+ /** Id de la prioridad (de `priorities`). */
48
+ readonly priority?: string | null;
49
+ readonly startDate?: string | Date | null;
50
+ readonly endDate?: string | Date | null;
51
+ readonly attachments?: readonly CbKanbanAttachment[];
52
+ /** Tarea finalizada (la lista la marca con ✓ y el panel de resumen la cuenta). */
53
+ readonly completed?: boolean;
54
+ }
55
+ /** Cambios que el panel aplica a una tarea. */
56
+ type CbKanbanTaskPatch = Partial<Omit<CbKanbanTask, 'id'>> & Record<string, unknown>;
57
+ /** Iniciales de un nombre ("Laura Gómez" → "LG"). */
58
+ declare function initials(name: string): string;
59
+
60
+ /** Columna del tablero (en la lista, una sección). */
61
+ interface CbKanbanColumn<T = any> {
62
+ readonly id: string;
63
+ readonly title: string;
64
+ readonly items: readonly T[];
65
+ /** Límite de tarjetas (WIP). Se avisa al superarlo; con `enforceLimit` no deja pasarlo. */
66
+ readonly limit?: number;
67
+ /** Color de la columna (borde superior). */
68
+ readonly color?: string;
69
+ }
70
+ /** Tarjeta movida (con ratón, dedo, teclado o el menú "Mover a"). */
71
+ interface CbKanbanMove<T = any> {
72
+ readonly item: T;
73
+ readonly from: string;
74
+ readonly to: string;
75
+ readonly fromIndex: number;
76
+ readonly toIndex: number;
77
+ }
78
+ /** Tarjeta creada, editada o eliminada. */
79
+ interface CbKanbanCardEvent<T = any> {
80
+ readonly item: T;
81
+ /** Id de la columna. */
82
+ readonly column: string;
83
+ readonly index: number;
84
+ /** Al editar, la tarjeta antes del cambio. */
85
+ readonly previous?: T;
86
+ }
87
+ /** Columna creada, renombrada o eliminada. */
88
+ interface CbKanbanColumnEvent {
89
+ readonly column: CbKanbanColumn;
90
+ /** Al renombrar, el título anterior. */
91
+ readonly previousTitle?: string;
92
+ }
93
+ /**
94
+ * Base común de las vistas de tareas (tablero, lista…). Todas leen y escriben el
95
+ * mismo `[(columns)]` sin copia propia, así que varias vistas enlazadas a la misma
96
+ * señal se pueden mostrar a la vez y siempre están al día.
97
+ */
98
+ declare abstract class CbKanbanView {
99
+ /** Textos de interfaz en el idioma activo (`provideCaribeNG({ locale })`). */
100
+ readonly t: _angular_core.Signal<_caribeng_ui.CbTranslation>;
101
+ protected readonly fmt: typeof cbFormat;
102
+ protected readonly host: ElementRef<HTMLElement>;
103
+ private readonly injector;
104
+ /** Columnas con sus tarjetas (bidireccional: se actualiza al mover, crear, editar o eliminar). */
105
+ readonly columns: _angular_core.ModelSignal<readonly CbKanbanColumn<any>[]>;
106
+ /** Propiedad que identifica cada tarjeta. */
107
+ readonly itemKey: _angular_core.InputSignal<string>;
108
+ /** Propiedad con el nombre de la tarjeta (tarjeta por defecto, edición y anuncios). */
109
+ readonly itemLabel: _angular_core.InputSignal<string>;
110
+ /** No deja superar el `limit` de una columna. */
111
+ readonly enforceLimit: _angular_core.InputSignalWithTransform<boolean, unknown>;
112
+ /** Las tareas se editan (en el tablero, menú ⋮ y atajos F2 / Supr). */
113
+ readonly editable: _angular_core.InputSignalWithTransform<boolean, unknown>;
114
+ /** Se pueden añadir tareas. */
115
+ readonly addable: _angular_core.InputSignalWithTransform<boolean, unknown>;
116
+ /** Las columnas se renombran, se eliminan y se añaden. */
117
+ readonly columnsEditable: _angular_core.InputSignalWithTransform<boolean, unknown>;
118
+ /** Las columnas se pueden contraer. */
119
+ readonly collapsible: _angular_core.InputSignalWithTransform<boolean, unknown>;
120
+ /** Pide confirmación antes de eliminar (tarjetas, y columnas con tarjetas). */
121
+ readonly confirmDelete: _angular_core.InputSignalWithTransform<boolean, unknown>;
122
+ /** Crea la tarjeta nueva a partir del título. Por defecto, `{ [itemKey]: id, [itemLabel]: título }`. */
123
+ readonly createCard: _angular_core.InputSignal<((title: string, columnId: string) => any) | null>;
124
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
125
+ /** Texto de una columna vacía. Por defecto, "Sin datos". */
126
+ readonly emptyMessage: _angular_core.InputSignal<string | undefined>;
127
+ /** Nombre de la vista. */
128
+ readonly ariaLabel: _angular_core.InputSignal<string>;
129
+ /** Al abrir una tarea (clic o Enter) se muestra el panel de detalle. */
130
+ readonly details: _angular_core.InputSignalWithTransform<boolean, unknown>;
131
+ /** Personas que se pueden asignar (campo `assignees` con sus ids). */
132
+ readonly people: _angular_core.InputSignal<readonly CbKanbanPerson[]>;
133
+ /** Niveles de prioridad (campo `priority` con su id). Por defecto: baja, media y alta. */
134
+ readonly priorities: _angular_core.InputSignal<readonly CbKanbanPriority[] | null>;
135
+ /** Tipos de archivo admitidos en los adjuntos (atributo `accept`, p. ej. `'image/*,.pdf'`). */
136
+ readonly accept: _angular_core.InputSignal<string>;
137
+ /** Tarjeta movida (al soltarla o con "Mover a"). */
138
+ readonly cardMove: _angular_core.OutputEmitterRef<CbKanbanMove<any>>;
139
+ /** Se pulsó (o Enter sobre) una tarjeta. */
140
+ readonly cardOpen: _angular_core.OutputEmitterRef<any>;
141
+ /** Tarjeta creada. */
142
+ readonly cardAdd: _angular_core.OutputEmitterRef<CbKanbanCardEvent<any>>;
143
+ /** Tarjeta editada: título, o cualquier campo desde el panel de detalle (`previous` es la tarjeta anterior). */
144
+ readonly cardEdit: _angular_core.OutputEmitterRef<CbKanbanCardEvent<any>>;
145
+ /** Tarjeta eliminada. */
146
+ readonly cardDelete: _angular_core.OutputEmitterRef<CbKanbanCardEvent<any>>;
147
+ /** Columna añadida. */
148
+ readonly columnAdd: _angular_core.OutputEmitterRef<CbKanbanColumnEvent>;
149
+ /** Columna renombrada. */
150
+ readonly columnRename: _angular_core.OutputEmitterRef<CbKanbanColumnEvent>;
151
+ /** Columna eliminada (con sus tarjetas). */
152
+ readonly columnDelete: _angular_core.OutputEmitterRef<CbKanbanColumnEvent>;
153
+ protected readonly announcement: _angular_core.WritableSignal<string>;
154
+ private readonly detailKey;
155
+ /** @internal */
156
+ readonly detailOpen: _angular_core.WritableSignal<boolean>;
157
+ /** @internal La tarea abierta en el panel, siempre en su versión actual. */
158
+ readonly detailTask: _angular_core.Signal<any>;
159
+ /** @internal */
160
+ readonly detailColumnId: _angular_core.Signal<string>;
161
+ /** @internal */
162
+ readonly resolvedPriorities: _angular_core.Signal<readonly CbKanbanPriority[]>;
163
+ /** Lleva el foco a la tarea con esa clave (tras el render). */
164
+ protected abstract focusItem(key: unknown): void;
165
+ protected readonly initialsOf: typeof initials;
166
+ protected key(item: unknown): unknown;
167
+ protected keyAttr(item: unknown): string;
168
+ protected label(item: unknown): string;
169
+ protected field(item: unknown, name: string): unknown;
170
+ /** La descripción puede ser HTML (del editor): fuera del panel va como texto. */
171
+ protected plain(html: unknown): string;
172
+ protected priorityOf(item: unknown): CbKanbanPriority | undefined;
173
+ protected peopleOf(item: unknown): CbKanbanPerson[];
174
+ protected names(people: readonly CbKanbanPerson[]): string;
175
+ protected dateLabel(item: unknown): string;
176
+ /** La fecha de fin ya pasó (las tareas finalizadas no vencen). */
177
+ protected isOverdue(item: unknown): boolean;
178
+ protected isCompleted(item: unknown): boolean;
179
+ protected attachmentCount(item: unknown): number;
180
+ protected isFull(col: CbKanbanColumn): boolean;
181
+ protected isOver(col: CbKanbanColumn): boolean;
182
+ /** Copia de las columnas con listas mutables (para cambiarlas y publicar el resultado). */
183
+ protected cloneColumns(): (CbKanbanColumn & {
184
+ items: unknown[];
185
+ })[];
186
+ /** Mueve una tarjeta (de forma inmutable) y devuelve las columnas nuevas. */
187
+ protected moved(columns: readonly CbKanbanColumn[], from: number, fromIndex: number, to: number, toIndex: number): CbKanbanColumn[];
188
+ protected columnIndexOf(item: unknown): number;
189
+ protected indexOf(item: unknown): number;
190
+ protected moveCard(from: number, fromIndex: number, to: number, toIndex: number, focus?: boolean): void;
191
+ /** Aplica cambios a una tarjeta (emite `cardEdit`). */
192
+ updateTask(item: unknown, patch: CbKanbanTaskPatch): void;
193
+ /** Mueve una tarjeta al final de otra columna. */
194
+ moveTask(item: unknown, columnId: string): void;
195
+ /** Elimina una tarjeta (emite `cardDelete`). */
196
+ protected deleteCard(column: number, index: number): void;
197
+ /** Tras eliminar: cada vista decide a dónde va el foco. */
198
+ protected afterDelete(_columns: readonly CbKanbanColumn[], _column: number, _index: number): void;
199
+ /**
200
+ * Añade una tarjeta al final de la columna (`createCard` decide su forma) con los
201
+ * campos de `extra` (p. ej. las fechas del día en el calendario). Devuelve la tarjeta.
202
+ */
203
+ addCard(columnId: string, title: string, extra?: CbKanbanTaskPatch): unknown;
204
+ /** Crea una columna vacía al final y la devuelve. */
205
+ protected appendColumn(title: string): CbKanbanColumn;
206
+ protected renameColumnTo(col: CbKanbanColumn, title: string): void;
207
+ protected removeColumn(col: CbKanbanColumn): void;
208
+ protected openCard(item: unknown): void;
209
+ /** Abre el panel de detalle de una tarjeta. */
210
+ openDetails(item: unknown): void;
211
+ /** Cierra el panel de detalle. */
212
+ closeDetails(): void;
213
+ /** @internal */
214
+ onDetailsHidden(): void;
215
+ /** @internal */
216
+ removeFromDetails(item: unknown): void;
217
+ protected afterRender(fn: () => void): void;
218
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CbKanbanView, never>;
219
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CbKanbanView, never, never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "itemKey": { "alias": "itemKey"; "required": false; "isSignal": true; }; "itemLabel": { "alias": "itemLabel"; "required": false; "isSignal": true; }; "enforceLimit": { "alias": "enforceLimit"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "addable": { "alias": "addable"; "required": false; "isSignal": true; }; "columnsEditable": { "alias": "columnsEditable"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "confirmDelete": { "alias": "confirmDelete"; "required": false; "isSignal": true; }; "createCard": { "alias": "createCard"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "details": { "alias": "details"; "required": false; "isSignal": true; }; "people": { "alias": "people"; "required": false; "isSignal": true; }; "priorities": { "alias": "priorities"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; }, { "columns": "columnsChange"; "cardMove": "cardMove"; "cardOpen": "cardOpen"; "cardAdd": "cardAdd"; "cardEdit": "cardEdit"; "cardDelete": "cardDelete"; "columnAdd": "columnAdd"; "columnRename": "columnRename"; "columnDelete": "columnDelete"; }, never, never, true, never>;
220
+ }
221
+
222
+ interface CbKanbanCardContext<T = any> {
223
+ $implicit: T;
224
+ column: CbKanbanColumn<T>;
225
+ index: number;
226
+ }
227
+ /** Plantilla de las tarjetas: `<ng-template cbKanbanCard let-item let-column="column">`. */
228
+ declare class CbKanbanCardDirective {
229
+ readonly template: TemplateRef<CbKanbanCardContext<any>>;
230
+ static ngTemplateContextGuard(_dir: CbKanbanCardDirective, ctx: unknown): ctx is CbKanbanCardContext;
231
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CbKanbanCardDirective, never>;
232
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CbKanbanCardDirective, "ng-template[cbKanbanCard]", never, {}, {}, never, never, true, never>;
233
+ }
234
+ /**
235
+ * Tablero Kanban de CaribeNG. Las tarjetas se reordenan y se mueven entre
236
+ * columnas arrastrando (ratón o dedo, con `@angular/cdk/drag-drop`; toda la
237
+ * columna es zona de soltar y el tablero se desplaza solo hacia las columnas
238
+ * ocultas) o con el teclado (Espacio toma, flechas mueven, Espacio suelta,
239
+ * Escape cancela), con cada paso anunciado.
240
+ *
241
+ * Con `editable` cada tarjeta tiene un menú ⋮ (editar, mover a otra columna,
242
+ * eliminar) y atajos (F2 edita, Supr elimina); con `addable`, un campo para
243
+ * añadir tarjetas al pie de cada columna; con `columnsEditable`, las columnas se
244
+ * renombran, se eliminan y se añaden; con `collapsible`, se contraen.
245
+ *
246
+ * Con `details`, al abrir una tarjeta aparece un panel lateral para editar la
247
+ * tarea completa: columna, responsables (`people`), prioridad (`priorities`),
248
+ * fechas de inicio y fin, descripción y adjuntos (ver `CbKanbanTask`). La
249
+ * tarjeta por defecto muestra la prioridad, las fechas, los adjuntos y los
250
+ * responsables.
251
+ *
252
+ * @example
253
+ * ```html
254
+ * <cb-kanban [(columns)]="columnas" editable addable columnsEditable (cardMove)="guardar($event)">
255
+ * <ng-template cbKanbanCard let-tarea>{{ tarea.title }}</ng-template>
256
+ * </cb-kanban>
257
+ * ```
258
+ */
259
+ declare class CbKanban extends CbKanbanView {
260
+ private readonly menu;
261
+ protected readonly uid: string;
262
+ private readonly cardDirective;
263
+ /**
264
+ * Plantilla de las tarjetas pasada como input, para cuando el tablero lo pinta
265
+ * otro componente (p. ej. `cb-kanban-workspace`). La `ng-template cbKanbanCard`
266
+ * proyectada tiene prioridad.
267
+ */
268
+ readonly cardTemplate: _angular_core.InputSignal<TemplateRef<CbKanbanCardContext<any>> | undefined>;
269
+ protected readonly cardTpl: _angular_core.Signal<TemplateRef<CbKanbanCardContext<any>> | undefined>;
270
+ private readonly grab;
271
+ protected readonly editingKey: _angular_core.WritableSignal<unknown>;
272
+ protected readonly confirmingKey: _angular_core.WritableSignal<unknown>;
273
+ protected readonly composing: _angular_core.WritableSignal<string | null>;
274
+ protected readonly renamingColumn: _angular_core.WritableSignal<string | null>;
275
+ protected readonly confirmingColumn: _angular_core.WritableSignal<string | null>;
276
+ private readonly collapsed;
277
+ protected readonly menuItems: _angular_core.WritableSignal<CbMenuItem[]>;
278
+ protected readonly menuLabel: _angular_core.WritableSignal<string>;
279
+ /** Al renombrar con Enter, el blur posterior no vuelve a guardar. */
280
+ private renameDone;
281
+ protected hasMeta(item: unknown): boolean;
282
+ protected isGrabbed(item: unknown): boolean;
283
+ protected isCollapsed(col: CbKanbanColumn): boolean;
284
+ protected readonly canEnter: (drag: CdkDrag, drop: CdkDropList<CbKanbanColumn>) => boolean;
285
+ protected onDrop(event: CdkDragDrop<CbKanbanColumn>): void;
286
+ protected onCardKeydown(event: KeyboardEvent, column: number, index: number): void;
287
+ private applyKeyboardMove;
288
+ private announce;
289
+ protected openCardMenu(event: MouseEvent, column: number, index: number): void;
290
+ protected openColumnMenu(event: MouseEvent, col: CbKanbanColumn): void;
291
+ /** Pasa la tarjeta a modo edición (título). */
292
+ startEdit(item: unknown): void;
293
+ protected onEditorKeydown(event: KeyboardEvent, column: number, index: number, value: string): void;
294
+ protected saveEdit(column: number, index: number, value: string): void;
295
+ protected cancelEdit(item: unknown): void;
296
+ private requestDelete;
297
+ protected cancelDelete(item: unknown): void;
298
+ protected afterDelete(next: readonly CbKanbanColumn[], column: number, index: number): void;
299
+ protected openComposer(col: CbKanbanColumn): void;
300
+ protected closeComposer(col: CbKanbanColumn): void;
301
+ protected onComposerKeydown(event: KeyboardEvent, col: CbKanbanColumn, field: HTMLTextAreaElement): void;
302
+ protected addCardFrom(col: CbKanbanColumn, field: HTMLTextAreaElement): void;
303
+ protected toggleCollapse(col: CbKanbanColumn): void;
304
+ protected startColumnRename(col: CbKanbanColumn): void;
305
+ protected renameColumn(col: CbKanbanColumn, value: string): void;
306
+ protected cancelColumnRename(col: CbKanbanColumn): void;
307
+ private requestColumnDelete;
308
+ protected cancelColumnDelete(col: CbKanbanColumn): void;
309
+ protected deleteColumn(col: CbKanbanColumn): void;
310
+ /** Añade una columna al final y abre su nombre para editarlo. */
311
+ addColumn(title?: string): void;
312
+ private focusColumnMenu;
313
+ /** Elemento del tablero con `data-<nombre>` igual a `value` (sin depender de CSS.escape). */
314
+ private byData;
315
+ protected focusItem(key: unknown): void;
316
+ /** La tarjeta se vuelve a pintar al cambiar: se recupera el foco tras el render. */
317
+ private focusCard;
318
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CbKanban, never>;
319
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CbKanban, "cb-kanban", never, { "cardTemplate": { "alias": "cardTemplate"; "required": false; "isSignal": true; }; }, {}, ["cardDirective"], never, true, never>;
320
+ }
321
+
322
+ interface CalendarDay {
323
+ readonly date: Date;
324
+ readonly iso: string;
325
+ /** Número del día ("1 nov" el primero de cada mes). */
326
+ readonly label: string;
327
+ /** Fecha completa para lectores de pantalla. */
328
+ readonly full: string;
329
+ readonly inMonth: boolean;
330
+ readonly today: boolean;
331
+ }
332
+ interface CalendarBar {
333
+ readonly item: unknown;
334
+ readonly key: unknown;
335
+ readonly column: CbKanbanColumn;
336
+ /** Columna de la semana (0–6) donde empieza la barra y cuántos días ocupa. */
337
+ readonly from: number;
338
+ readonly span: number;
339
+ readonly lane: number;
340
+ /** La tarea empezó antes de esta semana / sigue después. */
341
+ readonly continuesBefore: boolean;
342
+ readonly continuesAfter: boolean;
343
+ }
344
+ interface CalendarWeek {
345
+ readonly days: readonly CalendarDay[];
346
+ readonly bars: readonly CalendarBar[];
347
+ readonly lanes: number;
348
+ readonly label: string;
349
+ }
350
+ /**
351
+ * Vista de calendario de las tareas: un mes con cada tarea como una barra que va
352
+ * de su fecha de inicio a la de fin (`startDate` / `endDate`, ver `CbKanbanTask`).
353
+ *
354
+ * Usa el mismo `[(columns)]` que `cb-kanban` y `cb-kanban-list`, así que se puede
355
+ * mostrar a la vez que ellas. Con `editable`, las tareas cambian de día
356
+ * arrastrándolas (o con Alt + flechas); con `addable`, cada día tiene "Añadir
357
+ * tarea" (se crea con esa fecha en `newTaskColumn`). Las tareas sin fechas se
358
+ * listan en "Sin fecha".
359
+ *
360
+ * @example
361
+ * ```html
362
+ * <cb-kanban-calendar [(columns)]="columnas" [people]="personas" details editable addable />
363
+ * ```
364
+ */
365
+ declare class CbKanbanCalendar extends CbKanbanView {
366
+ private readonly document;
367
+ protected readonly uid: string;
368
+ /** Mes visible (cualquier día del mes). Bidireccional: cambia con ‹ › y "Hoy". */
369
+ readonly viewDate: _angular_core.ModelSignal<Date>;
370
+ /** Primer día de la semana: 0 = domingo, 1 = lunes (por defecto). */
371
+ readonly firstDayOfWeek: _angular_core.InputSignal<number>;
372
+ /** Columna donde se crean las tareas nuevas (id). Por defecto, la primera. */
373
+ readonly newTaskColumn: _angular_core.InputSignal<string | null>;
374
+ protected readonly composing: _angular_core.WritableSignal<string | null>;
375
+ protected readonly showUndated: _angular_core.WritableSignal<boolean>;
376
+ /** Mientras se arrastra: la tarea y cuántos días se desplaza. */
377
+ private readonly preview;
378
+ protected readonly dragKey: _angular_core.Signal<unknown>;
379
+ protected readonly dropDay: _angular_core.WritableSignal<string | null>;
380
+ private drag;
381
+ private suppressClick;
382
+ private readonly today;
383
+ constructor();
384
+ protected canEdit(): boolean;
385
+ protected readonly monthLabel: _angular_core.Signal<string>;
386
+ protected readonly weekdays: _angular_core.Signal<string[]>;
387
+ /** Tareas con fechas (inicio ≤ fin), con el desplazamiento del arrastre aplicado. */
388
+ private readonly ranges;
389
+ protected readonly undated: _angular_core.Signal<{
390
+ item: any;
391
+ column: CbKanbanColumn<any>;
392
+ }[]>;
393
+ protected readonly weeks: _angular_core.Signal<CalendarWeek[]>;
394
+ /** Filas de la semana: número del día, un carril por barra y el hueco de "Añadir tarea". */
395
+ protected rows(week: CalendarWeek): string;
396
+ protected barLabel(bar: CalendarBar): string;
397
+ protected shiftMonth(step: number): void;
398
+ protected goToday(): void;
399
+ /** Desplaza las fechas de la tarea `days` días (mantiene la duración). */
400
+ shiftTask(item: unknown, days: number, focus?: boolean): void;
401
+ protected onBarKeydown(event: KeyboardEvent, item: unknown): void;
402
+ protected onBarClick(item: unknown): void;
403
+ protected onPointerDown(event: PointerEvent, bar: CalendarBar): void;
404
+ private readonly onPointerMove;
405
+ private readonly onPointerUp;
406
+ private readonly onPointerCancel;
407
+ private endDrag;
408
+ private stopListening;
409
+ /** Día del calendario bajo el puntero. */
410
+ private dateAt;
411
+ private targetColumn;
412
+ /** "Añadir tarea" de la barra: abre el campo en el día de hoy. */
413
+ protected addToday(): void;
414
+ protected openComposer(iso: string): void;
415
+ protected closeComposer(iso: string, focus?: boolean): void;
416
+ protected onComposerKeydown(event: KeyboardEvent, iso: string, field: HTMLInputElement): void;
417
+ protected focusItem(key: unknown): void;
418
+ /** Elemento con `name` igual a `value` (sin depender de CSS.escape). */
419
+ private byData;
420
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CbKanbanCalendar, never>;
421
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CbKanbanCalendar, "cb-kanban-calendar", never, { "viewDate": { "alias": "viewDate"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "newTaskColumn": { "alias": "newTaskColumn"; "required": false; "isSignal": true; }; }, { "viewDate": "viewDateChange"; }, never, never, true, never>;
422
+ }
423
+
424
+ /**
425
+ * Bloques del panel:
426
+ * - Indicadores: `completed`, `incomplete`, `overdue` y `total`.
427
+ * - Gráficos: `bySection` (sin finalizar por sección), `byStatus` (dona por estado),
428
+ * `byAssignee` (sin finalizar por responsable) y `byWeek` (entregas por semana).
429
+ */
430
+ type CbKanbanDashboardWidget = 'completed' | 'incomplete' | 'overdue' | 'total' | 'bySection' | 'byStatus' | 'byAssignee' | 'byWeek';
431
+ interface Kpi {
432
+ readonly kind: 'kpi';
433
+ readonly id: CbKanbanDashboardWidget;
434
+ readonly title: string;
435
+ readonly value: number;
436
+ readonly hint?: string;
437
+ readonly tone?: 'success' | 'danger';
438
+ }
439
+ interface ChartWidget {
440
+ readonly kind: 'chart';
441
+ readonly id: CbKanbanDashboardWidget;
442
+ readonly title: string;
443
+ readonly type: CbChartType;
444
+ readonly data: CbChartData;
445
+ readonly stacked?: boolean;
446
+ }
447
+ /**
448
+ * Panel de resumen de las tareas: indicadores (finalizadas, sin finalizar, con
449
+ * retraso y total) y gráficos por sección, por estado, por responsable y por
450
+ * semana de entrega, calculados al momento desde el mismo `[(columns)]` que
451
+ * usan `cb-kanban`, `cb-kanban-list`, `cb-kanban-timeline` y `cb-kanban-calendar`.
452
+ *
453
+ * Una tarea cuenta como finalizada con `completed: true` y con retraso si su
454
+ * `endDate` ya pasó sin finalizarla. `widgets` elige qué bloques se ven y en qué orden.
455
+ *
456
+ * @example
457
+ * ```html
458
+ * <cb-kanban-dashboard [columns]="columnas" [people]="personas" />
459
+ * ```
460
+ */
461
+ declare class CbKanbanDashboard extends CbKanbanView {
462
+ protected readonly uid: string;
463
+ protected readonly integer: Intl.NumberFormatOptions;
464
+ /** Bloques a mostrar y su orden. Por defecto, los cuatro indicadores y los cuatro gráficos. */
465
+ readonly widgets: _angular_core.InputSignal<readonly CbKanbanDashboardWidget[]>;
466
+ /** Nivel de encabezado de los títulos de cada bloque. */
467
+ readonly headingLevel: _angular_core.InputSignal<number>;
468
+ /** Alto de los gráficos (px). */
469
+ readonly chartHeight: _angular_core.InputSignal<number>;
470
+ /** Anima los gráficos al aparecer. */
471
+ readonly animate: _angular_core.InputSignal<boolean>;
472
+ private readonly today;
473
+ /** Todas las tareas con su estado. */
474
+ private readonly tasks;
475
+ private readonly counts;
476
+ protected readonly blocks: _angular_core.Signal<(Kpi | ChartWidget)[]>;
477
+ /** Sin finalizar por sección (columna). */
478
+ readonly bySection: _angular_core.Signal<CbChartData>;
479
+ /** Finalizadas, a tiempo y con retraso. */
480
+ readonly byStatus: _angular_core.Signal<CbChartData>;
481
+ /** Sin finalizar por responsable (una tarea con dos personas cuenta para las dos). */
482
+ readonly byAssignee: _angular_core.Signal<CbChartData>;
483
+ /** Tareas por semana de su fecha de fin, finalizadas y sin finalizar. */
484
+ readonly byWeek: _angular_core.Signal<CbChartData>;
485
+ protected num(n: number): string;
486
+ /** El panel no tiene tareas enfocables. */
487
+ protected focusItem(): void;
488
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CbKanbanDashboard, never>;
489
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CbKanbanDashboard, "cb-kanban-dashboard", never, { "widgets": { "alias": "widgets"; "required": false; "isSignal": true; }; "headingLevel": { "alias": "headingLevel"; "required": false; "isSignal": true; }; "chartHeight": { "alias": "chartHeight"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
490
+ }
491
+
492
+ /**
493
+ * Vista de lista de las tareas: una tabla con una sección (contraíble) por cada
494
+ * columna del tablero y, por tarea, responsables, fechas y prioridad.
495
+ *
496
+ * Usa el mismo `[(columns)]` que `cb-kanban`, así que ambas vistas se pueden
497
+ * mostrar a la vez sobre los mismos datos. Las filas se arrastran entre
498
+ * secciones (o Alt + ↑/↓ con el teclado); con `editable`, el círculo marca la
499
+ * tarea como finalizada (`completed`); con `addable`, cada sección tiene
500
+ * "Añadir tarea"; con `columnsEditable`, las secciones se renombran y se añaden.
501
+ *
502
+ * @example
503
+ * ```html
504
+ * <cb-kanban-list [(columns)]="columnas" [people]="personas" details editable addable />
505
+ * ```
506
+ */
507
+ declare class CbKanbanList extends CbKanbanView {
508
+ protected readonly uid: string;
509
+ protected readonly composing: _angular_core.WritableSignal<string | null>;
510
+ protected readonly renaming: _angular_core.WritableSignal<string | null>;
511
+ private readonly collapsed;
512
+ /** Al renombrar con Enter, el blur posterior no vuelve a guardar. */
513
+ private renameDone;
514
+ protected canDrag(): boolean;
515
+ protected isCollapsed(col: CbKanbanColumn): boolean;
516
+ protected toggleCollapse(col: CbKanbanColumn): void;
517
+ protected toggleCompleted(item: unknown): void;
518
+ protected readonly canEnter: (drag: CdkDrag, drop: CdkDropList<CbKanbanColumn>) => boolean;
519
+ protected onDrop(event: CdkDragDrop<CbKanbanColumn>): void;
520
+ /** Alt + ↑/↓ mueve la fila (al llegar al borde, pasa a la sección vecina abierta). */
521
+ protected onRowKeydown(event: KeyboardEvent, column: number, index: number): void;
522
+ protected openComposer(col: CbKanbanColumn): void;
523
+ protected closeComposer(col: CbKanbanColumn, focus?: boolean): void;
524
+ protected onComposerKeydown(event: KeyboardEvent, col: CbKanbanColumn, field: HTMLInputElement): void;
525
+ /** Añade una sección al final y abre su nombre para editarlo. */
526
+ addSection(title?: string): void;
527
+ protected startRename(col: CbKanbanColumn): void;
528
+ protected rename(col: CbKanbanColumn, value: string): void;
529
+ protected cancelRename(col: CbKanbanColumn): void;
530
+ protected focusItem(key: unknown): void;
531
+ protected afterDelete(next: readonly CbKanbanColumn[], column: number, index: number): void;
532
+ private focusSection;
533
+ private rowOf;
534
+ /** Elemento con `name` igual a `value` (sin depender de CSS.escape). */
535
+ private byData;
536
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CbKanbanList, never>;
537
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CbKanbanList, "cb-kanban-list", never, {}, {}, never, never, true, never>;
538
+ }
539
+
540
+ interface TimelineDay {
541
+ readonly date: Date;
542
+ readonly iso: string;
543
+ readonly label: string;
544
+ readonly weekend: boolean;
545
+ readonly today: boolean;
546
+ }
547
+ interface TimelineMonth {
548
+ readonly label: string;
549
+ /** Primer día visible del mes (índice) y cuántos días ocupa. */
550
+ readonly from: number;
551
+ readonly span: number;
552
+ }
553
+ interface TimelineBar {
554
+ readonly item: unknown;
555
+ readonly key: unknown;
556
+ readonly from: number;
557
+ readonly span: number;
558
+ readonly lane: number;
559
+ /** La tarea empezó antes del rango visible / sigue después. */
560
+ readonly continuesBefore: boolean;
561
+ readonly continuesAfter: boolean;
562
+ /** Barra corta: el nombre va fuera, a su derecha, ocupando estos días (0 = dentro). */
563
+ readonly outside: number;
564
+ }
565
+ interface TimelineSection {
566
+ readonly column: CbKanbanColumn;
567
+ readonly bars: readonly TimelineBar[];
568
+ readonly lanes: number;
569
+ }
570
+ /**
571
+ * Cronograma (diagrama de Gantt) de las tareas: una fila por sección (columna) y
572
+ * cada tarea como una barra desde su `startDate` hasta su `endDate`.
573
+ *
574
+ * Usa el mismo `[(columns)]` que `cb-kanban`, `cb-kanban-list` y
575
+ * `cb-kanban-calendar`. Con `editable`, las barras se arrastran para cambiar las
576
+ * fechas (los bordes cambian la duración) o para pasarlas a otra sección, también
577
+ * con Alt + flechas; con `addable`, cada sección tiene "Añadir tarea" (empieza
578
+ * hoy). `[(viewDate)]` es el primer día visible, `span` cuántos días se ven y
579
+ * `[(zoom)]` el ancho de los días.
580
+ *
581
+ * @example
582
+ * ```html
583
+ * <cb-kanban-timeline [(columns)]="columnas" [people]="personas" details editable addable />
584
+ * ```
585
+ */
586
+ declare class CbKanbanTimeline extends CbKanbanView {
587
+ private readonly document;
588
+ protected readonly uid: string;
589
+ private readonly today;
590
+ /** Primer día visible. Bidireccional: cambia con ‹ › y "Hoy". Por defecto, unos días antes de hoy. */
591
+ readonly viewDate: _angular_core.ModelSignal<Date>;
592
+ /** Días visibles. */
593
+ readonly span: _angular_core.InputSignal<number>;
594
+ /** Ancho de los días: 0 (estrecho) a 3 (ancho). Bidireccional: cambia con − y +. */
595
+ readonly zoom: _angular_core.ModelSignal<number>;
596
+ /** Columna donde se crean las tareas de "Añadir tarea" de la barra (id). Por defecto, la primera. */
597
+ readonly newTaskColumn: _angular_core.InputSignal<string | null>;
598
+ protected readonly zoomMax: number;
599
+ protected readonly composing: _angular_core.WritableSignal<string | null>;
600
+ protected readonly showUndated: _angular_core.WritableSignal<boolean>;
601
+ private readonly collapsed;
602
+ private readonly preview;
603
+ protected readonly dragKey: _angular_core.Signal<unknown>;
604
+ protected readonly dropCell: _angular_core.WritableSignal<string | null>;
605
+ private drag;
606
+ private suppressClick;
607
+ constructor();
608
+ protected canEdit(): boolean;
609
+ private readonly start;
610
+ private readonly count;
611
+ protected readonly dayWidth: _angular_core.Signal<"1.75rem" | "2.5rem" | "3.5rem" | "5rem">;
612
+ protected readonly template: _angular_core.Signal<string>;
613
+ protected readonly days: _angular_core.Signal<TimelineDay[]>;
614
+ protected readonly todayIndex: _angular_core.Signal<number>;
615
+ protected readonly months: _angular_core.Signal<TimelineMonth[]>;
616
+ protected readonly rangeLabel: _angular_core.Signal<string>;
617
+ /** Fechas de cada tarea (inicio ≤ fin), con el arrastre en curso aplicado. */
618
+ private rangeOf;
619
+ protected readonly undated: _angular_core.Signal<{
620
+ item: any;
621
+ column: CbKanbanColumn<any>;
622
+ }[]>;
623
+ protected readonly sections: _angular_core.Signal<TimelineSection[]>;
624
+ /** Filas de la sección: un carril por barra (al menos uno) y el hueco de "Añadir tarea". */
625
+ protected rowsOf(sec: TimelineSection): string;
626
+ protected barLabel(bar: TimelineBar, column: CbKanbanColumn): string;
627
+ protected isCollapsed(col: CbKanbanColumn): boolean;
628
+ protected toggleCollapse(col: CbKanbanColumn): void;
629
+ /** Añade una sección vacía al final. */
630
+ addSection(title?: string): void;
631
+ protected shiftView(days: number): void;
632
+ protected goToday(): void;
633
+ protected setZoom(step: number): void;
634
+ /** Si la fecha queda fuera del rango visible, lo desplaza para mostrarla. */
635
+ private reveal;
636
+ /** Desplaza las fechas de la tarea `days` días (mantiene la duración). */
637
+ shiftTask(item: unknown, days: number, focus?: boolean): void;
638
+ /** Mueve el inicio o el fin de la tarea `days` días (sin pasar del otro extremo). */
639
+ resizeTask(item: unknown, edge: 'start' | 'end', days: number, focus?: boolean): void;
640
+ private applyDates;
641
+ /** Pasa la tarea a la sección vecina (`step` −1 o 1). */
642
+ private moveToSection;
643
+ protected onBarKeydown(event: KeyboardEvent, item: unknown): void;
644
+ protected onBarClick(item: unknown): void;
645
+ protected onPointerDown(event: PointerEvent, bar: TimelineBar): void;
646
+ private readonly onPointerMove;
647
+ private readonly onPointerUp;
648
+ private readonly onPointerCancel;
649
+ private endDrag;
650
+ private stopListening;
651
+ /** Día y sección bajo el puntero. */
652
+ private cellAt;
653
+ /** Día de las tareas nuevas: hoy si se ve; si no, el primer día visible. */
654
+ private newTaskDay;
655
+ /** "Añadir tarea" de la barra: abre el campo en `newTaskColumn` (o la primera sección). */
656
+ protected addTop(): void;
657
+ protected openComposer(id: string): void;
658
+ protected closeComposer(id: string, focus?: boolean): void;
659
+ protected onComposerKeydown(event: KeyboardEvent, column: CbKanbanColumn, field: HTMLInputElement): void;
660
+ protected focusItem(key: unknown): void;
661
+ /** Elemento con `name` igual a `value` (sin depender de CSS.escape). */
662
+ private byData;
663
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CbKanbanTimeline, never>;
664
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CbKanbanTimeline, "cb-kanban-timeline", never, { "viewDate": { "alias": "viewDate"; "required": false; "isSignal": true; }; "span": { "alias": "span"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "newTaskColumn": { "alias": "newTaskColumn"; "required": false; "isSignal": true; }; }, { "viewDate": "viewDateChange"; "zoom": "zoomChange"; }, never, never, true, never>;
665
+ }
666
+
667
+ /**
668
+ * Detalle de una tarea del Kanban: título, columna, responsables, prioridad,
669
+ * fechas de inicio y fin, descripción y adjuntos. Cada cambio se aplica al
670
+ * momento (`patch`); el Kanban lo muestra dentro de un panel lateral.
671
+ */
672
+ declare class CbKanbanTaskPanel {
673
+ protected readonly t: _angular_core.Signal<_caribeng_ui.CbTranslation>;
674
+ protected readonly fmt: typeof cbFormat;
675
+ protected readonly uid: string;
676
+ private readonly host;
677
+ private readonly injector;
678
+ /** La tarea que se edita. */
679
+ readonly task: _angular_core.InputSignal<any>;
680
+ /** Propiedad con el título. */
681
+ readonly itemLabel: _angular_core.InputSignal<string>;
682
+ /** Columnas del tablero (para moverla). */
683
+ readonly columns: _angular_core.InputSignal<readonly CbKanbanColumn<any>[]>;
684
+ /** Columna en la que está. */
685
+ readonly columnId: _angular_core.InputSignal<string>;
686
+ readonly people: _angular_core.InputSignal<readonly CbKanbanPerson[]>;
687
+ readonly priorities: _angular_core.InputSignal<readonly CbKanbanPriority[]>;
688
+ readonly editable: _angular_core.InputSignalWithTransform<boolean, unknown>;
689
+ /** Tipos de archivo admitidos (atributo `accept`). */
690
+ readonly accept: _angular_core.InputSignal<string>;
691
+ /** Pide confirmación antes de eliminar. */
692
+ readonly confirmDelete: _angular_core.InputSignalWithTransform<boolean, unknown>;
693
+ /** Campos cambiados. */
694
+ readonly patch: _angular_core.OutputEmitterRef<CbKanbanTaskPatch>;
695
+ /** Mover a otra columna (id). */
696
+ readonly move: _angular_core.OutputEmitterRef<string>;
697
+ /** Eliminar la tarea (ya confirmado). */
698
+ readonly remove: _angular_core.OutputEmitterRef<void>;
699
+ protected readonly dragOver: _angular_core.WritableSignal<boolean>;
700
+ protected readonly confirming: _angular_core.WritableSignal<boolean>;
701
+ protected readonly title: _angular_core.Signal<string>;
702
+ protected readonly description: _angular_core.Signal<string>;
703
+ protected readonly assigneeIds: _angular_core.Signal<string[]>;
704
+ protected readonly assigned: _angular_core.Signal<CbKanbanPerson[]>;
705
+ protected readonly priorityId: _angular_core.Signal<string | null>;
706
+ protected readonly start: _angular_core.Signal<Date | null>;
707
+ protected readonly end: _angular_core.Signal<Date | null>;
708
+ protected readonly attachments: _angular_core.Signal<readonly CbKanbanAttachment[]>;
709
+ private field;
710
+ protected initialsOf: typeof initials;
711
+ protected iso: (date: Date | null) => string | null;
712
+ protected size: (bytes: number) => string;
713
+ protected commitTitle(field: HTMLTextAreaElement): void;
714
+ /** Barra compacta del editor de la descripción. */
715
+ protected readonly editorToolbar: readonly CbEditorTool[];
716
+ private pendingDescription;
717
+ private descriptionTimer;
718
+ /** El editor cambia en cada tecla: se guarda tras una pausa (o al salir del editor). */
719
+ protected scheduleDescription(html: string): void;
720
+ protected flushDescription(): void;
721
+ constructor();
722
+ protected onColumn(id: unknown): void;
723
+ protected unassign(id: string): void;
724
+ protected onDragOver(event: DragEvent): void;
725
+ protected onDrop(event: DragEvent): void;
726
+ /** Añade archivos como adjuntos (con `file` para subirlos y una `url` local para verlos). */
727
+ addFiles(list: FileList | readonly File[] | null): void;
728
+ protected removeAttachment(file: CbKanbanAttachment): void;
729
+ protected requestRemove(): void;
730
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CbKanbanTaskPanel, never>;
731
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CbKanbanTaskPanel, "cb-kanban-task-panel", never, { "task": { "alias": "task"; "required": true; "isSignal": true; }; "itemLabel": { "alias": "itemLabel"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "columnId": { "alias": "columnId"; "required": false; "isSignal": true; }; "people": { "alias": "people"; "required": false; "isSignal": true; }; "priorities": { "alias": "priorities"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "confirmDelete": { "alias": "confirmDelete"; "required": false; "isSignal": true; }; }, { "patch": "patch"; "move": "move"; "remove": "remove"; }, never, never, true, never>;
732
+ }
733
+
734
+ /** Vistas del espacio de trabajo. */
735
+ type CbKanbanViewType = 'list' | 'board' | 'timeline' | 'dashboard' | 'calendar';
736
+ /**
737
+ * Espacio de trabajo con las vistas de las tareas (lista, tablero, cronograma,
738
+ * panel y calendario) sobre un mismo `[(columns)]`. Los botones de arriba
739
+ * encienden y apagan cada vista y se pueden ver varias a la vez (`[(views)]` es
740
+ * una lista), una debajo de otra o lado a lado (`[(sideBySide)]`); con
741
+ * `multiple = false` se comportan como pestañas (una sola vista).
742
+ *
743
+ * Recibe las mismas opciones que cada vista (`details`, `editable`, `addable`,
744
+ * `people`…) y reemite sus eventos (`cardMove`, `cardEdit`…). Una
745
+ * `ng-template cbKanbanCard` dentro del espacio de trabajo se usa como
746
+ * plantilla de las tarjetas del tablero.
747
+ *
748
+ * @example
749
+ * ```html
750
+ * <cb-kanban-workspace [(columns)]="columnas" [(views)]="vistas" [people]="personas" details editable addable>
751
+ * <ng-template cbKanbanCard let-tarea>{{ tarea.title }}</ng-template>
752
+ * </cb-kanban-workspace>
753
+ * ```
754
+ */
755
+ declare class CbKanbanWorkspace extends CbKanbanView {
756
+ protected readonly uid: string;
757
+ /** Plantilla de las tarjetas del tablero (`<ng-template cbKanbanCard>`). */
758
+ protected readonly cardTpl: _angular_core.Signal<CbKanbanCardDirective | undefined>;
759
+ /** Vistas visibles (bidireccional). Varias a la vez si `multiple`. */
760
+ readonly views: _angular_core.ModelSignal<readonly CbKanbanViewType[]>;
761
+ /** Vistas que se ofrecen arriba, en este orden. */
762
+ readonly available: _angular_core.InputSignal<readonly CbKanbanViewType[]>;
763
+ /** Se pueden ver varias vistas a la vez. Con `false`, los botones son pestañas. */
764
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
765
+ /** Con varias vistas, las pone lado a lado en lugar de una debajo de otra (bidireccional). */
766
+ readonly sideBySide: _angular_core.ModelSignal<boolean>;
767
+ /** Nivel de encabezado del título de cada vista (con varias a la vez). */
768
+ readonly headingLevel: _angular_core.InputSignal<number>;
769
+ /** Vistas a pintar, en el orden de `available`. Siempre hay al menos una. */
770
+ protected readonly shown: _angular_core.Signal<CbKanbanViewType[]>;
771
+ protected isOn(view: CbKanbanViewType): boolean;
772
+ protected viewName(view: CbKanbanViewType): string;
773
+ /** Enciende o apaga una vista (con `multiple = false`, la elige). La última no se apaga. */
774
+ toggleView(view: CbKanbanViewType): void;
775
+ /** Cada vista enfoca sus propias tareas. */
776
+ protected focusItem(): void;
777
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CbKanbanWorkspace, never>;
778
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CbKanbanWorkspace, "cb-kanban-workspace", never, { "views": { "alias": "views"; "required": false; "isSignal": true; }; "available": { "alias": "available"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "sideBySide": { "alias": "sideBySide"; "required": false; "isSignal": true; }; "headingLevel": { "alias": "headingLevel"; "required": false; "isSignal": true; }; }, { "views": "viewsChange"; "sideBySide": "sideBySideChange"; }, ["cardTpl"], never, true, never>;
779
+ }
780
+
781
+ export { CbKanban, CbKanbanCalendar, CbKanbanCardDirective, CbKanbanDashboard, CbKanbanList, CbKanbanTaskPanel, CbKanbanTimeline, CbKanbanView, CbKanbanWorkspace };
782
+ export type { CbKanbanAttachment, CbKanbanCardContext, CbKanbanCardEvent, CbKanbanColumn, CbKanbanColumnEvent, CbKanbanDashboardWidget, CbKanbanMove, CbKanbanPerson, CbKanbanPriority, CbKanbanTask, CbKanbanTaskPatch, CbKanbanViewType };
783
+ //# sourceMappingURL=caribeng-ui-kanban.d.ts.map