chaqui-catalog-frontend-lib 1.1.24 → 1.1.27

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.
@@ -61,7 +61,7 @@ class CatalogService {
61
61
  * @returns Observable con la lista de items
62
62
  */
63
63
  getItemsByCatalogId(catalogId) {
64
- return this.http.get(`${this.apiBaseUrl}/catalogs/${catalogId}/items`)
64
+ return this.http.get(`${this.apiBaseUrl}/catalog/${catalogId}/items`)
65
65
  .pipe(catchError(this.handleError));
66
66
  }
67
67
  /**
@@ -113,11 +113,11 @@ class CatalogItemsSelectComponent {
113
113
  /**
114
114
  * Label del input del catálogo
115
115
  */
116
- catalogLabel = 'ID del Catálogo';
116
+ catalogLabel = "ID del Catálogo";
117
117
  /**
118
118
  * Placeholder del select de items
119
119
  */
120
- itemSelectPlaceholder = 'Selecciona un item';
120
+ itemSelectPlaceholder = "Selecciona un item";
121
121
  /**
122
122
  * Emite cuando se selecciona un item
123
123
  */
@@ -128,15 +128,20 @@ class CatalogItemsSelectComponent {
128
128
  error = new EventEmitter();
129
129
  items = [];
130
130
  isLoading = false;
131
- errorMessage = '';
131
+ errorMessage = "";
132
132
  destroy$ = new Subject();
133
133
  constructor(catalogService) {
134
134
  this.catalogService = catalogService;
135
135
  }
136
- ngOnInit() {
137
- if (this.catalogId) {
136
+ ngOnChanges(changes) {
137
+ if (changes["catalogId"] && !changes["catalogId"].firstChange) {
138
138
  this.loadItems();
139
139
  }
140
+ else if (changes["catalogId"] && changes["catalogId"].firstChange) {
141
+ if (this.catalogId) {
142
+ this.loadItems();
143
+ }
144
+ }
140
145
  }
141
146
  ngOnDestroy() {
142
147
  this.destroy$.next();
@@ -147,14 +152,15 @@ class CatalogItemsSelectComponent {
147
152
  */
148
153
  loadItems() {
149
154
  if (!this.catalogId) {
150
- this.errorMessage = 'Por favor ingresa un ID de catálogo válido';
155
+ this.errorMessage = "Por favor ingresa un ID de catálogo válido";
151
156
  this.error.emit(this.errorMessage);
152
157
  return;
153
158
  }
154
159
  this.isLoading = true;
155
- this.errorMessage = '';
160
+ this.errorMessage = "";
156
161
  this.items = [];
157
- this.catalogService.getItemsByCatalogId(this.catalogId)
162
+ this.catalogService
163
+ .getItemsByCatalogId(this.catalogId)
158
164
  .pipe(takeUntil(this.destroy$))
159
165
  .subscribe({
160
166
  next: (items) => {
@@ -163,10 +169,11 @@ class CatalogItemsSelectComponent {
163
169
  },
164
170
  error: (err) => {
165
171
  this.isLoading = false;
166
- this.errorMessage = err?.message || 'Error al cargar los items del catálogo';
172
+ this.errorMessage =
173
+ err?.message || "Error al cargar los items del catálogo";
167
174
  this.error.emit(this.errorMessage);
168
- console.error('Error cargando items:', err);
169
- }
175
+ console.error("Error cargando items:", err);
176
+ },
170
177
  });
171
178
  }
172
179
  /**
@@ -186,7 +193,7 @@ class CatalogItemsSelectComponent {
186
193
  */
187
194
  onItemSelected(event) {
188
195
  const itemId = Number(event.target.value);
189
- const selectedItem = this.items.find(item => item.id === itemId);
196
+ const selectedItem = this.items.find((item) => item.id === itemId);
190
197
  if (selectedItem) {
191
198
  this.itemSelected.emit(selectedItem);
192
199
  }
@@ -200,11 +207,11 @@ class CatalogItemsSelectComponent {
200
207
  return item.name || `Item ${item.id}`;
201
208
  }
202
209
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: CatalogItemsSelectComponent, deps: [{ token: CatalogService }], target: i0.ɵɵFactoryTarget.Component });
203
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: CatalogItemsSelectComponent, isStandalone: true, selector: "catalog-items-select", inputs: { catalogId: "catalogId", selectedItemId: "selectedItemId", catalogLabel: "catalogLabel", itemSelectPlaceholder: "itemSelectPlaceholder" }, outputs: { itemSelected: "itemSelected", error: "error" }, ngImport: i0, template: "<div class=\"catalog-items-select-container\">\n <div class=\"form-group\">\n <label for=\"catalogId\" class=\"form-label\">{{ catalogLabel }}</label>\n <input\n id=\"catalogId\"\n type=\"number\"\n class=\"form-input\"\n placeholder=\"Ingresa el ID del cat\u00E1logo\"\n [value]=\"catalogId\"\n (change)=\"onCatalogIdChange($event)\"\n min=\"1\"\n />\n </div>\n\n <div class=\"form-group\">\n <label for=\"itemSelect\" class=\"form-label\">Items</label>\n \n <div *ngIf=\"isLoading\" class=\"loading\">\n Cargando items...\n </div>\n\n <div *ngIf=\"errorMessage && !isLoading\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n\n <select\n *ngIf=\"!isLoading && items.length > 0\"\n id=\"itemSelect\"\n class=\"form-select\"\n [value]=\"selectedItemId || ''\"\n (change)=\"onItemSelected($event)\"\n >\n <option value=\"\">{{ itemSelectPlaceholder }}</option>\n <option *ngFor=\"let item of items\" [value]=\"item.id\">\n {{ getItemDisplayName(item) }}\n </option>\n </select>\n\n <div *ngIf=\"!isLoading && items.length === 0 && !errorMessage\" class=\"no-items\">\n No hay items disponibles\n </div>\n </div>\n</div>\n", styles: [".catalog-items-select-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.form-group{margin-bottom:1.5rem;display:flex;flex-direction:column}.form-label{margin-bottom:.5rem;font-weight:500;color:#333;font-size:.95rem}.form-input,.form-select{padding:.75rem;border:1px solid #ddd;border-radius:4px;font-size:1rem;font-family:inherit;transition:border-color .2s,box-shadow .2s}.form-input:focus,.form-select:focus{outline:none;border-color:#06c;box-shadow:0 0 0 3px #0066cc1a}.form-input:disabled,.form-select:disabled{background-color:#f5f5f5;color:#999;cursor:not-allowed}.loading{color:#666;font-style:italic;padding:.75rem;text-align:center;background-color:#f0f0f0;border-radius:4px}.error-message{color:#d32f2f;background-color:#ffebee;padding:.75rem;border-radius:4px;border-left:4px solid #d32f2f;font-size:.9rem}.no-items{color:#666;padding:.75rem;text-align:center;background-color:#f5f5f5;border-radius:4px;font-style:italic}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
210
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: CatalogItemsSelectComponent, isStandalone: true, selector: "catalog-items-select", inputs: { catalogId: "catalogId", selectedItemId: "selectedItemId", catalogLabel: "catalogLabel", itemSelectPlaceholder: "itemSelectPlaceholder" }, outputs: { itemSelected: "itemSelected", error: "error" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"catalog-items-select-container\">\n\n <div class=\"form-group\">\n <label for=\"itemSelect\" class=\"form-label\">Items</label>\n \n <div *ngIf=\"isLoading\" class=\"loading\">\n Cargando items...\n </div>\n\n <div *ngIf=\"errorMessage && !isLoading\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n\n <select\n *ngIf=\"!isLoading && items.length > 0\"\n id=\"itemSelect\"\n class=\"form-select\"\n [value]=\"selectedItemId || ''\"\n (change)=\"onItemSelected($event)\"\n >\n <option value=\"\">{{ itemSelectPlaceholder }}</option>\n <option *ngFor=\"let item of items\" [value]=\"item.id\">\n {{ getItemDisplayName(item) }}\n </option>\n </select>\n\n <div *ngIf=\"!isLoading && items.length === 0 && !errorMessage\" class=\"no-items\">\n No hay items disponibles\n </div>\n </div>\n</div>\n", styles: [".catalog-items-select-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.form-group{margin-bottom:1.5rem;display:flex;flex-direction:column}.form-label{margin-bottom:.5rem;font-weight:500;color:#333;font-size:.95rem}.form-input,.form-select{padding:.75rem;border:1px solid #ddd;border-radius:4px;font-size:1rem;font-family:inherit;transition:border-color .2s,box-shadow .2s}.form-input:focus,.form-select:focus{outline:none;border-color:#06c;box-shadow:0 0 0 3px #0066cc1a}.form-input:disabled,.form-select:disabled{background-color:#f5f5f5;color:#999;cursor:not-allowed}.loading{color:#666;font-style:italic;padding:.75rem;text-align:center;background-color:#f0f0f0;border-radius:4px}.error-message{color:#d32f2f;background-color:#ffebee;padding:.75rem;border-radius:4px;border-left:4px solid #d32f2f;font-size:.9rem}.no-items{color:#666;padding:.75rem;text-align:center;background-color:#f5f5f5;border-radius:4px;font-style:italic}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
204
211
  }
205
212
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: CatalogItemsSelectComponent, decorators: [{
206
213
  type: Component,
207
- args: [{ selector: 'catalog-items-select', standalone: true, imports: [CommonModule], template: "<div class=\"catalog-items-select-container\">\n <div class=\"form-group\">\n <label for=\"catalogId\" class=\"form-label\">{{ catalogLabel }}</label>\n <input\n id=\"catalogId\"\n type=\"number\"\n class=\"form-input\"\n placeholder=\"Ingresa el ID del cat\u00E1logo\"\n [value]=\"catalogId\"\n (change)=\"onCatalogIdChange($event)\"\n min=\"1\"\n />\n </div>\n\n <div class=\"form-group\">\n <label for=\"itemSelect\" class=\"form-label\">Items</label>\n \n <div *ngIf=\"isLoading\" class=\"loading\">\n Cargando items...\n </div>\n\n <div *ngIf=\"errorMessage && !isLoading\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n\n <select\n *ngIf=\"!isLoading && items.length > 0\"\n id=\"itemSelect\"\n class=\"form-select\"\n [value]=\"selectedItemId || ''\"\n (change)=\"onItemSelected($event)\"\n >\n <option value=\"\">{{ itemSelectPlaceholder }}</option>\n <option *ngFor=\"let item of items\" [value]=\"item.id\">\n {{ getItemDisplayName(item) }}\n </option>\n </select>\n\n <div *ngIf=\"!isLoading && items.length === 0 && !errorMessage\" class=\"no-items\">\n No hay items disponibles\n </div>\n </div>\n</div>\n", styles: [".catalog-items-select-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.form-group{margin-bottom:1.5rem;display:flex;flex-direction:column}.form-label{margin-bottom:.5rem;font-weight:500;color:#333;font-size:.95rem}.form-input,.form-select{padding:.75rem;border:1px solid #ddd;border-radius:4px;font-size:1rem;font-family:inherit;transition:border-color .2s,box-shadow .2s}.form-input:focus,.form-select:focus{outline:none;border-color:#06c;box-shadow:0 0 0 3px #0066cc1a}.form-input:disabled,.form-select:disabled{background-color:#f5f5f5;color:#999;cursor:not-allowed}.loading{color:#666;font-style:italic;padding:.75rem;text-align:center;background-color:#f0f0f0;border-radius:4px}.error-message{color:#d32f2f;background-color:#ffebee;padding:.75rem;border-radius:4px;border-left:4px solid #d32f2f;font-size:.9rem}.no-items{color:#666;padding:.75rem;text-align:center;background-color:#f5f5f5;border-radius:4px;font-style:italic}\n"] }]
214
+ args: [{ selector: "catalog-items-select", standalone: true, imports: [CommonModule], template: "<div class=\"catalog-items-select-container\">\n\n <div class=\"form-group\">\n <label for=\"itemSelect\" class=\"form-label\">Items</label>\n \n <div *ngIf=\"isLoading\" class=\"loading\">\n Cargando items...\n </div>\n\n <div *ngIf=\"errorMessage && !isLoading\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n\n <select\n *ngIf=\"!isLoading && items.length > 0\"\n id=\"itemSelect\"\n class=\"form-select\"\n [value]=\"selectedItemId || ''\"\n (change)=\"onItemSelected($event)\"\n >\n <option value=\"\">{{ itemSelectPlaceholder }}</option>\n <option *ngFor=\"let item of items\" [value]=\"item.id\">\n {{ getItemDisplayName(item) }}\n </option>\n </select>\n\n <div *ngIf=\"!isLoading && items.length === 0 && !errorMessage\" class=\"no-items\">\n No hay items disponibles\n </div>\n </div>\n</div>\n", styles: [".catalog-items-select-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.form-group{margin-bottom:1.5rem;display:flex;flex-direction:column}.form-label{margin-bottom:.5rem;font-weight:500;color:#333;font-size:.95rem}.form-input,.form-select{padding:.75rem;border:1px solid #ddd;border-radius:4px;font-size:1rem;font-family:inherit;transition:border-color .2s,box-shadow .2s}.form-input:focus,.form-select:focus{outline:none;border-color:#06c;box-shadow:0 0 0 3px #0066cc1a}.form-input:disabled,.form-select:disabled{background-color:#f5f5f5;color:#999;cursor:not-allowed}.loading{color:#666;font-style:italic;padding:.75rem;text-align:center;background-color:#f0f0f0;border-radius:4px}.error-message{color:#d32f2f;background-color:#ffebee;padding:.75rem;border-radius:4px;border-left:4px solid #d32f2f;font-size:.9rem}.no-items{color:#666;padding:.75rem;text-align:center;background-color:#f5f5f5;border-radius:4px;font-style:italic}\n"] }]
208
215
  }], ctorParameters: () => [{ type: CatalogService }], propDecorators: { catalogId: [{
209
216
  type: Input
210
217
  }], selectedItemId: [{
@@ -1 +1 @@
1
- {"version":3,"file":"chaqui-catalog-frontend-lib.mjs","sources":["../../src/lib/config/catalog.config.ts","../../src/lib/services/catalog.service.ts","../../src/lib/components/catalog-items-select/catalog-items-select.component.ts","../../src/lib/components/catalog-items-select/catalog-items-select.component.html","../../src/lib/components/catalog-select/catalog-select.component.ts","../../src/lib/components/catalog-select/catalog-select.component.html","../../src/lib/catalog.module.ts","../../src/public-api.ts","../../src/chaqui-catalog-frontend-lib.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\n/**\n * Configuración de la librería de Catálogos\n */\nexport interface CatalogConfig {\n /**\n * URL base del servicio de catálogos\n * Ejemplo: 'http://localhost:3001/api'\n */\n apiBaseUrl: string;\n}\n\n/**\n * Token de inyección para la configuración\n */\nexport const CATALOG_CONFIG_TOKEN = new InjectionToken<CatalogConfig>('CATALOG_CONFIG');\n\n/**\n * Proveedor para configurar la librería en aplicaciones standalone.\n *\n * @example\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideHttpClient(),\n * provideCatalog({ apiBaseUrl: 'http://localhost:3001/api' })\n * ]\n * });\n */\nexport function provideCatalog(config: CatalogConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: CATALOG_CONFIG_TOKEN,\n useValue: config\n }\n ]);\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { Catalog, CatalogItem, ApiErrorResponse } from '../models/catalog.model';\nimport { CATALOG_CONFIG_TOKEN } from '../config/catalog.config';\nimport type { CatalogConfig } from '../config/catalog.config';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CatalogService {\n private apiBaseUrl: string;\n\n constructor(\n private http: HttpClient,\n @Inject(CATALOG_CONFIG_TOKEN) config: CatalogConfig\n ) {\n this.apiBaseUrl = config.apiBaseUrl;\n }\n\n /**\n * Obtiene todos los catálogos disponibles\n * @returns Observable con la lista de catálogos\n */\n getCatalogs(): Observable<Catalog[]> {\n return this.http.get<Catalog[]>(`${this.apiBaseUrl}/catalogs`)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Obtiene un catálogo específico por su ID\n * @param catalogId ID del catálogo\n * @returns Observable con los datos del catálogo\n */\n getCatalogById(catalogId: number): Observable<Catalog> {\n return this.http.get<Catalog>(`${this.apiBaseUrl}/catalogs/${catalogId}`)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Obtiene todos los items de un catálogo específico\n * @param catalogId ID del catálogo\n * @returns Observable con la lista de items\n */\n getItemsByCatalogId(catalogId: number): Observable<CatalogItem[]> {\n return this.http.get<CatalogItem[]>(`${this.apiBaseUrl}/catalogs/${catalogId}/items`)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Obtiene un item específico por su ID\n * @param itemId ID del item\n * @returns Observable con los datos del item\n */\n getItemById(itemId: number): Observable<CatalogItem> {\n return this.http.get<CatalogItem>(`${this.apiBaseUrl}/items/${itemId}`)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Maneja los errores de las peticiones HTTP\n * @param error Error de la petición\n * @returns Observable con el error\n */\n private handleError(error: any) {\n const errorResponse: ApiErrorResponse = {\n message: error.message || 'Error en la petición',\n status: error.status,\n error: error.error\n };\n console.error('Error en CatalogService:', errorResponse);\n return throwError(() => errorResponse);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { CatalogService } from '../../services/catalog.service';\nimport { CatalogItem } from '../../models/catalog.model';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'catalog-items-select',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './catalog-items-select.component.html',\n styleUrls: ['./catalog-items-select.component.css']\n})\nexport class CatalogItemsSelectComponent implements OnInit, OnDestroy {\n /**\n * ID del catálogo del cual cargar los items\n */\n @Input() catalogId!: number;\n\n /**\n * ID del item actualmente seleccionado (opcional)\n */\n @Input() selectedItemId?: number;\n\n /**\n * Label del input del catálogo\n */\n @Input() catalogLabel: string = 'ID del Catálogo';\n\n /**\n * Placeholder del select de items\n */\n @Input() itemSelectPlaceholder: string = 'Selecciona un item';\n\n /**\n * Emite cuando se selecciona un item\n */\n @Output() itemSelected = new EventEmitter<CatalogItem>();\n\n /**\n * Emite cuando hay un error al cargar los items\n */\n @Output() error = new EventEmitter<string>();\n\n items: CatalogItem[] = [];\n isLoading: boolean = false;\n errorMessage: string = '';\n\n private destroy$ = new Subject<void>();\n\n constructor(private catalogService: CatalogService) {}\n\n ngOnInit(): void {\n if (this.catalogId) {\n this.loadItems();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Carga los items del catálogo especificado\n */\n loadItems(): void {\n if (!this.catalogId) {\n this.errorMessage = 'Por favor ingresa un ID de catálogo válido';\n this.error.emit(this.errorMessage);\n return;\n }\n\n this.isLoading = true;\n this.errorMessage = '';\n this.items = [];\n\n this.catalogService.getItemsByCatalogId(this.catalogId)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (items: CatalogItem[]) => {\n this.items = items;\n this.isLoading = false;\n },\n error: (err: any) => {\n this.isLoading = false;\n this.errorMessage = err?.message || 'Error al cargar los items del catálogo';\n this.error.emit(this.errorMessage);\n console.error('Error cargando items:', err);\n }\n });\n }\n\n /**\n * Maneja el cambio de catálogo\n * @param event Evento del input\n */\n onCatalogIdChange(event: any): void {\n const value = event.target.value;\n this.catalogId = value ? Number(value) : null as any;\n if (this.catalogId) {\n this.loadItems();\n }\n }\n\n /**\n * Maneja la selección de un item\n * @param event Evento del select\n */\n onItemSelected(event: any): void {\n const itemId = Number(event.target.value);\n const selectedItem = this.items.find(item => item.id === itemId);\n \n if (selectedItem) {\n this.itemSelected.emit(selectedItem);\n }\n }\n\n /**\n * Obtiene el nombre del item para mostrar en el select\n * @param item Item del catálogo\n * @returns Nombre del item o ID si no hay nombre\n */\n getItemDisplayName(item: CatalogItem): string {\n return item.name || `Item ${item.id}`;\n }\n}\n","<div class=\"catalog-items-select-container\">\n <div class=\"form-group\">\n <label for=\"catalogId\" class=\"form-label\">{{ catalogLabel }}</label>\n <input\n id=\"catalogId\"\n type=\"number\"\n class=\"form-input\"\n placeholder=\"Ingresa el ID del catálogo\"\n [value]=\"catalogId\"\n (change)=\"onCatalogIdChange($event)\"\n min=\"1\"\n />\n </div>\n\n <div class=\"form-group\">\n <label for=\"itemSelect\" class=\"form-label\">Items</label>\n \n <div *ngIf=\"isLoading\" class=\"loading\">\n Cargando items...\n </div>\n\n <div *ngIf=\"errorMessage && !isLoading\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n\n <select\n *ngIf=\"!isLoading && items.length > 0\"\n id=\"itemSelect\"\n class=\"form-select\"\n [value]=\"selectedItemId || ''\"\n (change)=\"onItemSelected($event)\"\n >\n <option value=\"\">{{ itemSelectPlaceholder }}</option>\n <option *ngFor=\"let item of items\" [value]=\"item.id\">\n {{ getItemDisplayName(item) }}\n </option>\n </select>\n\n <div *ngIf=\"!isLoading && items.length === 0 && !errorMessage\" class=\"no-items\">\n No hay items disponibles\n </div>\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CatalogService } from '../../services/catalog.service';\nimport { Catalog } from '../../models/catalog.model';\nimport { Subject, forkJoin } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'catalog-select',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './catalog-select.component.html',\n styleUrls: ['./catalog-select.component.css']\n})\nexport class CatalogSelectComponent implements OnInit, OnDestroy, OnChanges {\n /**\n * Lista de IDs de catálogos a mostrar en el selector\n */\n @Input() catalogIds: number[] = [];\n\n /**\n * ID del catálogo actualmente seleccionado (opcional, para valor inicial)\n */\n @Input() selectedCatalogId?: number;\n\n /**\n * Placeholder del select de catálogos\n */\n @Input() placeholder: string = 'Selecciona un catálogo';\n\n /**\n * Label del selector\n */\n @Input() label: string = 'Catálogo';\n\n /**\n * Emite el ID del catálogo seleccionado\n */\n @Output() catalogSelected = new EventEmitter<number>();\n\n /**\n * Emite el objeto Catalog completo del catálogo seleccionado\n */\n @Output() catalogChange = new EventEmitter<Catalog>();\n\n /**\n * Emite cuando hay un error al cargar los catálogos\n */\n @Output() error = new EventEmitter<string>();\n\n catalogs: Catalog[] = [];\n isLoading: boolean = false;\n errorMessage: string = '';\n\n private destroy$ = new Subject<void>();\n\n constructor(private catalogService: CatalogService) {}\n\n ngOnInit(): void {\n if (this.catalogIds && this.catalogIds.length > 0) {\n this.loadCatalogs();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['catalogIds'] && !changes['catalogIds'].firstChange) {\n this.loadCatalogs();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Carga la información de cada catálogo a partir de los IDs recibidos\n */\n loadCatalogs(): void {\n if (!this.catalogIds || this.catalogIds.length === 0) {\n this.catalogs = [];\n return;\n }\n\n this.isLoading = true;\n this.errorMessage = '';\n this.catalogs = [];\n\n const requests = this.catalogIds.map(id =>\n this.catalogService.getCatalogById(id)\n );\n\n forkJoin(requests)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (catalogs: Catalog[]) => {\n this.catalogs = catalogs;\n this.isLoading = false;\n },\n error: (err: any) => {\n this.isLoading = false;\n this.errorMessage = err?.message || 'Error al cargar los catálogos';\n this.error.emit(this.errorMessage);\n console.error('Error cargando catálogos:', err);\n }\n });\n }\n\n /**\n * Maneja la selección de un catálogo en el select\n * @param event Evento del select\n */\n onCatalogSelected(event: any): void {\n const catalogId = Number(event.target.value);\n const selected = this.catalogs.find(c => c.id === catalogId);\n\n if (selected) {\n this.selectedCatalogId = catalogId;\n this.catalogSelected.emit(catalogId);\n this.catalogChange.emit(selected);\n }\n }\n\n /**\n * Obtiene el nombre del catálogo para mostrar en el select\n * @param catalog Catálogo\n * @returns Nombre del catálogo o ID si no hay nombre\n */\n getCatalogDisplayName(catalog: Catalog): string {\n return catalog.name || `Catálogo ${catalog.id}`;\n }\n}\n","<div class=\"catalog-select-container\">\n <div class=\"form-group\">\n <label for=\"catalogSelect\" class=\"form-label\">{{ label }}</label>\n\n <div *ngIf=\"isLoading\" class=\"loading\">\n Cargando catálogos...\n </div>\n\n <div *ngIf=\"errorMessage && !isLoading\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n\n <select\n *ngIf=\"!isLoading && !errorMessage\"\n id=\"catalogSelect\"\n class=\"form-select\"\n [value]=\"selectedCatalogId || ''\"\n (change)=\"onCatalogSelected($event)\"\n >\n <option value=\"\">{{ placeholder }}</option>\n <option *ngFor=\"let catalog of catalogs\" [value]=\"catalog.id\">\n {{ getCatalogDisplayName(catalog) }}\n </option>\n </select>\n\n <div *ngIf=\"!isLoading && catalogs.length === 0 && !errorMessage && catalogIds.length > 0\" class=\"no-items\">\n No hay catálogos disponibles\n </div>\n </div>\n</div>\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { CatalogItemsSelectComponent } from './components/catalog-items-select/catalog-items-select.component';\nimport { CatalogSelectComponent } from './components/catalog-select/catalog-select.component';\nimport { CatalogService } from './services/catalog.service';\nimport { CATALOG_CONFIG_TOKEN } from './config/catalog.config';\nimport type { CatalogConfig } from './config/catalog.config';\n\n@NgModule({\n imports: [CommonModule, HttpClientModule, CatalogItemsSelectComponent, CatalogSelectComponent],\n exports: [CatalogItemsSelectComponent, CatalogSelectComponent]\n})\nexport class CatalogModule {\n /**\n * Configura el módulo con la URL base del servicio de catálogos\n * @param config Configuración del módulo\n * @returns Módulo configurado con los proveedores\n * \n * @example\n * // En tu app.module.ts\n * imports: [\n * CatalogModule.forRoot({\n * apiBaseUrl: 'http://localhost:3001/api'\n * })\n * ]\n */\n static forRoot(config: CatalogConfig): ModuleWithProviders<CatalogModule> {\n return {\n ngModule: CatalogModule,\n providers: [\n CatalogService,\n {\n provide: CATALOG_CONFIG_TOKEN,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Exporta todos los módulos, servicios y componentes públicos de la librería\n */\nexport * from './lib/catalog.module';\nexport * from './lib/services/index';\nexport * from './lib/models/index';\nexport * from './lib/components/index';\nexport * from './lib/config/catalog.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CatalogService"],"mappings":"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"}
1
+ {"version":3,"file":"chaqui-catalog-frontend-lib.mjs","sources":["../../src/lib/config/catalog.config.ts","../../src/lib/services/catalog.service.ts","../../src/lib/components/catalog-items-select/catalog-items-select.component.ts","../../src/lib/components/catalog-items-select/catalog-items-select.component.html","../../src/lib/components/catalog-select/catalog-select.component.ts","../../src/lib/components/catalog-select/catalog-select.component.html","../../src/lib/catalog.module.ts","../../src/public-api.ts","../../src/chaqui-catalog-frontend-lib.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\n/**\n * Configuración de la librería de Catálogos\n */\nexport interface CatalogConfig {\n /**\n * URL base del servicio de catálogos\n * Ejemplo: 'http://localhost:3001/api'\n */\n apiBaseUrl: string;\n}\n\n/**\n * Token de inyección para la configuración\n */\nexport const CATALOG_CONFIG_TOKEN = new InjectionToken<CatalogConfig>('CATALOG_CONFIG');\n\n/**\n * Proveedor para configurar la librería en aplicaciones standalone.\n *\n * @example\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideHttpClient(),\n * provideCatalog({ apiBaseUrl: 'http://localhost:3001/api' })\n * ]\n * });\n */\nexport function provideCatalog(config: CatalogConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: CATALOG_CONFIG_TOKEN,\n useValue: config\n }\n ]);\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { Catalog, CatalogItem, ApiErrorResponse } from '../models/catalog.model';\nimport { CATALOG_CONFIG_TOKEN } from '../config/catalog.config';\nimport type { CatalogConfig } from '../config/catalog.config';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CatalogService {\n private apiBaseUrl: string;\n\n constructor(\n private http: HttpClient,\n @Inject(CATALOG_CONFIG_TOKEN) config: CatalogConfig\n ) {\n this.apiBaseUrl = config.apiBaseUrl;\n }\n\n /**\n * Obtiene todos los catálogos disponibles\n * @returns Observable con la lista de catálogos\n */\n getCatalogs(): Observable<Catalog[]> {\n return this.http.get<Catalog[]>(`${this.apiBaseUrl}/catalogs`)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Obtiene un catálogo específico por su ID\n * @param catalogId ID del catálogo\n * @returns Observable con los datos del catálogo\n */\n getCatalogById(catalogId: number): Observable<Catalog> {\n return this.http.get<Catalog>(`${this.apiBaseUrl}/catalogs/${catalogId}`)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Obtiene todos los items de un catálogo específico\n * @param catalogId ID del catálogo\n * @returns Observable con la lista de items\n */\n getItemsByCatalogId(catalogId: number): Observable<CatalogItem[]> {\n return this.http.get<CatalogItem[]>(`${this.apiBaseUrl}/catalog/${catalogId}/items`)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Obtiene un item específico por su ID\n * @param itemId ID del item\n * @returns Observable con los datos del item\n */\n getItemById(itemId: number): Observable<CatalogItem> {\n return this.http.get<CatalogItem>(`${this.apiBaseUrl}/items/${itemId}`)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Maneja los errores de las peticiones HTTP\n * @param error Error de la petición\n * @returns Observable con el error\n */\n private handleError(error: any) {\n const errorResponse: ApiErrorResponse = {\n message: error.message || 'Error en la petición',\n status: error.status,\n error: error.error\n };\n console.error('Error en CatalogService:', errorResponse);\n return throwError(() => errorResponse);\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n OnChanges,\n} from \"@angular/core\";\nimport { CatalogService } from \"../../services/catalog.service\";\nimport { CatalogItem } from \"../../models/catalog.model\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\n@Component({\n selector: \"catalog-items-select\",\n standalone: true,\n imports: [CommonModule],\n templateUrl: \"./catalog-items-select.component.html\",\n styleUrls: [\"./catalog-items-select.component.css\"],\n})\nexport class CatalogItemsSelectComponent implements OnChanges, OnDestroy {\n /**\n * ID del catálogo del cual cargar los items\n */\n @Input() catalogId!: number;\n\n /**\n * ID del item actualmente seleccionado (opcional)\n */\n @Input() selectedItemId?: number;\n\n /**\n * Label del input del catálogo\n */\n @Input() catalogLabel: string = \"ID del Catálogo\";\n\n /**\n * Placeholder del select de items\n */\n @Input() itemSelectPlaceholder: string = \"Selecciona un item\";\n\n /**\n * Emite cuando se selecciona un item\n */\n @Output() itemSelected = new EventEmitter<CatalogItem>();\n\n /**\n * Emite cuando hay un error al cargar los items\n */\n @Output() error = new EventEmitter<string>();\n\n items: CatalogItem[] = [];\n isLoading: boolean = false;\n errorMessage: string = \"\";\n\n private destroy$ = new Subject<void>();\n\n constructor(private catalogService: CatalogService) {}\n\n ngOnChanges(changes: any): void {\n if (changes[\"catalogId\"] && !changes[\"catalogId\"].firstChange) {\n this.loadItems();\n } else if (changes[\"catalogId\"] && changes[\"catalogId\"].firstChange) {\n if (this.catalogId) {\n this.loadItems();\n }\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Carga los items del catálogo especificado\n */\n loadItems(): void {\n if (!this.catalogId) {\n this.errorMessage = \"Por favor ingresa un ID de catálogo válido\";\n this.error.emit(this.errorMessage);\n return;\n }\n\n this.isLoading = true;\n this.errorMessage = \"\";\n this.items = [];\n\n this.catalogService\n .getItemsByCatalogId(this.catalogId)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (items: CatalogItem[]) => {\n this.items = items;\n this.isLoading = false;\n },\n error: (err: any) => {\n this.isLoading = false;\n this.errorMessage =\n err?.message || \"Error al cargar los items del catálogo\";\n this.error.emit(this.errorMessage);\n console.error(\"Error cargando items:\", err);\n },\n });\n }\n\n /**\n * Maneja el cambio de catálogo\n * @param event Evento del input\n */\n onCatalogIdChange(event: any): void {\n const value = event.target.value;\n this.catalogId = value ? Number(value) : (null as any);\n if (this.catalogId) {\n this.loadItems();\n }\n }\n\n /**\n * Maneja la selección de un item\n * @param event Evento del select\n */\n onItemSelected(event: any): void {\n const itemId = Number(event.target.value);\n const selectedItem = this.items.find((item) => item.id === itemId);\n\n if (selectedItem) {\n this.itemSelected.emit(selectedItem);\n }\n }\n\n /**\n * Obtiene el nombre del item para mostrar en el select\n * @param item Item del catálogo\n * @returns Nombre del item o ID si no hay nombre\n */\n getItemDisplayName(item: CatalogItem): string {\n return item.name || `Item ${item.id}`;\n }\n}\n","<div class=\"catalog-items-select-container\">\n\n <div class=\"form-group\">\n <label for=\"itemSelect\" class=\"form-label\">Items</label>\n \n <div *ngIf=\"isLoading\" class=\"loading\">\n Cargando items...\n </div>\n\n <div *ngIf=\"errorMessage && !isLoading\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n\n <select\n *ngIf=\"!isLoading && items.length > 0\"\n id=\"itemSelect\"\n class=\"form-select\"\n [value]=\"selectedItemId || ''\"\n (change)=\"onItemSelected($event)\"\n >\n <option value=\"\">{{ itemSelectPlaceholder }}</option>\n <option *ngFor=\"let item of items\" [value]=\"item.id\">\n {{ getItemDisplayName(item) }}\n </option>\n </select>\n\n <div *ngIf=\"!isLoading && items.length === 0 && !errorMessage\" class=\"no-items\">\n No hay items disponibles\n </div>\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CatalogService } from '../../services/catalog.service';\nimport { Catalog } from '../../models/catalog.model';\nimport { Subject, forkJoin } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'catalog-select',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './catalog-select.component.html',\n styleUrls: ['./catalog-select.component.css']\n})\nexport class CatalogSelectComponent implements OnInit, OnDestroy, OnChanges {\n /**\n * Lista de IDs de catálogos a mostrar en el selector\n */\n @Input() catalogIds: number[] = [];\n\n /**\n * ID del catálogo actualmente seleccionado (opcional, para valor inicial)\n */\n @Input() selectedCatalogId?: number;\n\n /**\n * Placeholder del select de catálogos\n */\n @Input() placeholder: string = 'Selecciona un catálogo';\n\n /**\n * Label del selector\n */\n @Input() label: string = 'Catálogo';\n\n /**\n * Emite el ID del catálogo seleccionado\n */\n @Output() catalogSelected = new EventEmitter<number>();\n\n /**\n * Emite el objeto Catalog completo del catálogo seleccionado\n */\n @Output() catalogChange = new EventEmitter<Catalog>();\n\n /**\n * Emite cuando hay un error al cargar los catálogos\n */\n @Output() error = new EventEmitter<string>();\n\n catalogs: Catalog[] = [];\n isLoading: boolean = false;\n errorMessage: string = '';\n\n private destroy$ = new Subject<void>();\n\n constructor(private catalogService: CatalogService) {}\n\n ngOnInit(): void {\n if (this.catalogIds && this.catalogIds.length > 0) {\n this.loadCatalogs();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['catalogIds'] && !changes['catalogIds'].firstChange) {\n this.loadCatalogs();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Carga la información de cada catálogo a partir de los IDs recibidos\n */\n loadCatalogs(): void {\n if (!this.catalogIds || this.catalogIds.length === 0) {\n this.catalogs = [];\n return;\n }\n\n this.isLoading = true;\n this.errorMessage = '';\n this.catalogs = [];\n\n const requests = this.catalogIds.map(id =>\n this.catalogService.getCatalogById(id)\n );\n\n forkJoin(requests)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (catalogs: Catalog[]) => {\n this.catalogs = catalogs;\n this.isLoading = false;\n },\n error: (err: any) => {\n this.isLoading = false;\n this.errorMessage = err?.message || 'Error al cargar los catálogos';\n this.error.emit(this.errorMessage);\n console.error('Error cargando catálogos:', err);\n }\n });\n }\n\n /**\n * Maneja la selección de un catálogo en el select\n * @param event Evento del select\n */\n onCatalogSelected(event: any): void {\n const catalogId = Number(event.target.value);\n const selected = this.catalogs.find(c => c.id === catalogId);\n\n if (selected) {\n this.selectedCatalogId = catalogId;\n this.catalogSelected.emit(catalogId);\n this.catalogChange.emit(selected);\n }\n }\n\n /**\n * Obtiene el nombre del catálogo para mostrar en el select\n * @param catalog Catálogo\n * @returns Nombre del catálogo o ID si no hay nombre\n */\n getCatalogDisplayName(catalog: Catalog): string {\n return catalog.name || `Catálogo ${catalog.id}`;\n }\n}\n","<div class=\"catalog-select-container\">\n <div class=\"form-group\">\n <label for=\"catalogSelect\" class=\"form-label\">{{ label }}</label>\n\n <div *ngIf=\"isLoading\" class=\"loading\">\n Cargando catálogos...\n </div>\n\n <div *ngIf=\"errorMessage && !isLoading\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n\n <select\n *ngIf=\"!isLoading && !errorMessage\"\n id=\"catalogSelect\"\n class=\"form-select\"\n [value]=\"selectedCatalogId || ''\"\n (change)=\"onCatalogSelected($event)\"\n >\n <option value=\"\">{{ placeholder }}</option>\n <option *ngFor=\"let catalog of catalogs\" [value]=\"catalog.id\">\n {{ getCatalogDisplayName(catalog) }}\n </option>\n </select>\n\n <div *ngIf=\"!isLoading && catalogs.length === 0 && !errorMessage && catalogIds.length > 0\" class=\"no-items\">\n No hay catálogos disponibles\n </div>\n </div>\n</div>\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { CatalogItemsSelectComponent } from './components/catalog-items-select/catalog-items-select.component';\nimport { CatalogSelectComponent } from './components/catalog-select/catalog-select.component';\nimport { CatalogService } from './services/catalog.service';\nimport { CATALOG_CONFIG_TOKEN } from './config/catalog.config';\nimport type { CatalogConfig } from './config/catalog.config';\n\n@NgModule({\n imports: [CommonModule, HttpClientModule, CatalogItemsSelectComponent, CatalogSelectComponent],\n exports: [CatalogItemsSelectComponent, CatalogSelectComponent]\n})\nexport class CatalogModule {\n /**\n * Configura el módulo con la URL base del servicio de catálogos\n * @param config Configuración del módulo\n * @returns Módulo configurado con los proveedores\n * \n * @example\n * // En tu app.module.ts\n * imports: [\n * CatalogModule.forRoot({\n * apiBaseUrl: 'http://localhost:3001/api'\n * })\n * ]\n */\n static forRoot(config: CatalogConfig): ModuleWithProviders<CatalogModule> {\n return {\n ngModule: CatalogModule,\n providers: [\n CatalogService,\n {\n provide: CATALOG_CONFIG_TOKEN,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Exporta todos los módulos, servicios y componentes públicos de la librería\n */\nexport * from './lib/catalog.module';\nexport * from './lib/services/index';\nexport * from './lib/models/index';\nexport * from './lib/components/index';\nexport * from './lib/config/catalog.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CatalogService"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
2
- import { CatalogService } from '../../services/catalog.service';
3
- import { CatalogItem } from '../../models/catalog.model';
1
+ import { EventEmitter, OnDestroy, OnChanges } from "@angular/core";
2
+ import { CatalogService } from "../../services/catalog.service";
3
+ import { CatalogItem } from "../../models/catalog.model";
4
4
  import * as i0 from "@angular/core";
5
- export declare class CatalogItemsSelectComponent implements OnInit, OnDestroy {
5
+ export declare class CatalogItemsSelectComponent implements OnChanges, OnDestroy {
6
6
  private catalogService;
7
7
  /**
8
8
  * ID del catálogo del cual cargar los items
@@ -33,7 +33,7 @@ export declare class CatalogItemsSelectComponent implements OnInit, OnDestroy {
33
33
  errorMessage: string;
34
34
  private destroy$;
35
35
  constructor(catalogService: CatalogService);
36
- ngOnInit(): void;
36
+ ngOnChanges(changes: any): void;
37
37
  ngOnDestroy(): void;
38
38
  /**
39
39
  * Carga los items del catálogo especificado
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chaqui-catalog-frontend-lib",
3
- "version": "1.1.24",
3
+ "version": "1.1.27",
4
4
  "description": "Librería Angular para consumir el servicio de catálogos, los componentes son standalone",
5
5
  "type": "module",
6
6
  "author": "",