@solcre-org/core-ui 2.12.1 → 2.12.3

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.
@@ -4657,6 +4657,16 @@ class PaginationService {
4657
4657
  destroy(tableId) {
4658
4658
  this.paginationState.delete(tableId);
4659
4659
  }
4660
+ getCurrentPaginationParams(tableId) {
4661
+ const state = this.paginationState.get(tableId);
4662
+ if (!state) {
4663
+ return {};
4664
+ }
4665
+ return {
4666
+ page: state.currentPage(),
4667
+ size: state.pageSize()
4668
+ };
4669
+ }
4660
4670
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PaginationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4661
4671
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PaginationService, providedIn: 'root' });
4662
4672
  }
@@ -6077,6 +6087,20 @@ class TableDataService {
6077
6087
  }
6078
6088
  current[keys[keys.length - 1]] = value;
6079
6089
  }
6090
+ getCurrentData() {
6091
+ return this.getData();
6092
+ }
6093
+ updateData(newData) {
6094
+ this.setData(newData);
6095
+ }
6096
+ loadDataWithParams(endpoint, modelFactory, params, loaderId, customArrayKey) {
6097
+ if (!this.currentEndpoint || !this.currentModelFactory) {
6098
+ this.setEndpoint(endpoint, modelFactory, loaderId, this.isPaginationEnabled, customArrayKey, params);
6099
+ return;
6100
+ }
6101
+ this.currentCustomParams = { ...this.currentCustomParams, ...params };
6102
+ this.loadData(this.currentFilterParams, this.currentPaginationParams, loaderId);
6103
+ }
6080
6104
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TableDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6081
6105
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TableDataService, providedIn: 'root' });
6082
6106
  }
@@ -7031,6 +7055,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
7031
7055
  args: [{ selector: 'core-filter-modal', standalone: true, imports: [CommonModule, TranslateModule, FormsModule, ReactiveFormsModule, DynamicFieldDirective, GenericButtonComponent], hostDirectives: [CoreHostDirective], template: "<div class=\"c-modal\" [class.is-visible]=\"isOpen()\" [class.is-closing]=\"isClosing()\">\n <div class=\"c-modal__overlay\" (click)=\"onClose()\"></div>\n <div class=\"c-modal__holder\">\n <div class=\"c-modal__header\">\n <p class=\"c-modal__title\">\n {{ \"table.filterBy\" | translate }}\n </p>\n <core-generic-button\n [config]=\"closeButtonConfig()\"\n (buttonClick)=\"onClose()\">\n </core-generic-button>\n </div>\n <div class=\"c-modal__body\">\n <form class=\"c-entry-group\">\n @for (filter of visibleFilters(); track filter.key.toString() + '-' + clearTrigger()) {\n <div coreDynamicField [field]=\"getFieldConfig(filter)\" [value]=\"getFieldValue(filter.key.toString())\"\n [mode]=\"ModalMode.FILTER\" (valueChange)=\"updateFilter(filter.key.toString(), $event)\">\n </div>\n }\n </form>\n </div>\n <div class=\"c-modal__bottom\">\n <core-generic-button\n [config]=\"clearButtonConfig()\"\n (buttonClick)=\"onClear()\">\n </core-generic-button>\n <core-generic-button\n [config]=\"applyButtonConfig()\"\n (buttonClick)=\"onApply()\">\n </core-generic-button>\n </div>\n </div>\n</div>", styles: [".c-link.disabled{opacity:.5;cursor:not-allowed}\n"] }]
7032
7056
  }], ctorParameters: () => [] });
7033
7057
 
7058
+ var SortDirection;
7059
+ (function (SortDirection) {
7060
+ SortDirection["ASC"] = "asc";
7061
+ SortDirection["DESC"] = "desc";
7062
+ })(SortDirection || (SortDirection = {}));
7063
+
7064
+ var SortMode;
7065
+ (function (SortMode) {
7066
+ SortMode["MEMORY"] = "memory";
7067
+ SortMode["SERVER"] = "server";
7068
+ })(SortMode || (SortMode = {}));
7069
+
7034
7070
  class TableActionService {
7035
7071
  selectedRowsSubject = new BehaviorSubject([]);
7036
7072
  isModalOpenSubject = new BehaviorSubject(false);
@@ -7191,6 +7227,181 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
7191
7227
  }]
7192
7228
  }] });
7193
7229
 
7230
+ class TableSortService {
7231
+ sortConfigsSubject = new BehaviorSubject([]);
7232
+ tableSortConfig = { mode: SortMode.MEMORY };
7233
+ sortConfigs$ = this.sortConfigsSubject.asObservable();
7234
+ configure(config) {
7235
+ this.tableSortConfig = { ...config };
7236
+ if (config.defaultSort && config.defaultSort.length > 0) {
7237
+ this.sortConfigsSubject.next([...config.defaultSort]);
7238
+ }
7239
+ }
7240
+ getTableSortConfig() {
7241
+ return { ...this.tableSortConfig };
7242
+ }
7243
+ getCurrentSortConfigs() {
7244
+ return [...this.sortConfigsSubject.value];
7245
+ }
7246
+ isColumnSortable(column, row, disabledConfigs = []) {
7247
+ if (!column.sortable) {
7248
+ return false;
7249
+ }
7250
+ if (!row) {
7251
+ return true;
7252
+ }
7253
+ const isDisabled = disabledConfigs.some(config => {
7254
+ if (!config.condition(row)) {
7255
+ return false;
7256
+ }
7257
+ if (!config.columns || config.columns.length === 0) {
7258
+ return true;
7259
+ }
7260
+ return config.columns.includes(column.key);
7261
+ });
7262
+ return !isDisabled;
7263
+ }
7264
+ toggleSort(columnKey) {
7265
+ const currentSorts = this.sortConfigsSubject.value;
7266
+ const existingSort = currentSorts.find(sort => sort.key === columnKey);
7267
+ let newSorts;
7268
+ if (existingSort) {
7269
+ if (existingSort.direction === SortDirection.ASC) {
7270
+ newSorts = currentSorts.map(sort => sort.key === columnKey
7271
+ ? { ...sort, direction: SortDirection.DESC }
7272
+ : sort);
7273
+ }
7274
+ else {
7275
+ newSorts = currentSorts.filter(sort => sort.key !== columnKey);
7276
+ }
7277
+ }
7278
+ else {
7279
+ const newSort = {
7280
+ key: columnKey,
7281
+ direction: SortDirection.ASC,
7282
+ priority: currentSorts.length
7283
+ };
7284
+ if (this.tableSortConfig.multiColumn) {
7285
+ newSorts = [...currentSorts, newSort];
7286
+ }
7287
+ else {
7288
+ newSorts = [newSort];
7289
+ }
7290
+ }
7291
+ newSorts = newSorts.map((sort, index) => ({
7292
+ ...sort,
7293
+ priority: index
7294
+ }));
7295
+ this.sortConfigsSubject.next(newSorts);
7296
+ }
7297
+ setSortConfigs(sortConfigs) {
7298
+ const validSorts = sortConfigs.map((sort, index) => ({
7299
+ ...sort,
7300
+ priority: index
7301
+ }));
7302
+ this.sortConfigsSubject.next(validSorts);
7303
+ }
7304
+ clearSort() {
7305
+ this.sortConfigsSubject.next([]);
7306
+ }
7307
+ getColumnSortState(columnKey) {
7308
+ const sortConfig = this.sortConfigsSubject.value.find(sort => sort.key === columnKey);
7309
+ return sortConfig ? sortConfig.direction : null;
7310
+ }
7311
+ getColumnSortPriority(columnKey) {
7312
+ const sortConfig = this.sortConfigsSubject.value.find(sort => sort.key === columnKey);
7313
+ return sortConfig?.priority ?? null;
7314
+ }
7315
+ sortDataInMemory(data, columns) {
7316
+ const sortConfigs = this.sortConfigsSubject.value;
7317
+ if (sortConfigs.length === 0) {
7318
+ return [...data];
7319
+ }
7320
+ return [...data].sort((a, b) => {
7321
+ if (this.tableSortConfig.customSortFunction) {
7322
+ return this.tableSortConfig.customSortFunction(a, b, sortConfigs);
7323
+ }
7324
+ for (const sortConfig of sortConfigs.sort((x, y) => (x.priority ?? 0) - (y.priority ?? 0))) {
7325
+ const column = columns.find(col => col.key === sortConfig.key || col.sortKey === sortConfig.key);
7326
+ let result = 0;
7327
+ if (column?.sortFunction) {
7328
+ result = column.sortFunction(a, b);
7329
+ }
7330
+ else {
7331
+ const key = column?.sortKey || sortConfig.key;
7332
+ const valueA = this.getNestedValue(a, key);
7333
+ const valueB = this.getNestedValue(b, key);
7334
+ result = this.compareValues(valueA, valueB);
7335
+ }
7336
+ if (result !== 0) {
7337
+ return sortConfig.direction === SortDirection.ASC ? result : -result;
7338
+ }
7339
+ }
7340
+ return 0;
7341
+ });
7342
+ }
7343
+ generateServerSortParams() {
7344
+ const sortConfigs = this.sortConfigsSubject.value;
7345
+ if (sortConfigs.length === 0) {
7346
+ return {};
7347
+ }
7348
+ const paramName = this.tableSortConfig.serverSortParam || 'sort';
7349
+ if (this.tableSortConfig.multiColumn && sortConfigs.length > 1) {
7350
+ const params = {};
7351
+ sortConfigs
7352
+ .sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0))
7353
+ .forEach(sort => {
7354
+ params[`${paramName}[${sort.key}]`] = sort.direction;
7355
+ });
7356
+ return params;
7357
+ }
7358
+ else {
7359
+ const firstSort = sortConfigs[0];
7360
+ return {
7361
+ [`${paramName}[${firstSort.key}]`]: firstSort.direction
7362
+ };
7363
+ }
7364
+ }
7365
+ isServerMode() {
7366
+ return this.tableSortConfig.mode === SortMode.SERVER;
7367
+ }
7368
+ isMultiColumnEnabled() {
7369
+ return this.tableSortConfig.multiColumn ?? false;
7370
+ }
7371
+ getNestedValue(obj, path) {
7372
+ return path.split('.').reduce((value, key) => {
7373
+ return value && value[key] !== undefined ? value[key] : null;
7374
+ }, obj);
7375
+ }
7376
+ compareValues(a, b) {
7377
+ if (a === null || a === undefined)
7378
+ return b === null || b === undefined ? 0 : -1;
7379
+ if (b === null || b === undefined)
7380
+ return 1;
7381
+ if (typeof a === 'number' && typeof b === 'number') {
7382
+ return a - b;
7383
+ }
7384
+ if (a instanceof Date && b instanceof Date) {
7385
+ return a.getTime() - b.getTime();
7386
+ }
7387
+ const strA = String(a).toLowerCase();
7388
+ const strB = String(b).toLowerCase();
7389
+ return strA.localeCompare(strB);
7390
+ }
7391
+ reset() {
7392
+ this.sortConfigsSubject.next([]);
7393
+ this.tableSortConfig = { mode: SortMode.MEMORY };
7394
+ }
7395
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TableSortService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7396
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TableSortService, providedIn: 'root' });
7397
+ }
7398
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TableSortService, decorators: [{
7399
+ type: Injectable,
7400
+ args: [{
7401
+ providedIn: 'root'
7402
+ }]
7403
+ }] });
7404
+
7194
7405
  var HeaderElementType;
7195
7406
  (function (HeaderElementType) {
7196
7407
  HeaderElementType["GLOBAL_ACTIONS"] = "globalActions";
@@ -7918,11 +8129,13 @@ class GenericTableComponent {
7918
8129
  dropdownService = inject(DropdownService);
7919
8130
  headerService = inject(HeaderService);
7920
8131
  inlineEditService = inject((InlineEditService));
8132
+ tableSortService = inject(TableSortService);
7921
8133
  activeFiltersEventService = inject(ActiveFiltersEventService);
7922
8134
  TableAction = TableAction;
7923
8135
  ModalMode = ModalMode;
7924
8136
  ButtonType = ButtonType;
7925
8137
  FieldType = FieldType;
8138
+ SortDirection = SortDirection;
7926
8139
  tableId = `table-${Math.random().toString(36).substring(2, 9)}`;
7927
8140
  columns = input.required();
7928
8141
  modalFields = input([]);
@@ -7955,6 +8168,7 @@ class GenericTableComponent {
7955
8168
  headerOrder = input(undefined);
7956
8169
  showActiveFilters = input(false);
7957
8170
  activeFiltersConfig = input({});
8171
+ sortConfig = input(undefined);
7958
8172
  customEdit = input();
7959
8173
  customDelete = input();
7960
8174
  customView = input();
@@ -8124,6 +8338,12 @@ class GenericTableComponent {
8124
8338
  if (this.isInitialized) {
8125
8339
  return;
8126
8340
  }
8341
+ if (this.sortConfig()) {
8342
+ this.tableSortService.configure(this.sortConfig());
8343
+ }
8344
+ this.subscriptions.push(this.tableSortService.sortConfigs$.subscribe(() => {
8345
+ this.handleSortChange();
8346
+ }));
8127
8347
  this.currentFilterValues.set(new Map(this.filterService.getCustomFilters()));
8128
8348
  this.loaderService.showLoader(this.MAIN_DATA_LOADER_ID);
8129
8349
  this.startLoaderTimeout(this.MAIN_DATA_LOADER_ID);
@@ -8996,6 +9216,91 @@ class GenericTableComponent {
8996
9216
  createButtonConfig: this.createButtonConfig(),
8997
9217
  });
8998
9218
  }
9219
+ onColumnHeaderClick(column) {
9220
+ if (!this.isColumnSortable(column)) {
9221
+ return;
9222
+ }
9223
+ const sortKey = column.sortKey || column.key;
9224
+ this.tableSortService.toggleSort(sortKey);
9225
+ }
9226
+ isColumnSortable(column) {
9227
+ const firstRow = this.displayedData()[0] || null;
9228
+ return this.tableSortService.isColumnSortable(column, firstRow, this.columnDisabledConfigs());
9229
+ }
9230
+ getColumnSortState(column) {
9231
+ const sortKey = column.sortKey || column.key;
9232
+ return this.tableSortService.getColumnSortState(sortKey);
9233
+ }
9234
+ getColumnSortPriority(column) {
9235
+ const sortKey = column.sortKey || column.key;
9236
+ return this.tableSortService.getColumnSortPriority(sortKey);
9237
+ }
9238
+ isMultiColumnSortEnabled() {
9239
+ return this.tableSortService.isMultiColumnEnabled();
9240
+ }
9241
+ getSortButtonTitle(column) {
9242
+ const sortState = this.getColumnSortState(column);
9243
+ const priority = this.getColumnSortPriority(column);
9244
+ if (!sortState) {
9245
+ return `Ordenar por ${column.label}`;
9246
+ }
9247
+ const direction = sortState === SortDirection.ASC ? 'ascendente' : 'descendente';
9248
+ const priorityText = this.isMultiColumnSortEnabled() && priority !== null
9249
+ ? ` (prioridad ${priority + 1})`
9250
+ : '';
9251
+ return `Ordenado por ${column.label} ${direction}${priorityText}. Click para cambiar.`;
9252
+ }
9253
+ handleSortChange() {
9254
+ if (this.tableSortService.isServerMode()) {
9255
+ this.reloadDataWithCurrentParams();
9256
+ }
9257
+ else {
9258
+ this.applySortingInMemory();
9259
+ }
9260
+ }
9261
+ applySortingInMemory() {
9262
+ if (this.endpoint()) {
9263
+ const currentData = this.tableDataService.getCurrentData();
9264
+ if (currentData && Array.isArray(currentData)) {
9265
+ const sortedData = this.tableSortService.sortDataInMemory(currentData, this.columns());
9266
+ this.tableDataService.updateData(sortedData);
9267
+ }
9268
+ }
9269
+ else {
9270
+ const inputData = this.dataInput();
9271
+ if (inputData && inputData.length > 0) {
9272
+ const sortedData = this.tableSortService.sortDataInMemory(inputData, this.columns());
9273
+ this.processDataInput(sortedData);
9274
+ }
9275
+ }
9276
+ }
9277
+ reloadDataWithCurrentParams() {
9278
+ if (!this.endpoint() || !this.modelFactory()) {
9279
+ return;
9280
+ }
9281
+ const filterParams = this.getFilterParams();
9282
+ const sortParams = this.tableSortService.generateServerSortParams();
9283
+ const paginationParams = this.enablePagination()
9284
+ ? this.paginationService.getCurrentPaginationParams(this.tableId)
9285
+ : {};
9286
+ const allParams = {
9287
+ ...this.customParams(),
9288
+ ...filterParams,
9289
+ ...sortParams,
9290
+ ...paginationParams
9291
+ };
9292
+ this.tableDataService.loadDataWithParams(this.endpoint(), this.modelFactory(), allParams, this.MAIN_DATA_LOADER_ID, this.customArrayKey());
9293
+ }
9294
+ getFilterParams() {
9295
+ const filterValues = this.currentFilterValues();
9296
+ const params = {};
9297
+ filterValues.forEach((value, key) => {
9298
+ if (value !== undefined && value !== null && value !== '') {
9299
+ params[key] = value;
9300
+ }
9301
+ });
9302
+ return params;
9303
+ }
8999
9304
  ngOnDestroy() {
9000
9305
  this.subscriptions.forEach(sub => sub.unsubscribe());
9001
9306
  this.inlineEditService.destroy();
@@ -9281,7 +9586,7 @@ class GenericTableComponent {
9281
9586
  this.tableDataService.updateRowData(rowId, updatedFields, updateFunction);
9282
9587
  }
9283
9588
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GenericTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9284
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: GenericTableComponent, isStandalone: true, selector: "core-generic-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, modalFields: { classPropertyName: "modalFields", publicName: "modalFields", isSignal: true, isRequired: false, transformFunction: null }, modalTabs: { classPropertyName: "modalTabs", publicName: "modalTabs", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: true, transformFunction: null }, customActions: { classPropertyName: "customActions", publicName: "customActions", isSignal: true, isRequired: false, transformFunction: null }, globalActions: { classPropertyName: "globalActions", publicName: "globalActions", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, showFilter: { classPropertyName: "showFilter", publicName: "showFilter", isSignal: true, isRequired: false, transformFunction: null }, showSelection: { classPropertyName: "showSelection", publicName: "showSelection", isSignal: true, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, showCreateButton: { classPropertyName: "showCreateButton", publicName: "showCreateButton", isSignal: true, isRequired: false, transformFunction: null }, filterButtonConfig: { classPropertyName: "filterButtonConfig", publicName: "filterButtonConfig", isSignal: true, isRequired: false, transformFunction: null }, createButtonConfig: { classPropertyName: "createButtonConfig", publicName: "createButtonConfig", isSignal: true, isRequired: false, transformFunction: null }, dataInput: { classPropertyName: "dataInput", publicName: "dataInput", isSignal: true, isRequired: false, transformFunction: null }, customFilters: { classPropertyName: "customFilters", publicName: "customFilters", isSignal: true, isRequired: false, transformFunction: null }, enablePagination: { classPropertyName: "enablePagination", publicName: "enablePagination", isSignal: true, isRequired: false, transformFunction: null }, modelFactory: { classPropertyName: "modelFactory", publicName: "modelFactory", isSignal: true, isRequired: false, transformFunction: null }, endpoint: { classPropertyName: "endpoint", publicName: "endpoint", isSignal: true, isRequired: false, transformFunction: null }, customParams: { classPropertyName: "customParams", publicName: "customParams", isSignal: true, isRequired: false, transformFunction: null }, customArrayKey: { classPropertyName: "customArrayKey", publicName: "customArrayKey", isSignal: true, isRequired: false, transformFunction: null }, listTitle: { classPropertyName: "listTitle", publicName: "listTitle", isSignal: true, isRequired: false, transformFunction: null }, moreData: { classPropertyName: "moreData", publicName: "moreData", isSignal: true, isRequired: false, transformFunction: null }, inModal: { classPropertyName: "inModal", publicName: "inModal", isSignal: true, isRequired: false, transformFunction: null }, expansionConfig: { classPropertyName: "expansionConfig", publicName: "expansionConfig", isSignal: true, isRequired: false, transformFunction: null }, fileUploadConfig: { classPropertyName: "fileUploadConfig", publicName: "fileUploadConfig", isSignal: true, isRequired: false, transformFunction: null }, rowStyleConfigs: { classPropertyName: "rowStyleConfigs", publicName: "rowStyleConfigs", isSignal: true, isRequired: false, transformFunction: null }, columnDisabledConfigs: { classPropertyName: "columnDisabledConfigs", publicName: "columnDisabledConfigs", isSignal: true, isRequired: false, transformFunction: null }, rowVisibilityConfigs: { classPropertyName: "rowVisibilityConfigs", publicName: "rowVisibilityConfigs", isSignal: true, isRequired: false, transformFunction: null }, headerOrder: { classPropertyName: "headerOrder", publicName: "headerOrder", isSignal: true, isRequired: false, transformFunction: null }, showActiveFilters: { classPropertyName: "showActiveFilters", publicName: "showActiveFilters", isSignal: true, isRequired: false, transformFunction: null }, activeFiltersConfig: { classPropertyName: "activeFiltersConfig", publicName: "activeFiltersConfig", isSignal: true, isRequired: false, transformFunction: null }, customEdit: { classPropertyName: "customEdit", publicName: "customEdit", isSignal: true, isRequired: false, transformFunction: null }, customDelete: { classPropertyName: "customDelete", publicName: "customDelete", isSignal: true, isRequired: false, transformFunction: null }, customView: { classPropertyName: "customView", publicName: "customView", isSignal: true, isRequired: false, transformFunction: null }, customSave: { classPropertyName: "customSave", publicName: "customSave", isSignal: true, isRequired: false, transformFunction: null }, useCustomSave: { classPropertyName: "useCustomSave", publicName: "useCustomSave", isSignal: true, isRequired: false, transformFunction: null }, onApiError: { classPropertyName: "onApiError", publicName: "onApiError", isSignal: true, isRequired: false, transformFunction: null }, inlineEditConfig: { classPropertyName: "inlineEditConfig", publicName: "inlineEditConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actionTriggered: "actionTriggered", selectionChanged: "selectionChanged", dataCreated: "dataCreated", dataUpdated: "dataUpdated", dataDeleted: "dataDeleted", dataFetched: "dataFetched", onMoreDataLoaded: "onMoreDataLoaded", globalActionTriggered: "globalActionTriggered", modalData: "modalData", beforeSave: "beforeSave", onFilterChange: "onFilterChange", onClearFilters: "onClearFilters", activeFilterRemoved: "activeFilterRemoved", activeFiltersCleared: "activeFiltersCleared", inlineEditSave: "inlineEditSave", inlineEditModeChanged: "inlineEditModeChanged", inlineEditValidationError: "inlineEditValidationError" }, host: { listeners: { "window:beforeunload": "onBeforeUnload($event)", "document:click": "closeSubmenu()" } }, providers: [TableDataService, FilterService, PaginationService, ModelApiService, InlineEditService], viewQueries: [{ propertyName: "sentinel", first: true, predicate: ["sentinel"], descendants: true }, { propertyName: "dropdownTrigger", first: true, predicate: ["dropdownTrigger"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], hostDirectives: [{ directive: CoreHostDirective }], ngImport: i0, template: "@if (showActiveFilters()) {\n <core-active-filters\n [activeFilters]=\"currentActiveFilters()\"\n [config]=\"activeFiltersConfig()\"\n (onFilterRemove)=\"onActiveFilterRemove($event)\"\n (onClearAll)=\"onActiveFiltersClear()\">\n </core-active-filters>\n}\n\n<div class=\"c-table\" [class.in-modal]=\"inModal()\" [class.inline-edit-mode]=\"inlineEditService.isInlineEditMode()\">\n <table>\n <thead>\n <tr>\n @if (showSelection()) {\n <!-- Todo: Tabla con row selection -->\n <th class=\"select-column\">\n <input type=\"checkbox\" [checked]=\"isAllSelected()\" (change)=\"masterToggle()\" />\n </th>\n }\n @for (column of columns(); track $index) {\n <th [ngClass]=\"column.align ? 'u-align-' + column.align : ''\">\n @if (column.sortable !== false) {\n <!-- \u2705 Solcre: Agregado [title] din\u00E1mico y capacidad de volver al estado sin selecci\u00F3n -->\n <button class=\"c-table-order\" tabindex=\"-1\"\n [class.is-asc]=\"currentSortColumn() === column.key && currentSortDirection() === 'asc'\"\n [class.is-desc]=\"currentSortColumn() === column.key && currentSortDirection() === 'desc'\"\n [title]=\"getSortTitle(column) | translate\" (click)=\"sortData(column)\">\n {{ column.label | translate }}\n <span class=\"c-table-order__controls\">\n <span class=\"c-table-order__arrow--desc icon-arrow-up\"></span>\n <span class=\"c-table-order__arrow--asc icon-arrow-down\"></span>\n </span>\n </button>\n <!-- <button \n class=\"c-table__order\" \n [class.is-asc]=\"currentSortColumn() === column.key && currentSortDirection() === 'asc'\" \n [class.is-desc]=\"currentSortColumn() === column.key && currentSortDirection() === 'desc'\"\n (click)=\"sortData(column)\">\n {{ column.label | translate }}\n <span class=\"icon-order-arrow\"></span>\n </button> -->\n } @else {\n {{ column.label | translate }}\n }\n </th>\n }\n @if (showActions() && (actions().length > 0 || customActions().length > 0)) {\n <th class=\"u-align-right\">{{ 'table.actions' | translate }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of displayedData(); track row.getId()) {\n <tr [ngClass]=\"getRowClasses(row)\" \n [class.is-editing-inline]=\"isRowInEditMode(row.getId())\"\n [class.is-disabled]=\"isRowDisabled(row)\">\n @if (showSelection()) {\n <!-- Todo: Tabla con row selection -->\n <td class=\"select-column\">\n <input type=\"checkbox\" [checked]=\"isRowSelected(row)\" (change)=\"toggleRow(row)\" />\n </td>\n }\n @for (column of columns(); track $index) {\n <td [attr.data-label]=\"column.label | translate\" \n [ngClass]=\"[\n column.align ? 'u-align-' + column.align : '',\n getCellDisabledClasses(row, column)\n ]\" \n [class.is-editing]=\"isColumnEditable(column, row)\"\n [class.is-column-disabled]=\"isColumnDisabledForRow(row, column)\">\n @if (column.template) {\n <!-- Todo: Ver qu\u00E9 es esto -->\n <ng-container *ngTemplateOutlet=\"column.template; context: { $implicit: row, column: column }\"></ng-container>\n } @else if (isColumnEditable(column, row)) {\n <!-- !Solcre: Modo de edici\u00F3n en l\u00EDnea usando DynamicField -->\n <div class=\"c-table__inline-edit\">\n <strong class=\"c-table__mobile-heading\">{{ column.label | translate }}:</strong>\n <div\n coreDynamicField\n [field]=\"getInlineEditableConfigWithState(row, column)!\"\n [value]=\"getEditingValue(row, column)\"\n [mode]=\"ModalMode.EDIT\"\n [errors]=\"getCellErrors(row, column)\"\n [rowData]=\"row\"\n (valueChange)=\"onCellValueChange(row, column, $event)\"\n (onBlurEvent)=\"onCellBlur(row, column)\"\n (onEnterEvent)=\"onCellEnter(row, column)\"\n ></div>\n </div>\n } @else {\n <div class=\"c-table__content\">\n <strong class=\"c-table__mobile-heading\">{{ column.label | translate }}:</strong> {{ getFormattedValue(row,\n column) }}\n </div>\n }\n </td>\n }\n\n <!-- Actions-->\n\n @if (showActions() && (actions().length > 0 || customActions().length > 0 || expansionConfig()?.enabled)) {\n\n <td class=\"u-align-right\">\n <div class=\"c-table__actions\">\n <core-dropdown [rowId]=\"row.getId()\" [extraDefaultActions]=\"extraDefaultActions()\"\n [extraCustomActions]=\"getVisibleCustomActions(row, true)\" [row]=\"row\"\n [triggerElementId]=\"'dropdown-trigger-' + row.getId()\"\n (actionTriggered)=\"triggerAction($event.action, $event.row)\"\n (customActionTriggered)=\"triggerCustomAction($event.action, $event.row)\" #dropdown>\n </core-dropdown>\n @for (actionConfig of regularDefaultActions(); track actionConfig.action) {\n @if (hasPermission(actionConfig)) {\n @if (actionConfig.action === TableAction.VIEW || actionConfig.action === TableAction.EDIT ||\n actionConfig.action === TableAction.DELETE) {\n <core-generic-button [config]=\"getActionButtonConfig(actionConfig.action, actionConfig)\"\n (buttonClick)=\"onButtonClick($event, actionConfig.action, row)\">\n </core-generic-button>\n }\n }\n }\n @for (customAction of getVisibleCustomActions(row, false); track customAction.label || $index) {\n @if (hasPermission(customAction)) {\n <core-generic-button [config]=\"getCustomActionButtonConfigForRow(customAction, row)\"\n (buttonClick)=\"onButtonClick($event, customAction, row)\">\n </core-generic-button>\n }\n }\n\n @if (hasExtraActionsForRow(row)) {\n <core-generic-button [config]=\"getMoreActionsButtonConfig(row.getId())\" [data]=\"row\"\n (buttonClick)=\"onMoreActionsClick($event, row.getId())\" #dropdownTrigger>\n </core-generic-button>\n }\n\n @if (expansionConfig()?.enabled) {\n <!-- \u2705 Solcre: Celda dedicada para expansi\u00F3n en su posici\u00F3n correcta -->\n <core-generic-button [config]=\"getExpandButtonConfig(row)\" (buttonClick)=\"onExpandButtonClick($event, row)\">\n </core-generic-button>\n }\n\n </div> <!-- .c-table__actions -->\n </td> <!-- td parent of .c-table__actions -->\n } <!-- @if (showActions() -->\n\n\n </tr>\n @if (expansionConfig()?.enabled && isRowExpanded(row)) {\n <!-- Todo: Ver que es esto -->\n <tr class=\"expansion-row\" [ngClass]=\"getRowClasses(row)\">\n <td [attr.colspan]=\"displayedColumns().length\" class=\"expansion-content\">\n <ng-container *ngTemplateOutlet=\"expansionConfig()!.template; context: { $implicit: row }\">\n </ng-container>\n </td>\n </tr>\n }\n } @empty {\n <tr>\n <!-- Todo: Estilo .no-data -->\n <td [attr.colspan]=\"displayedColumns().length\">\n <p class=\"c-placeholder\">{{ 'table.noData' | translate }}</p>\n </td>\n </tr>\n }\n </tbody>\n </table>\n</div> <!-- .c-table -->\n\n<!-- Todo: Todo lo que viene dsp de la tabla -->\n\n@if (!enablePagination()) {\n<!-- Todo: Ver qu\u00E9 onda esto -->\n<div #sentinel class=\"sentinel\"></div>\n}\n\n@if (enablePagination()) {\n<!-- Todo: Ver qu\u00E9 onda esto -->\n<core-generic-pagination [tableId]=\"tableId\"></core-generic-pagination>\n}\n\n<core-generic-modal [isOpen]=\"tableActionService.getIsModalOpen()\" [mode]=\"tableActionService.getModalMode()\"\n [data]=\"tableActionService.getModalData()\" [fields]=\"hasTabs() ? [] : tableActionService.getModalFieldsToShow()\"\n [tabs]=\"hasTabs() ? modalTabs() : []\" [title]=\"tableActionService.getModalTitle()\" [modelFactory]=\"modelFactory() || null\"\n (save)=\"onModalSave($event)\" (close)=\"tableActionService.closeModal()\" (modalData)=\"onModalData($event)\">\n</core-generic-modal>\n\n<core-filter-modal [isOpen]=\"isFilterModalOpen()\" [filters]=\"customFilters()\" [currentFilterValues]=\"currentFilterValues()\" (close)=\"closeFiltersPopup()\"\n (filterChange)=\"handleFilterChange($event)\" (globalFilterChange)=\"applyGlobalFilter($event)\"\n (clearFilters)=\"handleClearFilters()\">\n</core-filter-modal>", styles: [".in-modal .c-table thead th:last-child,.c-table tbody td:last-child{text-align:left}.c-table__order-btn--asc{transform:rotate(180deg)}.c-table__order-btn--desc{transform:rotate(0)}.c-table tr.is-editing-inline{background-color:#fff3cd;border-left:3px solid #ffc107}.c-table tr.is-editing-inline td{background-color:#fff3cd}.c-table tr.is-editing-inline:hover td{background-color:#ffecb5}.expansion-row .expansion-content{padding:16px;background-color:#f8f9fa;border-top:1px solid #dee2e6}.expansion-row td{border-bottom:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: GenericModalComponent, selector: "core-generic-modal", inputs: ["isOpen", "mode", "data", "fields", "tabs", "title", "isMultiple", "customTemplate", "customViewTemplate", "buttonConfig", "modelFactory", "errors", "validators"], outputs: ["save", "close", "modalData"] }, { kind: "component", type: GenericPaginationComponent, selector: "core-generic-pagination", inputs: ["tableId", "isServerSide"] }, { kind: "component", type: DropdownComponent, selector: "core-dropdown", inputs: ["rowId", "triggerElementId", "extraDefaultActions", "extraCustomActions", "row"], outputs: ["actionTriggered", "customActionTriggered"] }, { kind: "component", type: FilterModalComponent, selector: "core-filter-modal", inputs: ["isOpen", "filters", "currentFilterValues"], outputs: ["close", "filterChange", "clearFilters", "globalFilterChange"] }, { kind: "component", type: GenericButtonComponent, selector: "core-generic-button", inputs: ["config", "data"], outputs: ["buttonClick"] }, { kind: "directive", type: DynamicFieldDirective, selector: "[coreDynamicField]", inputs: ["field", "value", "mode", "errors", "rowData", "formValue"], outputs: ["valueChange", "onBlurEvent", "onEnterEvent", "selectionChange"] }, { kind: "component", type: ActiveFiltersComponent, selector: "core-active-filters", inputs: ["activeFilters", "config"], outputs: ["onFilterRemove", "onClearAll"] }] });
9589
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: GenericTableComponent, isStandalone: true, selector: "core-generic-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, modalFields: { classPropertyName: "modalFields", publicName: "modalFields", isSignal: true, isRequired: false, transformFunction: null }, modalTabs: { classPropertyName: "modalTabs", publicName: "modalTabs", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: true, transformFunction: null }, customActions: { classPropertyName: "customActions", publicName: "customActions", isSignal: true, isRequired: false, transformFunction: null }, globalActions: { classPropertyName: "globalActions", publicName: "globalActions", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, showFilter: { classPropertyName: "showFilter", publicName: "showFilter", isSignal: true, isRequired: false, transformFunction: null }, showSelection: { classPropertyName: "showSelection", publicName: "showSelection", isSignal: true, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, showCreateButton: { classPropertyName: "showCreateButton", publicName: "showCreateButton", isSignal: true, isRequired: false, transformFunction: null }, filterButtonConfig: { classPropertyName: "filterButtonConfig", publicName: "filterButtonConfig", isSignal: true, isRequired: false, transformFunction: null }, createButtonConfig: { classPropertyName: "createButtonConfig", publicName: "createButtonConfig", isSignal: true, isRequired: false, transformFunction: null }, dataInput: { classPropertyName: "dataInput", publicName: "dataInput", isSignal: true, isRequired: false, transformFunction: null }, customFilters: { classPropertyName: "customFilters", publicName: "customFilters", isSignal: true, isRequired: false, transformFunction: null }, enablePagination: { classPropertyName: "enablePagination", publicName: "enablePagination", isSignal: true, isRequired: false, transformFunction: null }, modelFactory: { classPropertyName: "modelFactory", publicName: "modelFactory", isSignal: true, isRequired: false, transformFunction: null }, endpoint: { classPropertyName: "endpoint", publicName: "endpoint", isSignal: true, isRequired: false, transformFunction: null }, customParams: { classPropertyName: "customParams", publicName: "customParams", isSignal: true, isRequired: false, transformFunction: null }, customArrayKey: { classPropertyName: "customArrayKey", publicName: "customArrayKey", isSignal: true, isRequired: false, transformFunction: null }, listTitle: { classPropertyName: "listTitle", publicName: "listTitle", isSignal: true, isRequired: false, transformFunction: null }, moreData: { classPropertyName: "moreData", publicName: "moreData", isSignal: true, isRequired: false, transformFunction: null }, inModal: { classPropertyName: "inModal", publicName: "inModal", isSignal: true, isRequired: false, transformFunction: null }, expansionConfig: { classPropertyName: "expansionConfig", publicName: "expansionConfig", isSignal: true, isRequired: false, transformFunction: null }, fileUploadConfig: { classPropertyName: "fileUploadConfig", publicName: "fileUploadConfig", isSignal: true, isRequired: false, transformFunction: null }, rowStyleConfigs: { classPropertyName: "rowStyleConfigs", publicName: "rowStyleConfigs", isSignal: true, isRequired: false, transformFunction: null }, columnDisabledConfigs: { classPropertyName: "columnDisabledConfigs", publicName: "columnDisabledConfigs", isSignal: true, isRequired: false, transformFunction: null }, rowVisibilityConfigs: { classPropertyName: "rowVisibilityConfigs", publicName: "rowVisibilityConfigs", isSignal: true, isRequired: false, transformFunction: null }, headerOrder: { classPropertyName: "headerOrder", publicName: "headerOrder", isSignal: true, isRequired: false, transformFunction: null }, showActiveFilters: { classPropertyName: "showActiveFilters", publicName: "showActiveFilters", isSignal: true, isRequired: false, transformFunction: null }, activeFiltersConfig: { classPropertyName: "activeFiltersConfig", publicName: "activeFiltersConfig", isSignal: true, isRequired: false, transformFunction: null }, sortConfig: { classPropertyName: "sortConfig", publicName: "sortConfig", isSignal: true, isRequired: false, transformFunction: null }, customEdit: { classPropertyName: "customEdit", publicName: "customEdit", isSignal: true, isRequired: false, transformFunction: null }, customDelete: { classPropertyName: "customDelete", publicName: "customDelete", isSignal: true, isRequired: false, transformFunction: null }, customView: { classPropertyName: "customView", publicName: "customView", isSignal: true, isRequired: false, transformFunction: null }, customSave: { classPropertyName: "customSave", publicName: "customSave", isSignal: true, isRequired: false, transformFunction: null }, useCustomSave: { classPropertyName: "useCustomSave", publicName: "useCustomSave", isSignal: true, isRequired: false, transformFunction: null }, onApiError: { classPropertyName: "onApiError", publicName: "onApiError", isSignal: true, isRequired: false, transformFunction: null }, inlineEditConfig: { classPropertyName: "inlineEditConfig", publicName: "inlineEditConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actionTriggered: "actionTriggered", selectionChanged: "selectionChanged", dataCreated: "dataCreated", dataUpdated: "dataUpdated", dataDeleted: "dataDeleted", dataFetched: "dataFetched", onMoreDataLoaded: "onMoreDataLoaded", globalActionTriggered: "globalActionTriggered", modalData: "modalData", beforeSave: "beforeSave", onFilterChange: "onFilterChange", onClearFilters: "onClearFilters", activeFilterRemoved: "activeFilterRemoved", activeFiltersCleared: "activeFiltersCleared", inlineEditSave: "inlineEditSave", inlineEditModeChanged: "inlineEditModeChanged", inlineEditValidationError: "inlineEditValidationError" }, host: { listeners: { "window:beforeunload": "onBeforeUnload($event)", "document:click": "closeSubmenu()" } }, providers: [TableDataService, FilterService, PaginationService, ModelApiService, InlineEditService], viewQueries: [{ propertyName: "sentinel", first: true, predicate: ["sentinel"], descendants: true }, { propertyName: "dropdownTrigger", first: true, predicate: ["dropdownTrigger"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], hostDirectives: [{ directive: CoreHostDirective }], ngImport: i0, template: "@if (showActiveFilters()) {\n <core-active-filters\n [activeFilters]=\"currentActiveFilters()\"\n [config]=\"activeFiltersConfig()\"\n (onFilterRemove)=\"onActiveFilterRemove($event)\"\n (onClearAll)=\"onActiveFiltersClear()\">\n </core-active-filters>\n}\n\n<div class=\"c-table\" [class.in-modal]=\"inModal()\" [class.inline-edit-mode]=\"inlineEditService.isInlineEditMode()\">\n <table>\n <thead>\n <tr>\n @if (showSelection()) {\n <!-- Todo: Tabla con row selection -->\n <th class=\"select-column\">\n <input type=\"checkbox\" [checked]=\"isAllSelected()\" (change)=\"masterToggle()\" />\n </th>\n }\n @for (column of columns(); track $index) {\n <th [ngClass]=\"column.align ? 'u-align-' + column.align : ''\">\n @if (isColumnSortable(column)) {\n <!-- Nuevo sistema de sorting con soporte para m\u00FAltiples columnas -->\n <button class=\"c-table-order\" tabindex=\"-1\"\n [class.is-asc]=\"getColumnSortState(column) === SortDirection.ASC\"\n [class.is-desc]=\"getColumnSortState(column) === SortDirection.DESC\"\n [class.has-multiple-sorts]=\"isMultiColumnSortEnabled() && getColumnSortPriority(column) !== null\"\n [title]=\"getSortButtonTitle(column)\"\n (click)=\"onColumnHeaderClick(column)\">\n {{ column.label | translate }}\n @if (isMultiColumnSortEnabled() && getColumnSortPriority(column) !== null) {\n <span class=\"c-table-order__priority\">{{ getColumnSortPriority(column)! + 1 }}</span>\n }\n <span class=\"c-table-order__controls\">\n <span class=\"c-table-order__arrow--desc icon-arrow-up\"></span>\n <span class=\"c-table-order__arrow--asc icon-arrow-down\"></span>\n </span>\n </button>\n } @else {\n {{ column.label | translate }}\n }\n </th>\n }\n @if (showActions() && (actions().length > 0 || customActions().length > 0)) {\n <th class=\"u-align-right\">{{ 'table.actions' | translate }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of displayedData(); track row.getId()) {\n <tr [ngClass]=\"getRowClasses(row)\" \n [class.is-editing-inline]=\"isRowInEditMode(row.getId())\"\n [class.is-disabled]=\"isRowDisabled(row)\">\n @if (showSelection()) {\n <!-- Todo: Tabla con row selection -->\n <td class=\"select-column\">\n <input type=\"checkbox\" [checked]=\"isRowSelected(row)\" (change)=\"toggleRow(row)\" />\n </td>\n }\n @for (column of columns(); track $index) {\n <td [attr.data-label]=\"column.label | translate\" \n [ngClass]=\"[\n column.align ? 'u-align-' + column.align : '',\n getCellDisabledClasses(row, column)\n ]\" \n [class.is-editing]=\"isColumnEditable(column, row)\"\n [class.is-column-disabled]=\"isColumnDisabledForRow(row, column)\">\n @if (column.template) {\n <!-- Todo: Ver qu\u00E9 es esto -->\n <ng-container *ngTemplateOutlet=\"column.template; context: { $implicit: row, column: column }\"></ng-container>\n } @else if (isColumnEditable(column, row)) {\n <!-- !Solcre: Modo de edici\u00F3n en l\u00EDnea usando DynamicField -->\n <div class=\"c-table__inline-edit\">\n <strong class=\"c-table__mobile-heading\">{{ column.label | translate }}:</strong>\n <div\n coreDynamicField\n [field]=\"getInlineEditableConfigWithState(row, column)!\"\n [value]=\"getEditingValue(row, column)\"\n [mode]=\"ModalMode.EDIT\"\n [errors]=\"getCellErrors(row, column)\"\n [rowData]=\"row\"\n (valueChange)=\"onCellValueChange(row, column, $event)\"\n (onBlurEvent)=\"onCellBlur(row, column)\"\n (onEnterEvent)=\"onCellEnter(row, column)\"\n ></div>\n </div>\n } @else {\n <div class=\"c-table__content\">\n <strong class=\"c-table__mobile-heading\">{{ column.label | translate }}:</strong> {{ getFormattedValue(row,\n column) }}\n </div>\n }\n </td>\n }\n\n <!-- Actions-->\n\n @if (showActions() && (actions().length > 0 || customActions().length > 0 || expansionConfig()?.enabled)) {\n\n <td class=\"u-align-right\">\n <div class=\"c-table__actions\">\n <core-dropdown [rowId]=\"row.getId()\" [extraDefaultActions]=\"extraDefaultActions()\"\n [extraCustomActions]=\"getVisibleCustomActions(row, true)\" [row]=\"row\"\n [triggerElementId]=\"'dropdown-trigger-' + row.getId()\"\n (actionTriggered)=\"triggerAction($event.action, $event.row)\"\n (customActionTriggered)=\"triggerCustomAction($event.action, $event.row)\" #dropdown>\n </core-dropdown>\n @for (actionConfig of regularDefaultActions(); track actionConfig.action) {\n @if (hasPermission(actionConfig)) {\n @if (actionConfig.action === TableAction.VIEW || actionConfig.action === TableAction.EDIT ||\n actionConfig.action === TableAction.DELETE) {\n <core-generic-button [config]=\"getActionButtonConfig(actionConfig.action, actionConfig)\"\n (buttonClick)=\"onButtonClick($event, actionConfig.action, row)\">\n </core-generic-button>\n }\n }\n }\n @for (customAction of getVisibleCustomActions(row, false); track customAction.label || $index) {\n @if (hasPermission(customAction)) {\n <core-generic-button [config]=\"getCustomActionButtonConfigForRow(customAction, row)\"\n (buttonClick)=\"onButtonClick($event, customAction, row)\">\n </core-generic-button>\n }\n }\n\n @if (hasExtraActionsForRow(row)) {\n <core-generic-button [config]=\"getMoreActionsButtonConfig(row.getId())\" [data]=\"row\"\n (buttonClick)=\"onMoreActionsClick($event, row.getId())\" #dropdownTrigger>\n </core-generic-button>\n }\n\n @if (expansionConfig()?.enabled) {\n <!-- \u2705 Solcre: Celda dedicada para expansi\u00F3n en su posici\u00F3n correcta -->\n <core-generic-button [config]=\"getExpandButtonConfig(row)\" (buttonClick)=\"onExpandButtonClick($event, row)\">\n </core-generic-button>\n }\n\n </div> <!-- .c-table__actions -->\n </td> <!-- td parent of .c-table__actions -->\n } <!-- @if (showActions() -->\n\n\n </tr>\n @if (expansionConfig()?.enabled && isRowExpanded(row)) {\n <!-- Todo: Ver que es esto -->\n <tr class=\"expansion-row\" [ngClass]=\"getRowClasses(row)\">\n <td [attr.colspan]=\"displayedColumns().length\" class=\"expansion-content\">\n <ng-container *ngTemplateOutlet=\"expansionConfig()!.template; context: { $implicit: row }\">\n </ng-container>\n </td>\n </tr>\n }\n } @empty {\n <tr>\n <!-- Todo: Estilo .no-data -->\n <td [attr.colspan]=\"displayedColumns().length\">\n <p class=\"c-placeholder\">{{ 'table.noData' | translate }}</p>\n </td>\n </tr>\n }\n </tbody>\n </table>\n</div> <!-- .c-table -->\n\n<!-- Todo: Todo lo que viene dsp de la tabla -->\n\n@if (!enablePagination()) {\n<!-- Todo: Ver qu\u00E9 onda esto -->\n<div #sentinel class=\"sentinel\"></div>\n}\n\n@if (enablePagination()) {\n<!-- Todo: Ver qu\u00E9 onda esto -->\n<core-generic-pagination [tableId]=\"tableId\"></core-generic-pagination>\n}\n\n<core-generic-modal [isOpen]=\"tableActionService.getIsModalOpen()\" [mode]=\"tableActionService.getModalMode()\"\n [data]=\"tableActionService.getModalData()\" [fields]=\"hasTabs() ? [] : tableActionService.getModalFieldsToShow()\"\n [tabs]=\"hasTabs() ? modalTabs() : []\" [title]=\"tableActionService.getModalTitle()\" [modelFactory]=\"modelFactory() || null\"\n (save)=\"onModalSave($event)\" (close)=\"tableActionService.closeModal()\" (modalData)=\"onModalData($event)\">\n</core-generic-modal>\n\n<core-filter-modal [isOpen]=\"isFilterModalOpen()\" [filters]=\"customFilters()\" [currentFilterValues]=\"currentFilterValues()\" (close)=\"closeFiltersPopup()\"\n (filterChange)=\"handleFilterChange($event)\" (globalFilterChange)=\"applyGlobalFilter($event)\"\n (clearFilters)=\"handleClearFilters()\">\n</core-filter-modal>", styles: [".in-modal .c-table thead th:last-child,.c-table tbody td:last-child{text-align:left}.c-table__order-btn--asc{transform:rotate(180deg)}.c-table__order-btn--desc{transform:rotate(0)}.c-table tr.is-editing-inline{background-color:#fff3cd;border-left:3px solid #ffc107}.c-table tr.is-editing-inline td{background-color:#fff3cd}.c-table tr.is-editing-inline:hover td{background-color:#ffecb5}.expansion-row .expansion-content{padding:16px;background-color:#f8f9fa;border-top:1px solid #dee2e6}.expansion-row td{border-bottom:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: GenericModalComponent, selector: "core-generic-modal", inputs: ["isOpen", "mode", "data", "fields", "tabs", "title", "isMultiple", "customTemplate", "customViewTemplate", "buttonConfig", "modelFactory", "errors", "validators"], outputs: ["save", "close", "modalData"] }, { kind: "component", type: GenericPaginationComponent, selector: "core-generic-pagination", inputs: ["tableId", "isServerSide"] }, { kind: "component", type: DropdownComponent, selector: "core-dropdown", inputs: ["rowId", "triggerElementId", "extraDefaultActions", "extraCustomActions", "row"], outputs: ["actionTriggered", "customActionTriggered"] }, { kind: "component", type: FilterModalComponent, selector: "core-filter-modal", inputs: ["isOpen", "filters", "currentFilterValues"], outputs: ["close", "filterChange", "clearFilters", "globalFilterChange"] }, { kind: "component", type: GenericButtonComponent, selector: "core-generic-button", inputs: ["config", "data"], outputs: ["buttonClick"] }, { kind: "directive", type: DynamicFieldDirective, selector: "[coreDynamicField]", inputs: ["field", "value", "mode", "errors", "rowData", "formValue"], outputs: ["valueChange", "onBlurEvent", "onEnterEvent", "selectionChange"] }, { kind: "component", type: ActiveFiltersComponent, selector: "core-active-filters", inputs: ["activeFilters", "config"], outputs: ["onFilterRemove", "onClearAll"] }] });
9285
9590
  }
9286
9591
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GenericTableComponent, decorators: [{
9287
9592
  type: Component,
@@ -9295,7 +9600,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
9295
9600
  GenericButtonComponent,
9296
9601
  DynamicFieldDirective,
9297
9602
  ActiveFiltersComponent,
9298
- ], hostDirectives: [CoreHostDirective], providers: [TableDataService, FilterService, PaginationService, ModelApiService, InlineEditService], template: "@if (showActiveFilters()) {\n <core-active-filters\n [activeFilters]=\"currentActiveFilters()\"\n [config]=\"activeFiltersConfig()\"\n (onFilterRemove)=\"onActiveFilterRemove($event)\"\n (onClearAll)=\"onActiveFiltersClear()\">\n </core-active-filters>\n}\n\n<div class=\"c-table\" [class.in-modal]=\"inModal()\" [class.inline-edit-mode]=\"inlineEditService.isInlineEditMode()\">\n <table>\n <thead>\n <tr>\n @if (showSelection()) {\n <!-- Todo: Tabla con row selection -->\n <th class=\"select-column\">\n <input type=\"checkbox\" [checked]=\"isAllSelected()\" (change)=\"masterToggle()\" />\n </th>\n }\n @for (column of columns(); track $index) {\n <th [ngClass]=\"column.align ? 'u-align-' + column.align : ''\">\n @if (column.sortable !== false) {\n <!-- \u2705 Solcre: Agregado [title] din\u00E1mico y capacidad de volver al estado sin selecci\u00F3n -->\n <button class=\"c-table-order\" tabindex=\"-1\"\n [class.is-asc]=\"currentSortColumn() === column.key && currentSortDirection() === 'asc'\"\n [class.is-desc]=\"currentSortColumn() === column.key && currentSortDirection() === 'desc'\"\n [title]=\"getSortTitle(column) | translate\" (click)=\"sortData(column)\">\n {{ column.label | translate }}\n <span class=\"c-table-order__controls\">\n <span class=\"c-table-order__arrow--desc icon-arrow-up\"></span>\n <span class=\"c-table-order__arrow--asc icon-arrow-down\"></span>\n </span>\n </button>\n <!-- <button \n class=\"c-table__order\" \n [class.is-asc]=\"currentSortColumn() === column.key && currentSortDirection() === 'asc'\" \n [class.is-desc]=\"currentSortColumn() === column.key && currentSortDirection() === 'desc'\"\n (click)=\"sortData(column)\">\n {{ column.label | translate }}\n <span class=\"icon-order-arrow\"></span>\n </button> -->\n } @else {\n {{ column.label | translate }}\n }\n </th>\n }\n @if (showActions() && (actions().length > 0 || customActions().length > 0)) {\n <th class=\"u-align-right\">{{ 'table.actions' | translate }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of displayedData(); track row.getId()) {\n <tr [ngClass]=\"getRowClasses(row)\" \n [class.is-editing-inline]=\"isRowInEditMode(row.getId())\"\n [class.is-disabled]=\"isRowDisabled(row)\">\n @if (showSelection()) {\n <!-- Todo: Tabla con row selection -->\n <td class=\"select-column\">\n <input type=\"checkbox\" [checked]=\"isRowSelected(row)\" (change)=\"toggleRow(row)\" />\n </td>\n }\n @for (column of columns(); track $index) {\n <td [attr.data-label]=\"column.label | translate\" \n [ngClass]=\"[\n column.align ? 'u-align-' + column.align : '',\n getCellDisabledClasses(row, column)\n ]\" \n [class.is-editing]=\"isColumnEditable(column, row)\"\n [class.is-column-disabled]=\"isColumnDisabledForRow(row, column)\">\n @if (column.template) {\n <!-- Todo: Ver qu\u00E9 es esto -->\n <ng-container *ngTemplateOutlet=\"column.template; context: { $implicit: row, column: column }\"></ng-container>\n } @else if (isColumnEditable(column, row)) {\n <!-- !Solcre: Modo de edici\u00F3n en l\u00EDnea usando DynamicField -->\n <div class=\"c-table__inline-edit\">\n <strong class=\"c-table__mobile-heading\">{{ column.label | translate }}:</strong>\n <div\n coreDynamicField\n [field]=\"getInlineEditableConfigWithState(row, column)!\"\n [value]=\"getEditingValue(row, column)\"\n [mode]=\"ModalMode.EDIT\"\n [errors]=\"getCellErrors(row, column)\"\n [rowData]=\"row\"\n (valueChange)=\"onCellValueChange(row, column, $event)\"\n (onBlurEvent)=\"onCellBlur(row, column)\"\n (onEnterEvent)=\"onCellEnter(row, column)\"\n ></div>\n </div>\n } @else {\n <div class=\"c-table__content\">\n <strong class=\"c-table__mobile-heading\">{{ column.label | translate }}:</strong> {{ getFormattedValue(row,\n column) }}\n </div>\n }\n </td>\n }\n\n <!-- Actions-->\n\n @if (showActions() && (actions().length > 0 || customActions().length > 0 || expansionConfig()?.enabled)) {\n\n <td class=\"u-align-right\">\n <div class=\"c-table__actions\">\n <core-dropdown [rowId]=\"row.getId()\" [extraDefaultActions]=\"extraDefaultActions()\"\n [extraCustomActions]=\"getVisibleCustomActions(row, true)\" [row]=\"row\"\n [triggerElementId]=\"'dropdown-trigger-' + row.getId()\"\n (actionTriggered)=\"triggerAction($event.action, $event.row)\"\n (customActionTriggered)=\"triggerCustomAction($event.action, $event.row)\" #dropdown>\n </core-dropdown>\n @for (actionConfig of regularDefaultActions(); track actionConfig.action) {\n @if (hasPermission(actionConfig)) {\n @if (actionConfig.action === TableAction.VIEW || actionConfig.action === TableAction.EDIT ||\n actionConfig.action === TableAction.DELETE) {\n <core-generic-button [config]=\"getActionButtonConfig(actionConfig.action, actionConfig)\"\n (buttonClick)=\"onButtonClick($event, actionConfig.action, row)\">\n </core-generic-button>\n }\n }\n }\n @for (customAction of getVisibleCustomActions(row, false); track customAction.label || $index) {\n @if (hasPermission(customAction)) {\n <core-generic-button [config]=\"getCustomActionButtonConfigForRow(customAction, row)\"\n (buttonClick)=\"onButtonClick($event, customAction, row)\">\n </core-generic-button>\n }\n }\n\n @if (hasExtraActionsForRow(row)) {\n <core-generic-button [config]=\"getMoreActionsButtonConfig(row.getId())\" [data]=\"row\"\n (buttonClick)=\"onMoreActionsClick($event, row.getId())\" #dropdownTrigger>\n </core-generic-button>\n }\n\n @if (expansionConfig()?.enabled) {\n <!-- \u2705 Solcre: Celda dedicada para expansi\u00F3n en su posici\u00F3n correcta -->\n <core-generic-button [config]=\"getExpandButtonConfig(row)\" (buttonClick)=\"onExpandButtonClick($event, row)\">\n </core-generic-button>\n }\n\n </div> <!-- .c-table__actions -->\n </td> <!-- td parent of .c-table__actions -->\n } <!-- @if (showActions() -->\n\n\n </tr>\n @if (expansionConfig()?.enabled && isRowExpanded(row)) {\n <!-- Todo: Ver que es esto -->\n <tr class=\"expansion-row\" [ngClass]=\"getRowClasses(row)\">\n <td [attr.colspan]=\"displayedColumns().length\" class=\"expansion-content\">\n <ng-container *ngTemplateOutlet=\"expansionConfig()!.template; context: { $implicit: row }\">\n </ng-container>\n </td>\n </tr>\n }\n } @empty {\n <tr>\n <!-- Todo: Estilo .no-data -->\n <td [attr.colspan]=\"displayedColumns().length\">\n <p class=\"c-placeholder\">{{ 'table.noData' | translate }}</p>\n </td>\n </tr>\n }\n </tbody>\n </table>\n</div> <!-- .c-table -->\n\n<!-- Todo: Todo lo que viene dsp de la tabla -->\n\n@if (!enablePagination()) {\n<!-- Todo: Ver qu\u00E9 onda esto -->\n<div #sentinel class=\"sentinel\"></div>\n}\n\n@if (enablePagination()) {\n<!-- Todo: Ver qu\u00E9 onda esto -->\n<core-generic-pagination [tableId]=\"tableId\"></core-generic-pagination>\n}\n\n<core-generic-modal [isOpen]=\"tableActionService.getIsModalOpen()\" [mode]=\"tableActionService.getModalMode()\"\n [data]=\"tableActionService.getModalData()\" [fields]=\"hasTabs() ? [] : tableActionService.getModalFieldsToShow()\"\n [tabs]=\"hasTabs() ? modalTabs() : []\" [title]=\"tableActionService.getModalTitle()\" [modelFactory]=\"modelFactory() || null\"\n (save)=\"onModalSave($event)\" (close)=\"tableActionService.closeModal()\" (modalData)=\"onModalData($event)\">\n</core-generic-modal>\n\n<core-filter-modal [isOpen]=\"isFilterModalOpen()\" [filters]=\"customFilters()\" [currentFilterValues]=\"currentFilterValues()\" (close)=\"closeFiltersPopup()\"\n (filterChange)=\"handleFilterChange($event)\" (globalFilterChange)=\"applyGlobalFilter($event)\"\n (clearFilters)=\"handleClearFilters()\">\n</core-filter-modal>", styles: [".in-modal .c-table thead th:last-child,.c-table tbody td:last-child{text-align:left}.c-table__order-btn--asc{transform:rotate(180deg)}.c-table__order-btn--desc{transform:rotate(0)}.c-table tr.is-editing-inline{background-color:#fff3cd;border-left:3px solid #ffc107}.c-table tr.is-editing-inline td{background-color:#fff3cd}.c-table tr.is-editing-inline:hover td{background-color:#ffecb5}.expansion-row .expansion-content{padding:16px;background-color:#f8f9fa;border-top:1px solid #dee2e6}.expansion-row td{border-bottom:none}\n"] }]
9603
+ ], hostDirectives: [CoreHostDirective], providers: [TableDataService, FilterService, PaginationService, ModelApiService, InlineEditService], template: "@if (showActiveFilters()) {\n <core-active-filters\n [activeFilters]=\"currentActiveFilters()\"\n [config]=\"activeFiltersConfig()\"\n (onFilterRemove)=\"onActiveFilterRemove($event)\"\n (onClearAll)=\"onActiveFiltersClear()\">\n </core-active-filters>\n}\n\n<div class=\"c-table\" [class.in-modal]=\"inModal()\" [class.inline-edit-mode]=\"inlineEditService.isInlineEditMode()\">\n <table>\n <thead>\n <tr>\n @if (showSelection()) {\n <!-- Todo: Tabla con row selection -->\n <th class=\"select-column\">\n <input type=\"checkbox\" [checked]=\"isAllSelected()\" (change)=\"masterToggle()\" />\n </th>\n }\n @for (column of columns(); track $index) {\n <th [ngClass]=\"column.align ? 'u-align-' + column.align : ''\">\n @if (isColumnSortable(column)) {\n <!-- Nuevo sistema de sorting con soporte para m\u00FAltiples columnas -->\n <button class=\"c-table-order\" tabindex=\"-1\"\n [class.is-asc]=\"getColumnSortState(column) === SortDirection.ASC\"\n [class.is-desc]=\"getColumnSortState(column) === SortDirection.DESC\"\n [class.has-multiple-sorts]=\"isMultiColumnSortEnabled() && getColumnSortPriority(column) !== null\"\n [title]=\"getSortButtonTitle(column)\"\n (click)=\"onColumnHeaderClick(column)\">\n {{ column.label | translate }}\n @if (isMultiColumnSortEnabled() && getColumnSortPriority(column) !== null) {\n <span class=\"c-table-order__priority\">{{ getColumnSortPriority(column)! + 1 }}</span>\n }\n <span class=\"c-table-order__controls\">\n <span class=\"c-table-order__arrow--desc icon-arrow-up\"></span>\n <span class=\"c-table-order__arrow--asc icon-arrow-down\"></span>\n </span>\n </button>\n } @else {\n {{ column.label | translate }}\n }\n </th>\n }\n @if (showActions() && (actions().length > 0 || customActions().length > 0)) {\n <th class=\"u-align-right\">{{ 'table.actions' | translate }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of displayedData(); track row.getId()) {\n <tr [ngClass]=\"getRowClasses(row)\" \n [class.is-editing-inline]=\"isRowInEditMode(row.getId())\"\n [class.is-disabled]=\"isRowDisabled(row)\">\n @if (showSelection()) {\n <!-- Todo: Tabla con row selection -->\n <td class=\"select-column\">\n <input type=\"checkbox\" [checked]=\"isRowSelected(row)\" (change)=\"toggleRow(row)\" />\n </td>\n }\n @for (column of columns(); track $index) {\n <td [attr.data-label]=\"column.label | translate\" \n [ngClass]=\"[\n column.align ? 'u-align-' + column.align : '',\n getCellDisabledClasses(row, column)\n ]\" \n [class.is-editing]=\"isColumnEditable(column, row)\"\n [class.is-column-disabled]=\"isColumnDisabledForRow(row, column)\">\n @if (column.template) {\n <!-- Todo: Ver qu\u00E9 es esto -->\n <ng-container *ngTemplateOutlet=\"column.template; context: { $implicit: row, column: column }\"></ng-container>\n } @else if (isColumnEditable(column, row)) {\n <!-- !Solcre: Modo de edici\u00F3n en l\u00EDnea usando DynamicField -->\n <div class=\"c-table__inline-edit\">\n <strong class=\"c-table__mobile-heading\">{{ column.label | translate }}:</strong>\n <div\n coreDynamicField\n [field]=\"getInlineEditableConfigWithState(row, column)!\"\n [value]=\"getEditingValue(row, column)\"\n [mode]=\"ModalMode.EDIT\"\n [errors]=\"getCellErrors(row, column)\"\n [rowData]=\"row\"\n (valueChange)=\"onCellValueChange(row, column, $event)\"\n (onBlurEvent)=\"onCellBlur(row, column)\"\n (onEnterEvent)=\"onCellEnter(row, column)\"\n ></div>\n </div>\n } @else {\n <div class=\"c-table__content\">\n <strong class=\"c-table__mobile-heading\">{{ column.label | translate }}:</strong> {{ getFormattedValue(row,\n column) }}\n </div>\n }\n </td>\n }\n\n <!-- Actions-->\n\n @if (showActions() && (actions().length > 0 || customActions().length > 0 || expansionConfig()?.enabled)) {\n\n <td class=\"u-align-right\">\n <div class=\"c-table__actions\">\n <core-dropdown [rowId]=\"row.getId()\" [extraDefaultActions]=\"extraDefaultActions()\"\n [extraCustomActions]=\"getVisibleCustomActions(row, true)\" [row]=\"row\"\n [triggerElementId]=\"'dropdown-trigger-' + row.getId()\"\n (actionTriggered)=\"triggerAction($event.action, $event.row)\"\n (customActionTriggered)=\"triggerCustomAction($event.action, $event.row)\" #dropdown>\n </core-dropdown>\n @for (actionConfig of regularDefaultActions(); track actionConfig.action) {\n @if (hasPermission(actionConfig)) {\n @if (actionConfig.action === TableAction.VIEW || actionConfig.action === TableAction.EDIT ||\n actionConfig.action === TableAction.DELETE) {\n <core-generic-button [config]=\"getActionButtonConfig(actionConfig.action, actionConfig)\"\n (buttonClick)=\"onButtonClick($event, actionConfig.action, row)\">\n </core-generic-button>\n }\n }\n }\n @for (customAction of getVisibleCustomActions(row, false); track customAction.label || $index) {\n @if (hasPermission(customAction)) {\n <core-generic-button [config]=\"getCustomActionButtonConfigForRow(customAction, row)\"\n (buttonClick)=\"onButtonClick($event, customAction, row)\">\n </core-generic-button>\n }\n }\n\n @if (hasExtraActionsForRow(row)) {\n <core-generic-button [config]=\"getMoreActionsButtonConfig(row.getId())\" [data]=\"row\"\n (buttonClick)=\"onMoreActionsClick($event, row.getId())\" #dropdownTrigger>\n </core-generic-button>\n }\n\n @if (expansionConfig()?.enabled) {\n <!-- \u2705 Solcre: Celda dedicada para expansi\u00F3n en su posici\u00F3n correcta -->\n <core-generic-button [config]=\"getExpandButtonConfig(row)\" (buttonClick)=\"onExpandButtonClick($event, row)\">\n </core-generic-button>\n }\n\n </div> <!-- .c-table__actions -->\n </td> <!-- td parent of .c-table__actions -->\n } <!-- @if (showActions() -->\n\n\n </tr>\n @if (expansionConfig()?.enabled && isRowExpanded(row)) {\n <!-- Todo: Ver que es esto -->\n <tr class=\"expansion-row\" [ngClass]=\"getRowClasses(row)\">\n <td [attr.colspan]=\"displayedColumns().length\" class=\"expansion-content\">\n <ng-container *ngTemplateOutlet=\"expansionConfig()!.template; context: { $implicit: row }\">\n </ng-container>\n </td>\n </tr>\n }\n } @empty {\n <tr>\n <!-- Todo: Estilo .no-data -->\n <td [attr.colspan]=\"displayedColumns().length\">\n <p class=\"c-placeholder\">{{ 'table.noData' | translate }}</p>\n </td>\n </tr>\n }\n </tbody>\n </table>\n</div> <!-- .c-table -->\n\n<!-- Todo: Todo lo que viene dsp de la tabla -->\n\n@if (!enablePagination()) {\n<!-- Todo: Ver qu\u00E9 onda esto -->\n<div #sentinel class=\"sentinel\"></div>\n}\n\n@if (enablePagination()) {\n<!-- Todo: Ver qu\u00E9 onda esto -->\n<core-generic-pagination [tableId]=\"tableId\"></core-generic-pagination>\n}\n\n<core-generic-modal [isOpen]=\"tableActionService.getIsModalOpen()\" [mode]=\"tableActionService.getModalMode()\"\n [data]=\"tableActionService.getModalData()\" [fields]=\"hasTabs() ? [] : tableActionService.getModalFieldsToShow()\"\n [tabs]=\"hasTabs() ? modalTabs() : []\" [title]=\"tableActionService.getModalTitle()\" [modelFactory]=\"modelFactory() || null\"\n (save)=\"onModalSave($event)\" (close)=\"tableActionService.closeModal()\" (modalData)=\"onModalData($event)\">\n</core-generic-modal>\n\n<core-filter-modal [isOpen]=\"isFilterModalOpen()\" [filters]=\"customFilters()\" [currentFilterValues]=\"currentFilterValues()\" (close)=\"closeFiltersPopup()\"\n (filterChange)=\"handleFilterChange($event)\" (globalFilterChange)=\"applyGlobalFilter($event)\"\n (clearFilters)=\"handleClearFilters()\">\n</core-filter-modal>", styles: [".in-modal .c-table thead th:last-child,.c-table tbody td:last-child{text-align:left}.c-table__order-btn--asc{transform:rotate(180deg)}.c-table__order-btn--desc{transform:rotate(0)}.c-table tr.is-editing-inline{background-color:#fff3cd;border-left:3px solid #ffc107}.c-table tr.is-editing-inline td{background-color:#fff3cd}.c-table tr.is-editing-inline:hover td{background-color:#ffecb5}.expansion-row .expansion-content{padding:16px;background-color:#f8f9fa;border-top:1px solid #dee2e6}.expansion-row td{border-bottom:none}\n"] }]
9299
9604
  }], ctorParameters: () => [], propDecorators: { sentinel: [{
9300
9605
  type: ViewChild,
9301
9606
  args: ['sentinel', { static: false }]
@@ -10831,12 +11136,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
10831
11136
  // Este archivo es generado automáticamente por scripts/update-version.js
10832
11137
  // No edites manualmente este archivo
10833
11138
  const VERSION = {
10834
- full: '2.12.1',
11139
+ full: '2.12.3',
10835
11140
  major: 2,
10836
11141
  minor: 12,
10837
- patch: 1,
10838
- timestamp: '2025-09-02T20:43:25.016Z',
10839
- buildDate: '2/9/2025'
11142
+ patch: 3,
11143
+ timestamp: '2025-09-03T14:23:07.645Z',
11144
+ buildDate: '3/9/2025'
10840
11145
  };
10841
11146
 
10842
11147
  class MainNavComponent {
@@ -12279,460 +12584,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
12279
12584
  }]
12280
12585
  }] });
12281
12586
 
12282
- var SliderActionType;
12283
- (function (SliderActionType) {
12284
- SliderActionType["CLICK"] = "click";
12285
- SliderActionType["CHANGE"] = "change";
12286
- SliderActionType["BEFORE_CHANGE"] = "beforeChange";
12287
- SliderActionType["AFTER_CHANGE"] = "afterChange";
12288
- SliderActionType["EDGE"] = "edge";
12289
- SliderActionType["SWIPE"] = "swipe";
12290
- })(SliderActionType || (SliderActionType = {}));
12291
-
12292
- class SliderService {
12293
- currentIndex = signal(0);
12294
- items = signal([]);
12295
- config = signal({});
12296
- getCurrentIndex = computed(() => this.currentIndex());
12297
- getItems = computed(() => this.items());
12298
- getConfig = computed(() => this.config());
12299
- getTotalItems = computed(() => this.items().length);
12300
- getNavigation = computed(() => {
12301
- const current = this.currentIndex();
12302
- const total = this.items().length;
12303
- const infinite = this.config().infinite ?? false;
12304
- return {
12305
- currentIndex: current,
12306
- totalItems: total,
12307
- canGoPrev: infinite || current > 0,
12308
- canGoNext: infinite || current < total - 1
12309
- };
12310
- });
12311
- getCurrentItem = computed(() => {
12312
- const items = this.items();
12313
- const index = this.currentIndex();
12314
- return items[index] || null;
12315
- });
12316
- setItems(items) {
12317
- this.items.set(items);
12318
- if (this.currentIndex() >= items.length) {
12319
- this.currentIndex.set(Math.max(0, items.length - 1));
12320
- }
12321
- }
12322
- setConfig(config) {
12323
- this.config.set(config);
12324
- }
12325
- goToSlide(index) {
12326
- const items = this.items();
12327
- if (index >= 0 && index < items.length) {
12328
- this.currentIndex.set(index);
12329
- }
12330
- }
12331
- nextSlide() {
12332
- const current = this.currentIndex();
12333
- const total = this.items().length;
12334
- const infinite = this.config().infinite ?? false;
12335
- if (infinite) {
12336
- this.currentIndex.set((current + 1) % total);
12337
- }
12338
- else if (current < total - 1) {
12339
- this.currentIndex.set(current + 1);
12340
- }
12341
- }
12342
- prevSlide() {
12343
- const current = this.currentIndex();
12344
- const total = this.items().length;
12345
- const infinite = this.config().infinite ?? false;
12346
- if (infinite) {
12347
- this.currentIndex.set(current === 0 ? total - 1 : current - 1);
12348
- }
12349
- else if (current > 0) {
12350
- this.currentIndex.set(current - 1);
12351
- }
12352
- }
12353
- reset() {
12354
- this.currentIndex.set(0);
12355
- }
12356
- getSlidesByConfig() {
12357
- const items = this.items();
12358
- const slidesToShow = this.config().slidesToShow ?? 1;
12359
- const currentIndex = this.currentIndex();
12360
- if (slidesToShow === 1) {
12361
- return [items[currentIndex]].filter(Boolean);
12362
- }
12363
- const result = [];
12364
- for (let i = 0; i < slidesToShow; i++) {
12365
- const index = (currentIndex + i) % items.length;
12366
- if (items[index]) {
12367
- result.push(items[index]);
12368
- }
12369
- }
12370
- return result;
12371
- }
12372
- getThumbnails() {
12373
- return this.items().map(item => ({
12374
- ...item,
12375
- imageUrl: item.thumbnailUrl || item.imageUrl
12376
- }));
12377
- }
12378
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SliderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12379
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SliderService, providedIn: 'root' });
12380
- }
12381
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SliderService, decorators: [{
12382
- type: Injectable,
12383
- args: [{
12384
- providedIn: 'root'
12385
- }]
12386
- }] });
12387
-
12388
- class GenericSliderComponent {
12389
- sliderService = inject(SliderService);
12390
- autoPlayInterval = null;
12391
- items = input([]);
12392
- config = input({
12393
- autoPlay: false,
12394
- autoPlayInterval: 3000,
12395
- showDots: true,
12396
- showArrows: true,
12397
- showThumbnails: false,
12398
- infinite: true,
12399
- slidesToShow: 1,
12400
- slidesToScroll: 1,
12401
- centerMode: false,
12402
- height: '400px',
12403
- thumbnailHeight: '80px',
12404
- showPreview: true,
12405
- enableKeyboard: true,
12406
- swipeToSlide: true,
12407
- pauseOnHover: true,
12408
- showCounter: false,
12409
- lazyLoad: true,
12410
- fadeEffect: false,
12411
- verticalThumbnails: false
12412
- });
12413
- actionTriggered = output();
12414
- slideChanged = output();
12415
- isHovered = signal(false);
12416
- isDragging = signal(false);
12417
- startX = signal(0);
12418
- currentX = signal(0);
12419
- currentIndex = computed(() => this.sliderService.getCurrentIndex());
12420
- totalItems = computed(() => this.sliderService.getTotalItems());
12421
- currentItem = computed(() => this.sliderService.getCurrentItem());
12422
- navigation = computed(() => this.sliderService.getNavigation());
12423
- visibleSlides = computed(() => this.sliderService.getSlidesByConfig());
12424
- thumbnails = computed(() => this.sliderService.getThumbnails());
12425
- mergedConfig = computed(() => ({
12426
- ...this.config(),
12427
- ...this.sliderService.getConfig()
12428
- }));
12429
- canAutoPlay = computed(() => {
12430
- const config = this.mergedConfig();
12431
- return config.autoPlay && !this.isHovered() && !this.isDragging();
12432
- });
12433
- showDots = computed(() => this.mergedConfig().showDots && this.totalItems() > 1);
12434
- showArrows = computed(() => this.mergedConfig().showArrows && this.totalItems() > 1);
12435
- showThumbnails = computed(() => this.mergedConfig().showThumbnails && this.totalItems() > 1);
12436
- showCounter = computed(() => this.mergedConfig().showCounter && this.totalItems() > 1);
12437
- containerStyles = computed(() => ({
12438
- height: this.mergedConfig().height || '400px',
12439
- position: 'relative',
12440
- overflow: 'hidden'
12441
- }));
12442
- slideStyles = computed(() => {
12443
- const config = this.mergedConfig();
12444
- const slidesToShow = config.slidesToShow || 1;
12445
- const currentIndex = this.currentIndex();
12446
- const totalItems = this.totalItems();
12447
- const totalWidth = (totalItems / slidesToShow) * 100;
12448
- const slideWidth = 100 / slidesToShow;
12449
- const translateX = -(currentIndex * slideWidth);
12450
- return {
12451
- transform: `translateX(${translateX}%)`,
12452
- transition: this.isDragging() ? 'none' : 'transform 0.3s ease-in-out',
12453
- display: 'flex',
12454
- width: `${totalWidth}%`
12455
- };
12456
- });
12457
- prevButtonConfig = computed(() => ({
12458
- type: ButtonType.PRIMARY,
12459
- context: ButtonContext.DEFAULT,
12460
- size: ButtonSize.SMALL,
12461
- text: '',
12462
- icon: 'icon-arrow-left',
12463
- disabled: !this.navigation().canGoPrev,
12464
- ariaLabel: 'slider.previous'
12465
- }));
12466
- nextButtonConfig = computed(() => ({
12467
- type: ButtonType.PRIMARY,
12468
- context: ButtonContext.DEFAULT,
12469
- size: ButtonSize.SMALL,
12470
- text: '',
12471
- icon: 'icon-arrow-right',
12472
- disabled: !this.navigation().canGoNext,
12473
- ariaLabel: 'slider.next'
12474
- }));
12475
- constructor() {
12476
- effect(() => {
12477
- this.sliderService.setItems(this.items());
12478
- });
12479
- effect(() => {
12480
- this.sliderService.setConfig(this.config());
12481
- });
12482
- effect(() => {
12483
- const currentIndex = this.currentIndex();
12484
- const currentItem = this.currentItem();
12485
- if (currentItem) {
12486
- this.slideChanged.emit({ currentIndex, currentItem });
12487
- }
12488
- });
12489
- effect(() => {
12490
- if (this.canAutoPlay()) {
12491
- this.startAutoPlay();
12492
- }
12493
- else {
12494
- this.stopAutoPlay();
12495
- }
12496
- });
12497
- }
12498
- ngOnInit() {
12499
- this.setupAutoPlay();
12500
- }
12501
- ngOnDestroy() {
12502
- this.stopAutoPlay();
12503
- }
12504
- onKeydown(event) {
12505
- if (!this.mergedConfig().enableKeyboard)
12506
- return;
12507
- switch (event.key) {
12508
- case 'ArrowLeft':
12509
- event.preventDefault();
12510
- this.goToPrevious();
12511
- break;
12512
- case 'ArrowRight':
12513
- event.preventDefault();
12514
- this.goToNext();
12515
- break;
12516
- case ' ':
12517
- event.preventDefault();
12518
- this.toggleAutoPlay();
12519
- break;
12520
- case 'Home':
12521
- event.preventDefault();
12522
- this.goToSlide(0);
12523
- break;
12524
- case 'End':
12525
- event.preventDefault();
12526
- this.goToSlide(this.totalItems() - 1);
12527
- break;
12528
- }
12529
- }
12530
- goToSlide(index) {
12531
- const previousIndex = this.currentIndex();
12532
- this.sliderService.goToSlide(index);
12533
- this.emitAction(SliderActionType.CHANGE, this.currentItem(), index);
12534
- if (previousIndex !== index) {
12535
- this.emitAction(SliderActionType.AFTER_CHANGE, this.currentItem(), index);
12536
- }
12537
- }
12538
- goToNext() {
12539
- const config = this.mergedConfig();
12540
- const current = this.currentIndex();
12541
- const total = this.totalItems();
12542
- const slidesToShow = config.slidesToShow || 1;
12543
- const slidesToScroll = config.slidesToScroll || 1;
12544
- let nextIndex;
12545
- if (config.infinite) {
12546
- nextIndex = (current + slidesToScroll) % total;
12547
- }
12548
- else {
12549
- const maxIndex = Math.max(0, total - slidesToShow);
12550
- nextIndex = Math.min(current + slidesToScroll, maxIndex);
12551
- }
12552
- this.goToSlide(nextIndex);
12553
- }
12554
- goToPrevious() {
12555
- const config = this.mergedConfig();
12556
- const current = this.currentIndex();
12557
- const total = this.totalItems();
12558
- const slidesToScroll = config.slidesToScroll || 1;
12559
- let prevIndex;
12560
- if (config.infinite) {
12561
- prevIndex = current - slidesToScroll < 0 ? total - slidesToScroll : current - slidesToScroll;
12562
- }
12563
- else {
12564
- prevIndex = Math.max(current - slidesToScroll, 0);
12565
- }
12566
- this.goToSlide(prevIndex);
12567
- }
12568
- setupAutoPlay() {
12569
- if (this.mergedConfig().autoPlay) {
12570
- this.startAutoPlay();
12571
- }
12572
- }
12573
- startAutoPlay() {
12574
- this.stopAutoPlay();
12575
- if (this.canAutoPlay()) {
12576
- this.autoPlayInterval = setInterval(() => {
12577
- if (this.canAutoPlay()) {
12578
- this.goToNext();
12579
- }
12580
- }, this.mergedConfig().autoPlayInterval || 3000);
12581
- }
12582
- }
12583
- stopAutoPlay() {
12584
- if (this.autoPlayInterval) {
12585
- clearInterval(this.autoPlayInterval);
12586
- this.autoPlayInterval = null;
12587
- }
12588
- }
12589
- toggleAutoPlay() {
12590
- if (this.canAutoPlay()) {
12591
- this.stopAutoPlay();
12592
- }
12593
- else {
12594
- this.startAutoPlay();
12595
- }
12596
- }
12597
- onMouseEnter() {
12598
- if (this.mergedConfig().pauseOnHover) {
12599
- this.isHovered.set(true);
12600
- }
12601
- }
12602
- onMouseLeave() {
12603
- if (this.mergedConfig().pauseOnHover) {
12604
- this.isHovered.set(false);
12605
- }
12606
- }
12607
- onTouchStart(event) {
12608
- if (!this.mergedConfig().swipeToSlide)
12609
- return;
12610
- this.isDragging.set(true);
12611
- this.startX.set(event.touches[0].clientX);
12612
- }
12613
- onTouchMove(event) {
12614
- if (!this.isDragging() || !this.mergedConfig().swipeToSlide)
12615
- return;
12616
- this.currentX.set(event.touches[0].clientX);
12617
- event.preventDefault();
12618
- }
12619
- onTouchEnd() {
12620
- if (!this.isDragging() || !this.mergedConfig().swipeToSlide)
12621
- return;
12622
- const diffX = this.startX() - this.currentX();
12623
- const threshold = 50;
12624
- if (Math.abs(diffX) > threshold) {
12625
- if (diffX > 0) {
12626
- this.goToNext();
12627
- }
12628
- else {
12629
- this.goToPrevious();
12630
- }
12631
- this.emitAction(SliderActionType.SWIPE, this.currentItem(), this.currentIndex());
12632
- }
12633
- this.isDragging.set(false);
12634
- this.startX.set(0);
12635
- this.currentX.set(0);
12636
- }
12637
- onSlideClick(item, index) {
12638
- this.emitAction(SliderActionType.CLICK, item, index);
12639
- }
12640
- onDotClick(index) {
12641
- this.goToSlide(index);
12642
- }
12643
- onThumbnailClick(index) {
12644
- this.goToSlide(index);
12645
- }
12646
- emitAction(type, item, index) {
12647
- this.actionTriggered.emit({ type, item, index });
12648
- }
12649
- getSlideImage(item) {
12650
- return item.imageUrl || '';
12651
- }
12652
- getSlideAlt(item) {
12653
- return item.alt || item.title || `Slide ${this.currentIndex() + 1}`;
12654
- }
12655
- isActiveSlide(index) {
12656
- const config = this.mergedConfig();
12657
- const current = this.currentIndex();
12658
- const slidesToShow = config.slidesToShow || 1;
12659
- if (slidesToShow === 1) {
12660
- return index === current;
12661
- }
12662
- else {
12663
- return index >= current && index < current + slidesToShow;
12664
- }
12665
- }
12666
- isActiveDot(index) {
12667
- return index === this.currentIndex();
12668
- }
12669
- isActiveThumbnail(index) {
12670
- return index === this.currentIndex();
12671
- }
12672
- getCounterText() {
12673
- return `${this.currentIndex() + 1} / ${this.totalItems()}`;
12674
- }
12675
- getSlideWidth() {
12676
- const config = this.mergedConfig();
12677
- const slidesToShow = config.slidesToShow || 1;
12678
- const totalItems = this.totalItems();
12679
- const widthPercentage = (100 / totalItems);
12680
- return `${widthPercentage}%`;
12681
- }
12682
- getFileTypeIcon(fileType) {
12683
- const typeMap = {
12684
- 'pdf': 'icon-file-pdf',
12685
- 'doc': 'icon-file-word',
12686
- 'docx': 'icon-file-word',
12687
- 'xls': 'icon-file-excel',
12688
- 'xlsx': 'icon-file-excel',
12689
- 'ppt': 'icon-file-powerpoint',
12690
- 'pptx': 'icon-file-powerpoint',
12691
- 'txt': 'icon-file-text',
12692
- 'zip': 'icon-file-zip',
12693
- 'rar': 'icon-file-zip',
12694
- 'jpg': 'icon-file-image',
12695
- 'jpeg': 'icon-file-image',
12696
- 'png': 'icon-file-image',
12697
- 'gif': 'icon-file-image',
12698
- 'mp4': 'icon-file-video',
12699
- 'avi': 'icon-file-video',
12700
- 'mov': 'icon-file-video',
12701
- 'mp3': 'icon-file-audio',
12702
- 'wav': 'icon-file-audio'
12703
- };
12704
- return typeMap[fileType.toLowerCase()] || 'icon-file';
12705
- }
12706
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GenericSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12707
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: GenericSliderComponent, isStandalone: true, selector: "core-generic-slider", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actionTriggered: "actionTriggered", slideChanged: "slideChanged" }, host: { listeners: { "keydown": "onKeydown($event)" } }, ngImport: i0, template: "<div class=\"c-slider\" \n [style]=\"containerStyles()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd()\">\n \n <!-- Main slider container -->\n <div class=\"c-slider__container\">\n \n <!-- Previous arrow -->\n @if (showArrows()) {\n <div class=\"c-slider__arrow c-slider__arrow--prev\">\n <core-generic-button\n [config]=\"prevButtonConfig()\"\n (buttonClick)=\"goToPrevious()\">\n </core-generic-button>\n </div>\n }\n\n <!-- Slides wrapper -->\n <div class=\"c-slider__wrapper\">\n <div class=\"c-slider__track\" [style]=\"slideStyles()\">\n @for (slide of items(); track slide.id; let i = $index) {\n <div class=\"c-slider__slide\" \n [class.c-slider__slide--active]=\"isActiveSlide(i)\"\n [style.width]=\"getSlideWidth()\"\n (click)=\"onSlideClick(slide, i)\">\n \n <!-- Image -->\n <div class=\"c-slider__image-container\">\n @if (mergedConfig().lazyLoad) {\n <img [src]=\"getSlideImage(slide)\" \n [alt]=\"getSlideAlt(slide)\"\n class=\"c-slider__image\"\n loading=\"lazy\">\n } @else {\n <img [src]=\"getSlideImage(slide)\" \n [alt]=\"getSlideAlt(slide)\"\n class=\"c-slider__image\">\n }\n \n <!-- File Preview Icon -->\n @if (mergedConfig().showFilePreview && slide.filePreview) {\n <div class=\"c-slider__file-preview\">\n <div class=\"c-slider__file-icon\">\n <span class=\"icon-file\" [ngClass]=\"getFileTypeIcon(slide.filePreview.fileType)\"></span>\n </div>\n <div class=\"c-slider__file-info\">\n <span class=\"c-slider__file-name\">{{ slide.filePreview.fileName }}</span>\n @if (slide.filePreview.fileSize) {\n <span class=\"c-slider__file-size\">{{ slide.filePreview.fileSize }}</span>\n }\n </div>\n </div>\n }\n \n <!-- Overlay content -->\n @if (slide.title || slide.description) {\n <div class=\"c-slider__overlay\">\n @if (slide.title) {\n <h3 class=\"c-slider__title\">{{ slide.title }}</h3>\n }\n @if (slide.description) {\n <p class=\"c-slider__description\">{{ slide.description }}</p>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Next arrow -->\n @if (showArrows()) {\n <div class=\"c-slider__arrow c-slider__arrow--next\">\n <core-generic-button\n [config]=\"nextButtonConfig()\"\n (buttonClick)=\"goToNext()\">\n </core-generic-button>\n </div>\n }\n </div>\n\n <!-- Counter -->\n @if (showCounter()) {\n <div class=\"c-slider__counter\">\n <span class=\"c-slider__counter-text\">{{ getCounterText() }}</span>\n </div>\n }\n\n <!-- Dots navigation -->\n @if (showDots()) {\n <div class=\"c-slider__dots\">\n @for (item of items(); track item.id; let i = $index) {\n <button type=\"button\"\n class=\"c-slider__dot\"\n [class.c-slider__dot--active]=\"isActiveDot(i)\"\n [attr.aria-label]=\"'slider.go-to-slide' | translate: {number: i + 1}\"\n (click)=\"onDotClick(i)\">\n </button>\n }\n </div>\n }\n\n <!-- Thumbnails -->\n @if (showThumbnails()) {\n <div class=\"c-slider__thumbnails\" \n [class.c-slider__thumbnails--vertical]=\"mergedConfig().verticalThumbnails\">\n @for (thumbnail of thumbnails(); track thumbnail.id; let i = $index) {\n <button type=\"button\"\n class=\"c-slider__thumbnail\"\n [class.c-slider__thumbnail--active]=\"isActiveThumbnail(i)\"\n [style.height]=\"mergedConfig().thumbnailHeight\"\n (click)=\"onThumbnailClick(i)\">\n <img [src]=\"thumbnail.imageUrl\" \n [alt]=\"thumbnail.alt || thumbnail.title\"\n class=\"c-slider__thumbnail-image\">\n @if (thumbnail.title) {\n <span class=\"c-slider__thumbnail-title\">{{ thumbnail.title }}</span>\n }\n </button>\n }\n </div>\n }\n\n <!-- Empty state -->\n @if (totalItems() === 0) {\n <div class=\"c-slider__empty\">\n <div class=\"c-slider__empty-icon\">\n <i class=\"icon-image\" aria-hidden=\"true\"></i>\n </div>\n <p class=\"c-slider__empty-text\">{{ 'slider.no-items' | translate }}</p>\n </div>\n }\n\n <!-- Loading state -->\n @if (isDragging()) {\n <div class=\"c-slider__loading\">\n <div class=\"c-slider__loading-spinner\"></div>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: GenericButtonComponent, selector: "core-generic-button", inputs: ["config", "data"], outputs: ["buttonClick"] }] });
12708
- }
12709
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GenericSliderComponent, decorators: [{
12710
- type: Component,
12711
- args: [{ selector: 'core-generic-slider', standalone: true, imports: [CommonModule, TranslateModule, GenericButtonComponent], template: "<div class=\"c-slider\" \n [style]=\"containerStyles()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd()\">\n \n <!-- Main slider container -->\n <div class=\"c-slider__container\">\n \n <!-- Previous arrow -->\n @if (showArrows()) {\n <div class=\"c-slider__arrow c-slider__arrow--prev\">\n <core-generic-button\n [config]=\"prevButtonConfig()\"\n (buttonClick)=\"goToPrevious()\">\n </core-generic-button>\n </div>\n }\n\n <!-- Slides wrapper -->\n <div class=\"c-slider__wrapper\">\n <div class=\"c-slider__track\" [style]=\"slideStyles()\">\n @for (slide of items(); track slide.id; let i = $index) {\n <div class=\"c-slider__slide\" \n [class.c-slider__slide--active]=\"isActiveSlide(i)\"\n [style.width]=\"getSlideWidth()\"\n (click)=\"onSlideClick(slide, i)\">\n \n <!-- Image -->\n <div class=\"c-slider__image-container\">\n @if (mergedConfig().lazyLoad) {\n <img [src]=\"getSlideImage(slide)\" \n [alt]=\"getSlideAlt(slide)\"\n class=\"c-slider__image\"\n loading=\"lazy\">\n } @else {\n <img [src]=\"getSlideImage(slide)\" \n [alt]=\"getSlideAlt(slide)\"\n class=\"c-slider__image\">\n }\n \n <!-- File Preview Icon -->\n @if (mergedConfig().showFilePreview && slide.filePreview) {\n <div class=\"c-slider__file-preview\">\n <div class=\"c-slider__file-icon\">\n <span class=\"icon-file\" [ngClass]=\"getFileTypeIcon(slide.filePreview.fileType)\"></span>\n </div>\n <div class=\"c-slider__file-info\">\n <span class=\"c-slider__file-name\">{{ slide.filePreview.fileName }}</span>\n @if (slide.filePreview.fileSize) {\n <span class=\"c-slider__file-size\">{{ slide.filePreview.fileSize }}</span>\n }\n </div>\n </div>\n }\n \n <!-- Overlay content -->\n @if (slide.title || slide.description) {\n <div class=\"c-slider__overlay\">\n @if (slide.title) {\n <h3 class=\"c-slider__title\">{{ slide.title }}</h3>\n }\n @if (slide.description) {\n <p class=\"c-slider__description\">{{ slide.description }}</p>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Next arrow -->\n @if (showArrows()) {\n <div class=\"c-slider__arrow c-slider__arrow--next\">\n <core-generic-button\n [config]=\"nextButtonConfig()\"\n (buttonClick)=\"goToNext()\">\n </core-generic-button>\n </div>\n }\n </div>\n\n <!-- Counter -->\n @if (showCounter()) {\n <div class=\"c-slider__counter\">\n <span class=\"c-slider__counter-text\">{{ getCounterText() }}</span>\n </div>\n }\n\n <!-- Dots navigation -->\n @if (showDots()) {\n <div class=\"c-slider__dots\">\n @for (item of items(); track item.id; let i = $index) {\n <button type=\"button\"\n class=\"c-slider__dot\"\n [class.c-slider__dot--active]=\"isActiveDot(i)\"\n [attr.aria-label]=\"'slider.go-to-slide' | translate: {number: i + 1}\"\n (click)=\"onDotClick(i)\">\n </button>\n }\n </div>\n }\n\n <!-- Thumbnails -->\n @if (showThumbnails()) {\n <div class=\"c-slider__thumbnails\" \n [class.c-slider__thumbnails--vertical]=\"mergedConfig().verticalThumbnails\">\n @for (thumbnail of thumbnails(); track thumbnail.id; let i = $index) {\n <button type=\"button\"\n class=\"c-slider__thumbnail\"\n [class.c-slider__thumbnail--active]=\"isActiveThumbnail(i)\"\n [style.height]=\"mergedConfig().thumbnailHeight\"\n (click)=\"onThumbnailClick(i)\">\n <img [src]=\"thumbnail.imageUrl\" \n [alt]=\"thumbnail.alt || thumbnail.title\"\n class=\"c-slider__thumbnail-image\">\n @if (thumbnail.title) {\n <span class=\"c-slider__thumbnail-title\">{{ thumbnail.title }}</span>\n }\n </button>\n }\n </div>\n }\n\n <!-- Empty state -->\n @if (totalItems() === 0) {\n <div class=\"c-slider__empty\">\n <div class=\"c-slider__empty-icon\">\n <i class=\"icon-image\" aria-hidden=\"true\"></i>\n </div>\n <p class=\"c-slider__empty-text\">{{ 'slider.no-items' | translate }}</p>\n </div>\n }\n\n <!-- Loading state -->\n @if (isDragging()) {\n <div class=\"c-slider__loading\">\n <div class=\"c-slider__loading-spinner\"></div>\n </div>\n }\n</div>\n" }]
12712
- }], ctorParameters: () => [], propDecorators: { onKeydown: [{
12713
- type: HostListener,
12714
- args: ['keydown', ['$event']]
12715
- }] } });
12716
-
12717
- var SliderDirection;
12718
- (function (SliderDirection) {
12719
- SliderDirection["HORIZONTAL"] = "horizontal";
12720
- SliderDirection["VERTICAL"] = "vertical";
12721
- })(SliderDirection || (SliderDirection = {}));
12722
- var SliderTransition;
12723
- (function (SliderTransition) {
12724
- SliderTransition["SLIDE"] = "slide";
12725
- SliderTransition["FADE"] = "fade";
12726
- SliderTransition["SCALE"] = "scale";
12727
- })(SliderTransition || (SliderTransition = {}));
12728
- var SliderNavigationType;
12729
- (function (SliderNavigationType) {
12730
- SliderNavigationType["DOTS"] = "dots";
12731
- SliderNavigationType["ARROWS"] = "arrows";
12732
- SliderNavigationType["THUMBNAILS"] = "thumbnails";
12733
- SliderNavigationType["COUNTER"] = "counter";
12734
- })(SliderNavigationType || (SliderNavigationType = {}));
12735
-
12736
12587
  class CarouselComponent {
12737
12588
  images = input([]);
12738
12589
  config = input({});
@@ -12867,11 +12718,11 @@ class CarouselComponent {
12867
12718
  };
12868
12719
  }
12869
12720
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: CarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12870
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: CarouselComponent, isStandalone: true, selector: "core-carousel", inputs: { images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:resize": "onResize()", "keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "carouselHolder", first: true, predicate: ["carouselHolder"], descendants: true, isSignal: true }, { propertyName: "carouselViewport", first: true, predicate: ["carouselViewport"], descendants: true, isSignal: true }], ngImport: i0, template: "<div \n [ngClass]=\"carouselClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n tabindex=\"0\"\n #carouselViewport>\n \n <div class=\"c-img-carousel__viewport\">\n <div class=\"c-img-carousel__holder js-img-carousel-holder\" #carouselHolder>\n <div \n *ngFor=\"let image of images(); let i = index\"\n class=\"c-img-carousel__slide js-img-carousel-slide\">\n <div class=\"c-img-carousel__slide-inner\">\n <div>\n <core-image-preview\n [src]=\"image.url\"\n [alt]=\"image.alt || 'Image ' + (i + 1)\"\n [title]=\"image.title || image.alt || 'Image ' + (i + 1)\">\n </core-image-preview>\n </div>\n </div>\n </div>\n </div>\n \n @if (!config().arrowsOutside) {\n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--prev icon-arrow-left\"\n type=\"button\"\n (click)=\"goToPrevSlide()\"\n [attr.aria-label]=\"'Anterior'\"\n data-control=\"prevBtn\">\n </button>\n \n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--next icon-arrow-right\"\n type=\"button\"\n (click)=\"goToNextSlide()\"\n [attr.aria-label]=\"'Siguiente'\"\n data-control=\"nextBtn\">\n </button>\n }\n \n <div \n *ngIf=\"showDots()\"\n class=\"c-img-carousel__dots js-img-carousel-nav\"\n aria-label=\"Navegaci\u00F3n\">\n <button\n *ngFor=\"let page of dots(); let i = index\"\n class=\"c-img-carousel__dot js-img-carousel-dot\"\n type=\"button\"\n (click)=\"goToPage(i)\"\n [class.c-img-carousel__dot--active]=\"currentPage() === i\"\n [attr.aria-label]=\"'Ir a p\u00E1gina ' + (i + 1)\"\n [attr.aria-current]=\"currentPage() === i ? 'true' : 'false'\">\n </button>\n </div>\n </div>\n @if(config().arrowsOutside) {\n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--prev icon-arrow-left\"\n type=\"button\"\n (click)=\"goToPrevSlide()\"\n [attr.aria-label]=\"'Anterior'\"\n data-control=\"prevBtn\">\n </button>\n \n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--next icon-arrow-right\"\n type=\"button\"\n (click)=\"goToNextSlide()\"\n [attr.aria-label]=\"'Siguiente'\"\n data-control=\"nextBtn\">\n </button>\n }\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ImagePreviewComponent, selector: "core-image-preview", inputs: ["src", "alt", "title", "width", "height", "objectFit", "borderRadius", "cursor", "loading", "isRelative"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12721
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: CarouselComponent, isStandalone: true, selector: "core-carousel", inputs: { images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:resize": "onResize()", "keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "carouselHolder", first: true, predicate: ["carouselHolder"], descendants: true, isSignal: true }, { propertyName: "carouselViewport", first: true, predicate: ["carouselViewport"], descendants: true, isSignal: true }], ngImport: i0, template: "<div \n [ngClass]=\"carouselClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n tabindex=\"0\"\n #carouselViewport>\n \n <div class=\"c-img-carousel__viewport\">\n <div class=\"c-img-carousel__holder js-img-carousel-holder\" #carouselHolder>\n <div \n *ngFor=\"let image of images(); let i = index\"\n class=\"c-img-carousel__slide js-img-carousel-slide\"\n [class.is-multiple]=\"perView() > 1\">\n <div class=\"c-img-carousel__slide-inner\">\n <core-image-preview\n [src]=\"image.url\"\n [alt]=\"image.alt || 'Image ' + (i + 1)\"\n [title]=\"image.title || image.alt || 'Image ' + (i + 1)\">\n </core-image-preview>\n </div>\n </div>\n </div>\n \n @if (!config().arrowsOutside) {\n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--prev icon-arrow-left\"\n type=\"button\"\n (click)=\"goToPrevSlide()\"\n [attr.aria-label]=\"'Anterior'\"\n data-control=\"prevBtn\">\n </button>\n \n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--next icon-arrow-right\"\n type=\"button\"\n (click)=\"goToNextSlide()\"\n [attr.aria-label]=\"'Siguiente'\"\n data-control=\"nextBtn\">\n </button>\n }\n \n <div \n *ngIf=\"showDots()\"\n class=\"c-img-carousel__dots js-img-carousel-nav\"\n aria-label=\"Navegaci\u00F3n\">\n <button\n *ngFor=\"let page of dots(); let i = index\"\n class=\"c-img-carousel__dot js-img-carousel-dot\"\n type=\"button\"\n (click)=\"goToPage(i)\"\n [class.c-img-carousel__dot--active]=\"currentPage() === i\"\n [attr.aria-label]=\"'Ir a p\u00E1gina ' + (i + 1)\"\n [attr.aria-current]=\"currentPage() === i ? 'true' : 'false'\">\n </button>\n </div>\n </div>\n @if(config().arrowsOutside) {\n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--prev icon-arrow-left\"\n type=\"button\"\n (click)=\"goToPrevSlide()\"\n [attr.aria-label]=\"'Anterior'\"\n data-control=\"prevBtn\">\n </button>\n \n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--next icon-arrow-right\"\n type=\"button\"\n (click)=\"goToNextSlide()\"\n [attr.aria-label]=\"'Siguiente'\"\n data-control=\"nextBtn\">\n </button>\n }\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ImagePreviewComponent, selector: "core-image-preview", inputs: ["src", "alt", "title", "width", "height", "objectFit", "borderRadius", "cursor", "loading", "isRelative"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12871
12722
  }
12872
12723
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: CarouselComponent, decorators: [{
12873
12724
  type: Component,
12874
- args: [{ selector: 'core-carousel', standalone: true, imports: [CommonModule, ImagePreviewComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div \n [ngClass]=\"carouselClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n tabindex=\"0\"\n #carouselViewport>\n \n <div class=\"c-img-carousel__viewport\">\n <div class=\"c-img-carousel__holder js-img-carousel-holder\" #carouselHolder>\n <div \n *ngFor=\"let image of images(); let i = index\"\n class=\"c-img-carousel__slide js-img-carousel-slide\">\n <div class=\"c-img-carousel__slide-inner\">\n <div>\n <core-image-preview\n [src]=\"image.url\"\n [alt]=\"image.alt || 'Image ' + (i + 1)\"\n [title]=\"image.title || image.alt || 'Image ' + (i + 1)\">\n </core-image-preview>\n </div>\n </div>\n </div>\n </div>\n \n @if (!config().arrowsOutside) {\n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--prev icon-arrow-left\"\n type=\"button\"\n (click)=\"goToPrevSlide()\"\n [attr.aria-label]=\"'Anterior'\"\n data-control=\"prevBtn\">\n </button>\n \n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--next icon-arrow-right\"\n type=\"button\"\n (click)=\"goToNextSlide()\"\n [attr.aria-label]=\"'Siguiente'\"\n data-control=\"nextBtn\">\n </button>\n }\n \n <div \n *ngIf=\"showDots()\"\n class=\"c-img-carousel__dots js-img-carousel-nav\"\n aria-label=\"Navegaci\u00F3n\">\n <button\n *ngFor=\"let page of dots(); let i = index\"\n class=\"c-img-carousel__dot js-img-carousel-dot\"\n type=\"button\"\n (click)=\"goToPage(i)\"\n [class.c-img-carousel__dot--active]=\"currentPage() === i\"\n [attr.aria-label]=\"'Ir a p\u00E1gina ' + (i + 1)\"\n [attr.aria-current]=\"currentPage() === i ? 'true' : 'false'\">\n </button>\n </div>\n </div>\n @if(config().arrowsOutside) {\n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--prev icon-arrow-left\"\n type=\"button\"\n (click)=\"goToPrevSlide()\"\n [attr.aria-label]=\"'Anterior'\"\n data-control=\"prevBtn\">\n </button>\n \n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--next icon-arrow-right\"\n type=\"button\"\n (click)=\"goToNextSlide()\"\n [attr.aria-label]=\"'Siguiente'\"\n data-control=\"nextBtn\">\n </button>\n }\n</div>" }]
12725
+ args: [{ selector: 'core-carousel', standalone: true, imports: [CommonModule, ImagePreviewComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div \n [ngClass]=\"carouselClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n tabindex=\"0\"\n #carouselViewport>\n \n <div class=\"c-img-carousel__viewport\">\n <div class=\"c-img-carousel__holder js-img-carousel-holder\" #carouselHolder>\n <div \n *ngFor=\"let image of images(); let i = index\"\n class=\"c-img-carousel__slide js-img-carousel-slide\"\n [class.is-multiple]=\"perView() > 1\">\n <div class=\"c-img-carousel__slide-inner\">\n <core-image-preview\n [src]=\"image.url\"\n [alt]=\"image.alt || 'Image ' + (i + 1)\"\n [title]=\"image.title || image.alt || 'Image ' + (i + 1)\">\n </core-image-preview>\n </div>\n </div>\n </div>\n \n @if (!config().arrowsOutside) {\n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--prev icon-arrow-left\"\n type=\"button\"\n (click)=\"goToPrevSlide()\"\n [attr.aria-label]=\"'Anterior'\"\n data-control=\"prevBtn\">\n </button>\n \n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--next icon-arrow-right\"\n type=\"button\"\n (click)=\"goToNextSlide()\"\n [attr.aria-label]=\"'Siguiente'\"\n data-control=\"nextBtn\">\n </button>\n }\n \n <div \n *ngIf=\"showDots()\"\n class=\"c-img-carousel__dots js-img-carousel-nav\"\n aria-label=\"Navegaci\u00F3n\">\n <button\n *ngFor=\"let page of dots(); let i = index\"\n class=\"c-img-carousel__dot js-img-carousel-dot\"\n type=\"button\"\n (click)=\"goToPage(i)\"\n [class.c-img-carousel__dot--active]=\"currentPage() === i\"\n [attr.aria-label]=\"'Ir a p\u00E1gina ' + (i + 1)\"\n [attr.aria-current]=\"currentPage() === i ? 'true' : 'false'\">\n </button>\n </div>\n </div>\n @if(config().arrowsOutside) {\n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--prev icon-arrow-left\"\n type=\"button\"\n (click)=\"goToPrevSlide()\"\n [attr.aria-label]=\"'Anterior'\"\n data-control=\"prevBtn\">\n </button>\n \n <button \n *ngIf=\"showArrows()\"\n class=\"c-img-carousel__btn c-img-carousel__btn--next icon-arrow-right\"\n type=\"button\"\n (click)=\"goToNextSlide()\"\n [attr.aria-label]=\"'Siguiente'\"\n data-control=\"nextBtn\">\n </button>\n }\n</div>" }]
12875
12726
  }], ctorParameters: () => [], propDecorators: { onResize: [{
12876
12727
  type: HostListener,
12877
12728
  args: ['window:resize']
@@ -13207,5 +13058,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
13207
13058
  * Generated bundle index. Do not edit.
13208
13059
  */
13209
13060
 
13210
- export { ActiveFiltersComponent, AlertComponent, AlertContainerComponent, AlertService, AlertType, ApiConfigurationProvider, BaseFieldComponent, ButtonContext, ButtonSize, ButtonType, CacheBustingInterceptor, CardComponent, CarouselComponent, CheckboxFieldComponent, ConfigurationModel, ConfirmationDialogComponent, ConfirmationDialogService, CoreHostDirective, CoreUiHttpLoaderFactory, CoreUiTranslateLoader, CoreUiTranslateService, DataListComponent, DataListItemComponent, DateFieldComponent, DateUtility, DatetimeFieldComponent, DialogActions, DocumentAction, DocumentDisplayMode, DropdownComponent, DropdownDirection, DropdownService, DynamicFieldDirective, FieldErrorsComponent, FieldType, FileFieldComponent, FileModel, FileTemplateModel, FileTemplateType, FileType, FileTypeModel, FileUploadService, FilterModalComponent, FilterService, FilterType, GenericButtonComponent, GenericDocumentationComponent, GenericModalComponent, GenericPaginationComponent, GenericRatingComponent, GenericSidebarComponent, GenericSliderComponent, GenericStepsComponent, GenericTableComponent, GenericTabsComponent, GenericTimelineComponent, GlobalApiConfigService, HeaderComponent, HeaderConfigurationService, HeaderElementType, HeaderService, HttpLoaderFactory, ImageModalComponent, ImageModalService, ImagePreviewComponent, LayoutAuth, LayoutBreakpoint, LayoutComponent, LayoutService, LayoutStateService, LayoutType, LoaderComponent, LoaderService, MainNavComponent, MainNavService, ModalMode, ModelApiService, MultiEntryFieldComponent, MultiEntryOutputFormat, NumberFieldComponent, NumberFieldConfigType, NumberFieldType, NumberRange, PERMISSION_ACTIONS_PROVIDER, PERMISSION_PROVIDER, PERMISSION_RESOURCES_PROVIDER, PaginationService, PasswordFieldComponent, PermissionEnumsService, PermissionModel, PermissionService, PermissionWrapperService, PermissionsActions, PermissionsInterceptor, PermissionsResources, ProgressBarComponent, ProgressBarSize, RatingService, RatingSize, RatingType, ResetPasswordModel, RoleModel, SelectFieldComponent, ServerSelectFieldComponent, ServerSelectService, SidebarCustomModalComponent, SidebarCustomModalService, SidebarHeight, SidebarMobileModalService, SidebarMobileType, SidebarPosition, SidebarService, SidebarState, SidebarTemplateRegistryService, SidebarVisibility, SidebarWidth, SliderActionType, SliderDirection, SliderNavigationType, SliderService, SliderTransition, SmartFieldComponent, StepSize, StepStatus, StepType, StepsService, SwitchFieldComponent, TableAction, TableActionService, TableDataService, TextAreaFieldComponent, TextFieldComponent, TimeFieldComponent, TimeInterval, TimelineService, TimelineStatus, TimelineType, TranslationMergeService, UsersModel, VERSION, equalToValidator, isSameDate, provideCoreUiTranslateLoader, providePermissionActions, providePermissionEnums, providePermissionResources, providePermissionService, providePermissionServiceFactory, provideTranslateLoader };
13061
+ export { ActiveFiltersComponent, AlertComponent, AlertContainerComponent, AlertService, AlertType, ApiConfigurationProvider, BaseFieldComponent, ButtonContext, ButtonSize, ButtonType, CacheBustingInterceptor, CardComponent, CarouselComponent, CheckboxFieldComponent, ConfigurationModel, ConfirmationDialogComponent, ConfirmationDialogService, CoreHostDirective, CoreUiHttpLoaderFactory, CoreUiTranslateLoader, CoreUiTranslateService, DataListComponent, DataListItemComponent, DateFieldComponent, DateUtility, DatetimeFieldComponent, DialogActions, DocumentAction, DocumentDisplayMode, DropdownComponent, DropdownDirection, DropdownService, DynamicFieldDirective, FieldErrorsComponent, FieldType, FileFieldComponent, FileModel, FileTemplateModel, FileTemplateType, FileType, FileTypeModel, FileUploadService, FilterModalComponent, FilterService, FilterType, GenericButtonComponent, GenericDocumentationComponent, GenericModalComponent, GenericPaginationComponent, GenericRatingComponent, GenericSidebarComponent, GenericStepsComponent, GenericTableComponent, GenericTabsComponent, GenericTimelineComponent, GlobalApiConfigService, HeaderComponent, HeaderConfigurationService, HeaderElementType, HeaderService, HttpLoaderFactory, ImageModalComponent, ImageModalService, ImagePreviewComponent, LayoutAuth, LayoutBreakpoint, LayoutComponent, LayoutService, LayoutStateService, LayoutType, LoaderComponent, LoaderService, MainNavComponent, MainNavService, ModalMode, ModelApiService, MultiEntryFieldComponent, MultiEntryOutputFormat, NumberFieldComponent, NumberFieldConfigType, NumberFieldType, NumberRange, PERMISSION_ACTIONS_PROVIDER, PERMISSION_PROVIDER, PERMISSION_RESOURCES_PROVIDER, PaginationService, PasswordFieldComponent, PermissionEnumsService, PermissionModel, PermissionService, PermissionWrapperService, PermissionsActions, PermissionsInterceptor, PermissionsResources, ProgressBarComponent, ProgressBarSize, RatingService, RatingSize, RatingType, ResetPasswordModel, RoleModel, SelectFieldComponent, ServerSelectFieldComponent, ServerSelectService, SidebarCustomModalComponent, SidebarCustomModalService, SidebarHeight, SidebarMobileModalService, SidebarMobileType, SidebarPosition, SidebarService, SidebarState, SidebarTemplateRegistryService, SidebarVisibility, SidebarWidth, SmartFieldComponent, SortDirection, SortMode, StepSize, StepStatus, StepType, StepsService, SwitchFieldComponent, TableAction, TableActionService, TableDataService, TableSortService, TextAreaFieldComponent, TextFieldComponent, TimeFieldComponent, TimeInterval, TimelineService, TimelineStatus, TimelineType, TranslationMergeService, UsersModel, VERSION, equalToValidator, isSameDate, provideCoreUiTranslateLoader, providePermissionActions, providePermissionEnums, providePermissionResources, providePermissionService, providePermissionServiceFactory, provideTranslateLoader };
13211
13062
  //# sourceMappingURL=solcre-org-core-ui.mjs.map