@c80/ui 1.0.34 → 1.0.37

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,49 +1,43 @@
1
- import { EventEmitter, TemplateRef } from '@angular/core';
1
+ import { TemplateRef } from '@angular/core';
2
+ import { ColorType, ButtonType } from './icon.types';
2
3
  import * as i0 from "@angular/core";
3
- export type Icon = 'check' | 'cancel' | 'edit' | 'delete' | 'add' | 'view' | 'get' | 'schedule' | 'refresh' | 'check_circle' | 'cancel_circle' | 'error' | 'queue' | 'arrow_up' | 'arrow_down' | 'toggle_on' | 'toggle_off' | 'search' | 'upload' | 'pending_actions' | 'play_circle';
4
- export type Color = 'primary' | 'secondary' | 'warn' | 'success';
5
4
  export declare class C80IconComponent {
6
- /** Tamaño base del icono (en px) */
7
- get iconSize(): number;
8
- icon: Icon;
9
- color: Color;
10
- customColor?: string;
11
- disabled?: boolean;
12
- size: number;
13
- /** Si es true, renderiza como <button> nativo, si es false solo como icono */
14
- private _button;
15
- set button(val: boolean | string | null | undefined);
16
- get button(): boolean;
17
- /** Tipo de botón nativo (solo si button=true) */
18
- type: 'button' | 'submit' | 'reset';
19
- /** Output para click (solo si button=true) */
20
- iconClick: EventEmitter<Event>;
21
- checkIconTpl: TemplateRef<unknown>;
22
- cancelIconTpl: TemplateRef<unknown>;
23
- editIconTpl: TemplateRef<unknown>;
24
- deleteIconTpl: TemplateRef<unknown>;
25
- addIconTpl: TemplateRef<unknown>;
26
- viewIconTpl: TemplateRef<unknown>;
27
- getIconTpl: TemplateRef<unknown>;
28
- defaultIconTpl: TemplateRef<unknown>;
29
- scheduleIconTpl: TemplateRef<unknown>;
30
- refreshIconTpl: TemplateRef<unknown>;
31
- checkCircleIconTpl: TemplateRef<unknown>;
32
- cancelCircleIconTpl: TemplateRef<unknown>;
33
- errorIconTpl: TemplateRef<unknown>;
34
- queueIconTpl: TemplateRef<unknown>;
35
- arrowUpIconTpl: TemplateRef<unknown>;
36
- arrowDownIconTpl: TemplateRef<unknown>;
37
- toggleOnIconTpl: TemplateRef<unknown>;
38
- toggleOffIconTpl: TemplateRef<unknown>;
39
- searchIconTpl: TemplateRef<unknown>;
40
- uploadIconTpl: TemplateRef<unknown>;
41
- pendingActionsIconTpl: TemplateRef<unknown>;
42
- playCircleIconTpl: TemplateRef<unknown>;
43
- getIconTemplate(): TemplateRef<unknown>;
44
- get iconColor(): string;
45
- get iconOpacity(): number;
5
+ readonly icon: import("@angular/core").InputSignal<"default" | "check" | "cancel" | "edit" | "delete" | "add" | "view" | "get" | "settings" | "schedule" | "refresh" | "checkCircle" | "cancelCircle" | "error" | "queue" | "arrowUp" | "arrowDown" | "toggleOn" | "toggleOff" | "search" | "upload" | "pendingActions" | "playCircle">;
6
+ readonly color: import("@angular/core").InputSignal<ColorType>;
7
+ readonly customColor: import("@angular/core").InputSignal<string | undefined>;
8
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
9
+ readonly size: import("@angular/core").InputSignal<number>;
10
+ readonly button: import("@angular/core").InputSignalWithTransform<boolean, string | boolean | null | undefined>;
11
+ readonly type: import("@angular/core").InputSignal<ButtonType>;
12
+ readonly iconClick: import("@angular/core").OutputEmitterRef<Event>;
13
+ readonly iconSize: import("@angular/core").Signal<number>;
14
+ readonly iconColor: import("@angular/core").Signal<string>;
15
+ readonly iconOpacity: import("@angular/core").Signal<0.5 | 0.7 | 1>;
16
+ readonly iconTemplate: import("@angular/core").Signal<any>;
17
+ readonly check: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
18
+ readonly cancel: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
19
+ readonly edit: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
20
+ readonly delete: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
21
+ readonly add: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
22
+ readonly view: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
23
+ readonly get: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
24
+ readonly settings: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
25
+ readonly schedule: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
26
+ readonly refresh: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
27
+ readonly checkCircle: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
28
+ readonly cancelCircle: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
29
+ readonly error: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
30
+ readonly queue: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
31
+ readonly arrowUp: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
32
+ readonly arrowDown: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
33
+ readonly toggleOn: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
34
+ readonly toggleOff: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
35
+ readonly search: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
36
+ readonly upload: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
37
+ readonly pendingActions: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
38
+ readonly playCircle: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
39
+ readonly default: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
46
40
  onButtonClick(event: Event): void;
47
41
  static ɵfac: i0.ɵɵFactoryDeclaration<C80IconComponent, never>;
48
- static ɵcmp: i0.ɵɵComponentDeclaration<C80IconComponent, "c80-icon", never, { "icon": { "alias": "icon"; "required": false; }; "color": { "alias": "color"; "required": false; }; "customColor": { "alias": "customColor"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "size": { "alias": "size"; "required": false; }; "button": { "alias": "button"; "required": false; }; "type": { "alias": "type"; "required": false; }; }, { "iconClick": "iconClick"; }, never, never, true, never>;
42
+ static ɵcmp: i0.ɵɵComponentDeclaration<C80IconComponent, "c80-icon", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "customColor": { "alias": "customColor"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "button": { "alias": "button"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, { "iconClick": "iconClick"; }, never, never, true, never>;
49
43
  }
@@ -0,0 +1,9 @@
1
+ import { ColorType } from './icon.types';
2
+ export declare const ICON_NAMES: readonly ["default", "check", "cancel", "edit", "delete", "add", "view", "get", "settings", "schedule", "refresh", "checkCircle", "cancelCircle", "error", "queue", "arrowUp", "arrowDown", "toggleOn", "toggleOff", "search", "upload", "pendingActions", "playCircle"];
3
+ export declare const BASE_ICON_COLORS: Readonly<Record<ColorType, string>>;
4
+ export declare const DISABLED_COLOR = "#bdbdbd";
5
+ export declare const DEFAULT_ICON_COLOR = "#222";
6
+ export declare const DISABLED_OPACITY = 0.5;
7
+ export declare const SECONDARY_WARN_OPACITY = 0.7;
8
+ export declare const DEFAULT_OPACITY = 1;
9
+ export declare const BASE_ICON_SIZE = 24;
@@ -0,0 +1,4 @@
1
+ import { ICON_NAMES } from './icon.constants';
2
+ export type IconType = (typeof ICON_NAMES)[number];
3
+ export type ColorType = 'primary' | 'secondary' | 'warn' | 'success';
4
+ export type ButtonType = 'button' | 'submit' | 'reset';
@@ -1 +1,3 @@
1
1
  export * from './icon.component';
2
+ export * from './icon.types';
3
+ export * from './icon.constants';
@@ -1,8 +1,8 @@
1
- import { Icon } from '../icon/icon.component';
1
+ import { IconType } from '../icon/icon.types';
2
2
  import * as i0 from "@angular/core";
3
3
  export interface CardDef {
4
4
  color: string;
5
- icon: Icon;
5
+ icon: IconType;
6
6
  text: string;
7
7
  count: number;
8
8
  }
@@ -13,6 +13,22 @@ import * as i0 from "@angular/core";
13
13
  export declare class TableCrudStateService {
14
14
  private readonly visibilityService;
15
15
  private readonly dataConverter;
16
+ /**
17
+ * Filtra columnas visibles y editables
18
+ */
19
+ private getEditableColumns;
20
+ /**
21
+ * Convierte valores de row según definición de columnas
22
+ */
23
+ private convertRowValues;
24
+ /**
25
+ * Inicializa row para creación con valores por defecto
26
+ */
27
+ private initializeNewRow;
28
+ /**
29
+ * Inicializa row para edición con valores actuales
30
+ */
31
+ private initializeEditRow;
16
32
  /**
17
33
  * Inicializa el estado CRUD para una nueva tabla
18
34
  * @returns Objeto con signals y métodos para gestión CRUD
@@ -39,6 +55,15 @@ export declare class TableCrudStateService {
39
55
  }>) => void;
40
56
  applyInputValues: (partialValues: Partial<T>) => void;
41
57
  };
58
+ private createStartCreateFn;
59
+ private createCancelCreateFn;
60
+ private createUpdateNewRowFn;
61
+ private createSaveCreateFn;
62
+ private createStartEditFn;
63
+ private createCancelEditFn;
64
+ private createUpdateEditRowFn;
65
+ private createSaveEditFn;
66
+ private createApplyInputValuesFn;
42
67
  static ɵfac: i0.ɵɵFactoryDeclaration<TableCrudStateService, never>;
43
68
  static ɵprov: i0.ɵɵInjectableDeclaration<TableCrudStateService>;
44
69
  }
@@ -23,7 +23,7 @@ export declare class TableDataUtilsService {
23
23
  * @param accessor - Ruta de acceso usando notación de punto
24
24
  * @returns El valor anidado o undefined
25
25
  */
26
- getNestedValue(obj: any, accessor: string): unknown;
26
+ getNestedValue(obj: Record<string, unknown>, accessor: string): unknown;
27
27
  /**
28
28
  * Devuelve el valor de display para una celda, mostrando '-' para valores falsy excepto 0, false y objetos/arrays vacíos
29
29
  * @param value - Valor a formatear
@@ -15,25 +15,31 @@ export declare class TableSelectionService {
15
15
  * Inicializa el estado de selección para una nueva tabla
16
16
  * @returns Objeto con signals y métodos de selección
17
17
  */
18
- createSelectionState<T extends Record<string, unknown>>(): {
18
+ createSelectionState<_T extends Record<string, unknown>>(): {
19
19
  selectedItems: import("@angular/core").Signal<Set<ID>>;
20
20
  selectAllChecked: import("@angular/core").Signal<boolean>;
21
21
  selectAllIndeterminate: import("@angular/core").Signal<boolean>;
22
22
  clearSelection: () => void;
23
- toggleSelectAll: (allItems: T[]) => void;
24
- toggleItemSelection: (item: T, multiple: boolean) => void;
25
- isItemSelected: (item: T) => boolean;
26
- preserveSelection: (newData: T[]) => void;
27
- getSelectedItems: (allData: T[]) => T[];
28
- updateSelectAllState: (allItems?: T[]) => void;
23
+ toggleSelectAll: (allItems: Record<string, unknown>[]) => void;
24
+ toggleItemSelection: (item: Record<string, unknown>, multiple: boolean) => void;
25
+ isItemSelected: (item: Record<string, unknown>) => boolean;
26
+ preserveSelection: (newData: Record<string, unknown>[]) => void;
27
+ getSelectedItems: (allData: Record<string, unknown>[]) => Record<string, unknown>[];
29
28
  };
29
+ private createClearSelectionFn;
30
+ private createToggleSelectAllFn;
31
+ private createToggleItemSelectionFn;
32
+ private createIsItemSelectedFn;
33
+ private createPreserveSelectionFn;
34
+ private createGetSelectedItemsFn;
35
+ private updateSelectAllState;
30
36
  /**
31
37
  * Emite los elementos seleccionados a través del EventEmitter proporcionado
32
38
  * @param selectionState - Estado de selección
33
39
  * @param allData - Todos los datos de la tabla
34
40
  * @param selectableEmitter - EventEmitter para emitir la selección
35
41
  */
36
- emitSelection<T extends Record<string, unknown>>(selectionState: ReturnType<typeof this.createSelectionState<T>>, allData: T[], selectableEmitter: EventEmitter<T[]>): void;
42
+ emitSelection<T extends Record<string, unknown>>(selectionState: ReturnType<typeof this.createSelectionState>, allData: T[], selectableEmitter: EventEmitter<T[]>): void;
37
43
  static ɵfac: i0.ɵɵFactoryDeclaration<TableSelectionService, never>;
38
44
  static ɵprov: i0.ɵɵInjectableDeclaration<TableSelectionService>;
39
45
  }
@@ -1,5 +1,6 @@
1
1
  import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
+ import { type IconType } from '../icon';
3
4
  import { C80TableColDef, ID } from './table.types';
4
5
  import * as i0 from "@angular/core";
5
6
  /**
@@ -69,6 +70,8 @@ import * as i0 from "@angular/core";
69
70
  size: number;
70
71
  multiple: boolean;
71
72
  noConfirm: boolean;
73
+ customActionIcon: IconType;
74
+ customActionTooltip: string;
72
75
  createAction: EventEmitter<{
73
76
  row: Partial<T>;
74
77
  done: (result: boolean) => void;
@@ -89,6 +92,7 @@ import * as i0 from "@angular/core";
89
92
  viewAction: EventEmitter<T>;
90
93
  uploadAction: EventEmitter<T>;
91
94
  getRowButtonAction: EventEmitter<T>;
95
+ customAction: EventEmitter<T>;
92
96
  moveUpAction: EventEmitter<{
93
97
  id: ID;
94
98
  done: (result: boolean) => void;
@@ -124,6 +128,7 @@ import * as i0 from "@angular/core";
124
128
  readonly hasViewActionListener: import("@angular/core").WritableSignal<boolean>;
125
129
  readonly hasUploadActionListener: import("@angular/core").WritableSignal<boolean>;
126
130
  readonly hasGetRowButtonListener: import("@angular/core").WritableSignal<boolean>;
131
+ readonly hasCustomActionListener: import("@angular/core").WritableSignal<boolean>;
127
132
  readonly hasMoveUpActionListener: import("@angular/core").WritableSignal<boolean>;
128
133
  readonly hasMoveDownActionListener: import("@angular/core").WritableSignal<boolean>;
129
134
  readonly hasEnableActionListener: import("@angular/core").WritableSignal<boolean>;
@@ -166,6 +171,10 @@ import * as i0 from "@angular/core";
166
171
  * Emits the getRowButtonAction event with the entire row data
167
172
  */
168
173
  onGetRowButton(row: T): void;
174
+ /**
175
+ * Emits the customAction event with the entire row data
176
+ */
177
+ onCustomAction(row: T): void;
169
178
  /**
170
179
  * Emits the moveUpAction event with the row id
171
180
  */
@@ -212,6 +221,6 @@ import * as i0 from "@angular/core";
212
221
  isColumnVisibleForRow(column: C80TableColDef, row: T): boolean;
213
222
  onUpload(row: T): void;
214
223
  static ɵfac: i0.ɵɵFactoryDeclaration<C80TableComponent<any>, never>;
215
- static ɵcmp: i0.ɵɵComponentDeclaration<C80TableComponent<any>, "c80-table", never, { "data$": { "alias": "data$"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "inputValues$": { "alias": "inputValues$"; "required": false; }; "size": { "alias": "size"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "noConfirm": { "alias": "noConfirm"; "required": false; }; }, { "createAction": "createAction"; "updateAction": "updateAction"; "deleteAction": "deleteAction"; "cancelAction": "cancelAction"; "viewAction": "viewAction"; "uploadAction": "uploadAction"; "getRowButtonAction": "getRowButtonAction"; "moveUpAction": "moveUpAction"; "moveDownAction": "moveDownAction"; "enableAction": "enableAction"; "searchTerm": "searchTerm"; "errorEvent": "errorEvent"; "selectable": "selectable"; }, never, never, true, never>;
224
+ static ɵcmp: i0.ɵɵComponentDeclaration<C80TableComponent<any>, "c80-table", never, { "data$": { "alias": "data$"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "inputValues$": { "alias": "inputValues$"; "required": false; }; "size": { "alias": "size"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "noConfirm": { "alias": "noConfirm"; "required": false; }; "customActionIcon": { "alias": "customActionIcon"; "required": false; }; "customActionTooltip": { "alias": "customActionTooltip"; "required": false; }; }, { "createAction": "createAction"; "updateAction": "updateAction"; "deleteAction": "deleteAction"; "cancelAction": "cancelAction"; "viewAction": "viewAction"; "uploadAction": "uploadAction"; "getRowButtonAction": "getRowButtonAction"; "customAction": "customAction"; "moveUpAction": "moveUpAction"; "moveDownAction": "moveDownAction"; "enableAction": "enableAction"; "searchTerm": "searchTerm"; "errorEvent": "errorEvent"; "selectable": "selectable"; }, never, never, true, never>;
216
225
  static ngAcceptInputType_noConfirm: boolean | string;
217
226
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c80/ui",
3
- "version": "1.0.34",
3
+ "version": "1.0.37",
4
4
  "peerDependencies": {
5
5
  "@angular/core": "^18.2.0",
6
6
  "rxjs": "~7.8.0",