@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
|
|
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.
|
|
11139
|
+
full: '2.12.3',
|
|
10835
11140
|
major: 2,
|
|
10836
11141
|
minor: 12,
|
|
10837
|
-
patch:
|
|
10838
|
-
timestamp: '2025-09-
|
|
10839
|
-
buildDate: '
|
|
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 <
|
|
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 <
|
|
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,
|
|
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
|