@solcre-org/core-ui 2.12.27 → 2.12.29
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.
- package/assets/css/inc/components/gallery.css +326 -0
- package/assets/css/main.css +1 -1
- package/assets/i18n/en/common.json +10 -4
- package/assets/i18n/es/common.json +3 -1
- package/fesm2022/solcre-org-core-ui.mjs +549 -8
- package/fesm2022/solcre-org-core-ui.mjs.map +1 -1
- package/index.d.ts +198 -3
- package/package.json +1 -1
|
@@ -9033,6 +9033,135 @@ class ResetPasswordModel {
|
|
|
9033
9033
|
}
|
|
9034
9034
|
}
|
|
9035
9035
|
|
|
9036
|
+
class ManualRefreshService {
|
|
9037
|
+
lastUpdateTimes = new Map();
|
|
9038
|
+
configs = new Map();
|
|
9039
|
+
initialize(id, config) {
|
|
9040
|
+
if (!this.lastUpdateTimes.has(id)) {
|
|
9041
|
+
this.lastUpdateTimes.set(id, signal(null));
|
|
9042
|
+
}
|
|
9043
|
+
if (config) {
|
|
9044
|
+
this.configs.set(id, config);
|
|
9045
|
+
}
|
|
9046
|
+
}
|
|
9047
|
+
getLastUpdateTime(id) {
|
|
9048
|
+
const timeSignal = this.lastUpdateTimes.get(id);
|
|
9049
|
+
if (!timeSignal) {
|
|
9050
|
+
throw new Error(`ManualRefreshService not initialized for id: ${id}`);
|
|
9051
|
+
}
|
|
9052
|
+
return timeSignal;
|
|
9053
|
+
}
|
|
9054
|
+
updateLastRefreshTime(id, date) {
|
|
9055
|
+
const timeSignal = this.lastUpdateTimes.get(id);
|
|
9056
|
+
if (!timeSignal) {
|
|
9057
|
+
throw new Error(`ManualRefreshService not initialized for id: ${id}`);
|
|
9058
|
+
}
|
|
9059
|
+
const refreshDate = date || new Date();
|
|
9060
|
+
const config = this.configs.get(id);
|
|
9061
|
+
let formattedTime;
|
|
9062
|
+
if (config?.customDateFormatter) {
|
|
9063
|
+
formattedTime = config.customDateFormatter(refreshDate);
|
|
9064
|
+
}
|
|
9065
|
+
else {
|
|
9066
|
+
const dateFormat = config?.dateFormat || {
|
|
9067
|
+
day: '2-digit',
|
|
9068
|
+
month: '2-digit',
|
|
9069
|
+
year: 'numeric',
|
|
9070
|
+
hour: '2-digit',
|
|
9071
|
+
minute: '2-digit',
|
|
9072
|
+
second: '2-digit',
|
|
9073
|
+
hour12: false
|
|
9074
|
+
};
|
|
9075
|
+
formattedTime = refreshDate.toLocaleString('es-ES', dateFormat);
|
|
9076
|
+
}
|
|
9077
|
+
timeSignal.set(formattedTime);
|
|
9078
|
+
}
|
|
9079
|
+
getConfig(id) {
|
|
9080
|
+
return this.configs.get(id);
|
|
9081
|
+
}
|
|
9082
|
+
updateConfig(id, config) {
|
|
9083
|
+
this.configs.set(id, config);
|
|
9084
|
+
}
|
|
9085
|
+
destroy(id) {
|
|
9086
|
+
this.lastUpdateTimes.delete(id);
|
|
9087
|
+
this.configs.delete(id);
|
|
9088
|
+
}
|
|
9089
|
+
getRegisteredIds() {
|
|
9090
|
+
return Array.from(this.lastUpdateTimes.keys());
|
|
9091
|
+
}
|
|
9092
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ManualRefreshService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9093
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ManualRefreshService, providedIn: 'root' });
|
|
9094
|
+
}
|
|
9095
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ManualRefreshService, decorators: [{
|
|
9096
|
+
type: Injectable,
|
|
9097
|
+
args: [{
|
|
9098
|
+
providedIn: 'root'
|
|
9099
|
+
}]
|
|
9100
|
+
}] });
|
|
9101
|
+
|
|
9102
|
+
class CoreManualRefreshComponent {
|
|
9103
|
+
config = input({
|
|
9104
|
+
id: 'default',
|
|
9105
|
+
showLastUpdate: true,
|
|
9106
|
+
lastUpdateLabel: 'Last update'
|
|
9107
|
+
});
|
|
9108
|
+
refreshId = input(undefined);
|
|
9109
|
+
onRefresh = output();
|
|
9110
|
+
timestampUpdated = output();
|
|
9111
|
+
manualRefreshService = inject(ManualRefreshService);
|
|
9112
|
+
effectRef;
|
|
9113
|
+
computedRefreshId = computed(() => this.refreshId() || this.config().id || 'default');
|
|
9114
|
+
ariaLabel = computed(() => this.config().lastUpdateLabel || 'Update');
|
|
9115
|
+
lastUpdateLabel = computed(() => this.config().lastUpdateLabel || 'Last update');
|
|
9116
|
+
lastUpdateTimeString = computed(() => {
|
|
9117
|
+
const id = this.computedRefreshId();
|
|
9118
|
+
try {
|
|
9119
|
+
return this.manualRefreshService.getLastUpdateTime(id)();
|
|
9120
|
+
}
|
|
9121
|
+
catch {
|
|
9122
|
+
return null;
|
|
9123
|
+
}
|
|
9124
|
+
});
|
|
9125
|
+
constructor() {
|
|
9126
|
+
this.effectRef = effect(() => {
|
|
9127
|
+
const timestamp = this.lastUpdateTimeString();
|
|
9128
|
+
if (timestamp) {
|
|
9129
|
+
this.timestampUpdated.emit(timestamp);
|
|
9130
|
+
}
|
|
9131
|
+
});
|
|
9132
|
+
}
|
|
9133
|
+
ngOnInit() {
|
|
9134
|
+
const id = this.computedRefreshId();
|
|
9135
|
+
this.manualRefreshService.initialize(id, this.config());
|
|
9136
|
+
if (this.config().showLastUpdate) {
|
|
9137
|
+
this.manualRefreshService.updateLastRefreshTime(id);
|
|
9138
|
+
}
|
|
9139
|
+
}
|
|
9140
|
+
ngOnDestroy() {
|
|
9141
|
+
if (this.effectRef) {
|
|
9142
|
+
this.effectRef.destroy?.();
|
|
9143
|
+
}
|
|
9144
|
+
}
|
|
9145
|
+
onRefreshClick() {
|
|
9146
|
+
const id = this.computedRefreshId();
|
|
9147
|
+
this.manualRefreshService.updateLastRefreshTime(id);
|
|
9148
|
+
this.onRefresh.emit(id);
|
|
9149
|
+
}
|
|
9150
|
+
updateTimestamp(date) {
|
|
9151
|
+
const id = this.computedRefreshId();
|
|
9152
|
+
this.manualRefreshService.updateLastRefreshTime(id, date);
|
|
9153
|
+
}
|
|
9154
|
+
getLastUpdateTime() {
|
|
9155
|
+
return this.lastUpdateTimeString();
|
|
9156
|
+
}
|
|
9157
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: CoreManualRefreshComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9158
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: CoreManualRefreshComponent, isStandalone: true, selector: "core-manual-refresh", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, refreshId: { classPropertyName: "refreshId", publicName: "refreshId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onRefresh: "onRefresh", timestampUpdated: "timestampUpdated" }, ngImport: i0, template: "<div class=\"u-flex\">\n @if (config().showLastUpdate && lastUpdateTimeString()) {\n <p class=\"u-text\">{{ lastUpdateLabel() | translate }}: {{ lastUpdateTimeString() }}</p>\n }\n <button class=\"c-icon-btn\" [attr.aria-label]=\"ariaLabel()\" (click)=\"onRefreshClick()\">\n <span class=\"fa fa-arrows-rotate\"></span>\n </button>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
9159
|
+
}
|
|
9160
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: CoreManualRefreshComponent, decorators: [{
|
|
9161
|
+
type: Component,
|
|
9162
|
+
args: [{ selector: 'core-manual-refresh', standalone: true, imports: [CommonModule, TranslateModule], template: "<div class=\"u-flex\">\n @if (config().showLastUpdate && lastUpdateTimeString()) {\n <p class=\"u-text\">{{ lastUpdateLabel() | translate }}: {{ lastUpdateTimeString() }}</p>\n }\n <button class=\"c-icon-btn\" [attr.aria-label]=\"ariaLabel()\" (click)=\"onRefreshClick()\">\n <span class=\"fa fa-arrows-rotate\"></span>\n </button>\n</div>" }]
|
|
9163
|
+
}], ctorParameters: () => [] });
|
|
9164
|
+
|
|
9036
9165
|
class ActiveFiltersEventService {
|
|
9037
9166
|
filterRemovedSubject = new Subject();
|
|
9038
9167
|
filtersClearedSubject = new Subject();
|
|
@@ -9107,6 +9236,9 @@ class GenericTableComponent {
|
|
|
9107
9236
|
showActiveFilters = input(false);
|
|
9108
9237
|
activeFiltersConfig = input({});
|
|
9109
9238
|
sortConfig = input(undefined);
|
|
9239
|
+
showManualRefresh = input(false);
|
|
9240
|
+
manualRefreshConfig = input(undefined);
|
|
9241
|
+
refreshButtonConfig = input(undefined);
|
|
9110
9242
|
customEdit = input();
|
|
9111
9243
|
customDelete = input();
|
|
9112
9244
|
customView = input();
|
|
@@ -9127,6 +9259,7 @@ class GenericTableComponent {
|
|
|
9127
9259
|
onClearFilters = output();
|
|
9128
9260
|
activeFilterRemoved = output();
|
|
9129
9261
|
activeFiltersCleared = output();
|
|
9262
|
+
dataRefreshed = output();
|
|
9130
9263
|
hasTabs = computed(() => this.modalTabs().length > 0);
|
|
9131
9264
|
allModalFields = computed(() => {
|
|
9132
9265
|
if (this.hasTabs()) {
|
|
@@ -9201,6 +9334,7 @@ class GenericTableComponent {
|
|
|
9201
9334
|
sentinel;
|
|
9202
9335
|
dropdownTrigger;
|
|
9203
9336
|
dropdown;
|
|
9337
|
+
manualRefreshComponent;
|
|
9204
9338
|
observer;
|
|
9205
9339
|
subscriptions = [];
|
|
9206
9340
|
isInitialized = false;
|
|
@@ -9236,7 +9370,6 @@ class GenericTableComponent {
|
|
|
9236
9370
|
};
|
|
9237
9371
|
onBeforeUnload(event) {
|
|
9238
9372
|
if (this.tableActionService.getIsModalOpen()) {
|
|
9239
|
-
console.log('🔄 Página descargándose, cerrando modal automáticamente');
|
|
9240
9373
|
this.tableActionService.closeModal();
|
|
9241
9374
|
}
|
|
9242
9375
|
}
|
|
@@ -10514,8 +10647,45 @@ class GenericTableComponent {
|
|
|
10514
10647
|
updateRowData(rowId, updatedFields, updateFunction) {
|
|
10515
10648
|
this.tableDataService.updateRowData(rowId, updatedFields, updateFunction);
|
|
10516
10649
|
}
|
|
10650
|
+
onManualRefresh() {
|
|
10651
|
+
if (this.endpoint() && this.modelFactory()) {
|
|
10652
|
+
this.tableDataService.loadDataWithParams(this.endpoint(), this.modelFactory(), this.getRefreshParams(), this.MAIN_DATA_LOADER_ID, this.customArrayKey());
|
|
10653
|
+
}
|
|
10654
|
+
else {
|
|
10655
|
+
this.updateDisplayedDataFromServer(this.dataInput());
|
|
10656
|
+
}
|
|
10657
|
+
if (this.manualRefreshComponent) {
|
|
10658
|
+
this.manualRefreshComponent.updateTimestamp();
|
|
10659
|
+
}
|
|
10660
|
+
this.dataRefreshed.emit();
|
|
10661
|
+
}
|
|
10662
|
+
getRefreshParams() {
|
|
10663
|
+
const filterParams = this.getFilterParams();
|
|
10664
|
+
const sortParams = this.tableSortService.generateServerSortParams();
|
|
10665
|
+
const paginationParams = this.enablePagination()
|
|
10666
|
+
? this.paginationService.getCurrentPaginationParams(this.tableId)
|
|
10667
|
+
: {};
|
|
10668
|
+
const cleanedCustomParams = this.getCleanedCustomParams(sortParams);
|
|
10669
|
+
return {
|
|
10670
|
+
...cleanedCustomParams,
|
|
10671
|
+
...filterParams,
|
|
10672
|
+
...sortParams,
|
|
10673
|
+
...paginationParams
|
|
10674
|
+
};
|
|
10675
|
+
}
|
|
10676
|
+
getManualRefreshConfig() {
|
|
10677
|
+
const defaultConfig = {
|
|
10678
|
+
id: 'table-refresh',
|
|
10679
|
+
showLastUpdate: true,
|
|
10680
|
+
lastUpdateLabel: 'table.lastUpdate',
|
|
10681
|
+
};
|
|
10682
|
+
return {
|
|
10683
|
+
...defaultConfig,
|
|
10684
|
+
...this.manualRefreshConfig()
|
|
10685
|
+
};
|
|
10686
|
+
}
|
|
10517
10687
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GenericTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10518
|
-
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 <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]=\"getVisibleDefaultActions(row, true)\"\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 getVisibleDefaultActions(row, false); 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, row)\"\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<core-generic-pagination \n [tableId]=\"tableId\" \n [isServerSide]=\"!!endpoint()\">\n</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", "customHasChanges"], 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"] }] });
|
|
10688
|
+
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 }, showManualRefresh: { classPropertyName: "showManualRefresh", publicName: "showManualRefresh", isSignal: true, isRequired: false, transformFunction: null }, manualRefreshConfig: { classPropertyName: "manualRefreshConfig", publicName: "manualRefreshConfig", isSignal: true, isRequired: false, transformFunction: null }, refreshButtonConfig: { classPropertyName: "refreshButtonConfig", publicName: "refreshButtonConfig", 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", dataRefreshed: "dataRefreshed", 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 }, { propertyName: "manualRefreshComponent", first: true, predicate: CoreManualRefreshComponent, 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<div class=\"c-table\" [class.in-modal]=\"inModal()\" [class.inline-edit-mode]=\"inlineEditService.isInlineEditMode()\">\n @if (showManualRefresh()) {\n <core-manual-refresh \n [config]=\"getManualRefreshConfig()\"\n (onRefresh)=\"onManualRefresh()\">\n </core-manual-refresh>\n }\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 <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]=\"getVisibleDefaultActions(row, true)\"\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 getVisibleDefaultActions(row, false); 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, row)\"\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<core-generic-pagination \n [tableId]=\"tableId\" \n [isServerSide]=\"!!endpoint()\">\n</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", "customHasChanges"], 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"] }, { kind: "component", type: CoreManualRefreshComponent, selector: "core-manual-refresh", inputs: ["config", "refreshId"], outputs: ["onRefresh", "timestampUpdated"] }] });
|
|
10519
10689
|
}
|
|
10520
10690
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GenericTableComponent, decorators: [{
|
|
10521
10691
|
type: Component,
|
|
@@ -10529,7 +10699,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
10529
10699
|
GenericButtonComponent,
|
|
10530
10700
|
DynamicFieldDirective,
|
|
10531
10701
|
ActiveFiltersComponent,
|
|
10532
|
-
|
|
10702
|
+
CoreManualRefreshComponent,
|
|
10703
|
+
], 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<div class=\"c-table\" [class.in-modal]=\"inModal()\" [class.inline-edit-mode]=\"inlineEditService.isInlineEditMode()\">\n @if (showManualRefresh()) {\n <core-manual-refresh \n [config]=\"getManualRefreshConfig()\"\n (onRefresh)=\"onManualRefresh()\">\n </core-manual-refresh>\n }\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 <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]=\"getVisibleDefaultActions(row, true)\"\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 getVisibleDefaultActions(row, false); 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, row)\"\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<core-generic-pagination \n [tableId]=\"tableId\" \n [isServerSide]=\"!!endpoint()\">\n</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"] }]
|
|
10533
10704
|
}], ctorParameters: () => [], propDecorators: { sentinel: [{
|
|
10534
10705
|
type: ViewChild,
|
|
10535
10706
|
args: ['sentinel', { static: false }]
|
|
@@ -10539,6 +10710,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
10539
10710
|
}], dropdown: [{
|
|
10540
10711
|
type: ViewChild,
|
|
10541
10712
|
args: ['dropdown']
|
|
10713
|
+
}], manualRefreshComponent: [{
|
|
10714
|
+
type: ViewChild,
|
|
10715
|
+
args: [CoreManualRefreshComponent]
|
|
10542
10716
|
}], onBeforeUnload: [{
|
|
10543
10717
|
type: HostListener,
|
|
10544
10718
|
args: ['window:beforeunload', ['$event']]
|
|
@@ -12069,12 +12243,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
12069
12243
|
// Este archivo es generado automáticamente por scripts/update-version.js
|
|
12070
12244
|
// No edites manualmente este archivo
|
|
12071
12245
|
const VERSION = {
|
|
12072
|
-
full: '2.12.
|
|
12246
|
+
full: '2.12.29',
|
|
12073
12247
|
major: 2,
|
|
12074
12248
|
minor: 12,
|
|
12075
|
-
patch:
|
|
12076
|
-
timestamp: '2025-09-
|
|
12077
|
-
buildDate: '
|
|
12249
|
+
patch: 29,
|
|
12250
|
+
timestamp: '2025-09-11T15:51:08.747Z',
|
|
12251
|
+
buildDate: '11/9/2025'
|
|
12078
12252
|
};
|
|
12079
12253
|
|
|
12080
12254
|
class MainNavComponent {
|
|
@@ -14962,6 +15136,373 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
14962
15136
|
args: ['document:keydown', ['$event']]
|
|
14963
15137
|
}] } });
|
|
14964
15138
|
|
|
15139
|
+
var GalleryLayoutType;
|
|
15140
|
+
(function (GalleryLayoutType) {
|
|
15141
|
+
GalleryLayoutType["MAIN_LEFT"] = "main-left";
|
|
15142
|
+
GalleryLayoutType["MAIN_RIGHT"] = "main-right";
|
|
15143
|
+
GalleryLayoutType["MAIN_TOP"] = "main-top";
|
|
15144
|
+
GalleryLayoutType["SINGLE"] = "single";
|
|
15145
|
+
})(GalleryLayoutType || (GalleryLayoutType = {}));
|
|
15146
|
+
|
|
15147
|
+
var GalleryAnimationType;
|
|
15148
|
+
(function (GalleryAnimationType) {
|
|
15149
|
+
GalleryAnimationType["FADE"] = "fade";
|
|
15150
|
+
GalleryAnimationType["SLIDE_DOWN"] = "slide-down";
|
|
15151
|
+
GalleryAnimationType["SLIDE_UP"] = "slide-up";
|
|
15152
|
+
GalleryAnimationType["SLIDE_LEFT"] = "slide-left";
|
|
15153
|
+
GalleryAnimationType["SLIDE_RIGHT"] = "slide-right";
|
|
15154
|
+
GalleryAnimationType["ZOOM"] = "zoom";
|
|
15155
|
+
GalleryAnimationType["NONE"] = "none";
|
|
15156
|
+
})(GalleryAnimationType || (GalleryAnimationType = {}));
|
|
15157
|
+
|
|
15158
|
+
class GalleryModalService {
|
|
15159
|
+
_isModalOpen = signal(false);
|
|
15160
|
+
_currentImages = signal([]);
|
|
15161
|
+
_currentIndex = signal(0);
|
|
15162
|
+
_isClosing = signal(false);
|
|
15163
|
+
isModalOpen = this._isModalOpen.asReadonly();
|
|
15164
|
+
currentImages = this._currentImages.asReadonly();
|
|
15165
|
+
currentIndex = this._currentIndex.asReadonly();
|
|
15166
|
+
currentImage = computed(() => {
|
|
15167
|
+
const images = this._currentImages();
|
|
15168
|
+
const index = this._currentIndex();
|
|
15169
|
+
return images[index] || null;
|
|
15170
|
+
});
|
|
15171
|
+
hasPrevious = computed(() => {
|
|
15172
|
+
return this._currentIndex() > 0;
|
|
15173
|
+
});
|
|
15174
|
+
hasNext = computed(() => {
|
|
15175
|
+
const images = this._currentImages();
|
|
15176
|
+
const index = this._currentIndex();
|
|
15177
|
+
return index < images.length - 1;
|
|
15178
|
+
});
|
|
15179
|
+
imageCounter = computed(() => {
|
|
15180
|
+
const total = this._currentImages().length;
|
|
15181
|
+
const current = this._currentIndex() + 1;
|
|
15182
|
+
return `${current} / ${total}`;
|
|
15183
|
+
});
|
|
15184
|
+
isClosing = this._isClosing.asReadonly();
|
|
15185
|
+
openModal(images, initialIndex = 0) {
|
|
15186
|
+
if (!images || images.length === 0) {
|
|
15187
|
+
console.warn('GalleryModalService: No se proporcionaron imágenes');
|
|
15188
|
+
return;
|
|
15189
|
+
}
|
|
15190
|
+
this._currentImages.set(images);
|
|
15191
|
+
this._currentIndex.set(Math.min(initialIndex, images.length - 1));
|
|
15192
|
+
this._isClosing.set(false);
|
|
15193
|
+
this._isModalOpen.set(true);
|
|
15194
|
+
}
|
|
15195
|
+
closeModal(immediate = false) {
|
|
15196
|
+
if (!this._isModalOpen()) {
|
|
15197
|
+
return;
|
|
15198
|
+
}
|
|
15199
|
+
if (immediate) {
|
|
15200
|
+
this._isModalOpen.set(false);
|
|
15201
|
+
this._isClosing.set(false);
|
|
15202
|
+
this._currentImages.set([]);
|
|
15203
|
+
this._currentIndex.set(0);
|
|
15204
|
+
}
|
|
15205
|
+
else {
|
|
15206
|
+
this._isClosing.set(true);
|
|
15207
|
+
setTimeout(() => {
|
|
15208
|
+
this._isModalOpen.set(false);
|
|
15209
|
+
this._isClosing.set(false);
|
|
15210
|
+
this._currentImages.set([]);
|
|
15211
|
+
this._currentIndex.set(0);
|
|
15212
|
+
}, 200);
|
|
15213
|
+
}
|
|
15214
|
+
}
|
|
15215
|
+
previousImage() {
|
|
15216
|
+
if (this.hasPrevious()) {
|
|
15217
|
+
this._currentIndex.update(index => index - 1);
|
|
15218
|
+
}
|
|
15219
|
+
}
|
|
15220
|
+
nextImage() {
|
|
15221
|
+
if (this.hasNext()) {
|
|
15222
|
+
this._currentIndex.update(index => index + 1);
|
|
15223
|
+
}
|
|
15224
|
+
}
|
|
15225
|
+
goToImage(index) {
|
|
15226
|
+
const images = this._currentImages();
|
|
15227
|
+
if (index >= 0 && index < images.length) {
|
|
15228
|
+
this._currentIndex.set(index);
|
|
15229
|
+
}
|
|
15230
|
+
}
|
|
15231
|
+
getImageIndexById(imageId) {
|
|
15232
|
+
const images = this._currentImages();
|
|
15233
|
+
return images.findIndex(img => img.id === imageId);
|
|
15234
|
+
}
|
|
15235
|
+
updateImages(images) {
|
|
15236
|
+
if (this._isModalOpen()) {
|
|
15237
|
+
this._currentImages.set(images);
|
|
15238
|
+
if (this._currentIndex() >= images.length) {
|
|
15239
|
+
this._currentIndex.set(Math.max(0, images.length - 1));
|
|
15240
|
+
}
|
|
15241
|
+
}
|
|
15242
|
+
}
|
|
15243
|
+
reset() {
|
|
15244
|
+
this._isModalOpen.set(false);
|
|
15245
|
+
this._isClosing.set(false);
|
|
15246
|
+
this._currentImages.set([]);
|
|
15247
|
+
this._currentIndex.set(0);
|
|
15248
|
+
}
|
|
15249
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GalleryModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
15250
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GalleryModalService, providedIn: 'root' });
|
|
15251
|
+
}
|
|
15252
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GalleryModalService, decorators: [{
|
|
15253
|
+
type: Injectable,
|
|
15254
|
+
args: [{
|
|
15255
|
+
providedIn: 'root'
|
|
15256
|
+
}]
|
|
15257
|
+
}] });
|
|
15258
|
+
|
|
15259
|
+
class GenericGalleryComponent {
|
|
15260
|
+
galleryModalService = inject(GalleryModalService);
|
|
15261
|
+
images = input.required();
|
|
15262
|
+
config = input({});
|
|
15263
|
+
imageClick = output();
|
|
15264
|
+
modalOpen = output();
|
|
15265
|
+
modalClose = output();
|
|
15266
|
+
imageChange = output();
|
|
15267
|
+
imageLoadingStates = signal(new Map());
|
|
15268
|
+
imageErrorStates = signal(new Map());
|
|
15269
|
+
SkeletonType = SkeletonType;
|
|
15270
|
+
SkeletonAnimation = SkeletonAnimation;
|
|
15271
|
+
defaultConfig = {
|
|
15272
|
+
layoutType: GalleryLayoutType.MAIN_LEFT,
|
|
15273
|
+
totalItems: 3,
|
|
15274
|
+
gap: '8px',
|
|
15275
|
+
borderRadius: '16px',
|
|
15276
|
+
showCounter: true,
|
|
15277
|
+
showNavigation: true,
|
|
15278
|
+
enableKeyboardNavigation: true,
|
|
15279
|
+
closeOnOutsideClick: true,
|
|
15280
|
+
showDescription: false,
|
|
15281
|
+
animationType: GalleryAnimationType.FADE,
|
|
15282
|
+
animationInDuration: 400,
|
|
15283
|
+
animationOutDuration: 200,
|
|
15284
|
+
lazyLoading: true
|
|
15285
|
+
};
|
|
15286
|
+
finalConfig = computed(() => ({
|
|
15287
|
+
...this.defaultConfig,
|
|
15288
|
+
...this.config()
|
|
15289
|
+
}));
|
|
15290
|
+
mainImage = computed(() => {
|
|
15291
|
+
const imgs = this.images();
|
|
15292
|
+
return imgs.length > 0 ? imgs[0] : null;
|
|
15293
|
+
});
|
|
15294
|
+
thumbnailImages = computed(() => {
|
|
15295
|
+
const imgs = this.images();
|
|
15296
|
+
const config = this.finalConfig();
|
|
15297
|
+
const totalItems = config.totalItems || 3;
|
|
15298
|
+
if (config.layoutType === GalleryLayoutType.MAIN_LEFT ||
|
|
15299
|
+
config.layoutType === GalleryLayoutType.MAIN_RIGHT) {
|
|
15300
|
+
return imgs.slice(1, totalItems);
|
|
15301
|
+
}
|
|
15302
|
+
return imgs.slice(0, totalItems);
|
|
15303
|
+
});
|
|
15304
|
+
containerClasses = computed(() => {
|
|
15305
|
+
const config = this.finalConfig();
|
|
15306
|
+
const classes = ['c-gallery-grid', 'js-gallery-grid'];
|
|
15307
|
+
if (config.layoutType === GalleryLayoutType.MAIN_LEFT ||
|
|
15308
|
+
config.layoutType === GalleryLayoutType.MAIN_RIGHT) {
|
|
15309
|
+
classes.push('c-gallery-grid--side-items');
|
|
15310
|
+
}
|
|
15311
|
+
if (config.customClass) {
|
|
15312
|
+
classes.push(config.customClass);
|
|
15313
|
+
}
|
|
15314
|
+
return classes.join(' ');
|
|
15315
|
+
});
|
|
15316
|
+
containerStyles = computed(() => {
|
|
15317
|
+
const config = this.finalConfig();
|
|
15318
|
+
const inputConfig = this.config();
|
|
15319
|
+
let sidesSize;
|
|
15320
|
+
if (inputConfig.sidesSize) {
|
|
15321
|
+
sidesSize = inputConfig.sidesSize;
|
|
15322
|
+
}
|
|
15323
|
+
else {
|
|
15324
|
+
switch (config.layoutType) {
|
|
15325
|
+
case GalleryLayoutType.MAIN_LEFT:
|
|
15326
|
+
case GalleryLayoutType.MAIN_TOP:
|
|
15327
|
+
sidesSize = '1.5fr 0.5fr';
|
|
15328
|
+
break;
|
|
15329
|
+
case GalleryLayoutType.MAIN_RIGHT:
|
|
15330
|
+
sidesSize = '0.5fr 1.5fr';
|
|
15331
|
+
break;
|
|
15332
|
+
default:
|
|
15333
|
+
sidesSize = '1.5fr 0.5fr';
|
|
15334
|
+
break;
|
|
15335
|
+
}
|
|
15336
|
+
}
|
|
15337
|
+
const styles = {
|
|
15338
|
+
'--total-items': config.totalItems || 3,
|
|
15339
|
+
'--sides-size': sidesSize,
|
|
15340
|
+
};
|
|
15341
|
+
return styles;
|
|
15342
|
+
});
|
|
15343
|
+
isModalOpen = this.galleryModalService.isModalOpen;
|
|
15344
|
+
isModalClosing = this.galleryModalService.isClosing;
|
|
15345
|
+
currentModalImage = this.galleryModalService.currentImage;
|
|
15346
|
+
currentModalIndex = this.galleryModalService.currentIndex;
|
|
15347
|
+
modalImageCounter = this.galleryModalService.imageCounter;
|
|
15348
|
+
canNavigatePrevious = this.galleryModalService.hasPrevious;
|
|
15349
|
+
canNavigateNext = this.galleryModalService.hasNext;
|
|
15350
|
+
keyboardListener;
|
|
15351
|
+
constructor() {
|
|
15352
|
+
effect(() => {
|
|
15353
|
+
const images = this.images();
|
|
15354
|
+
if (images.length > 0) {
|
|
15355
|
+
this.initializeImageStates();
|
|
15356
|
+
}
|
|
15357
|
+
});
|
|
15358
|
+
effect(() => {
|
|
15359
|
+
const config = this.finalConfig();
|
|
15360
|
+
if (config.enableKeyboardNavigation && this.isModalOpen()) {
|
|
15361
|
+
this.setupKeyboardNavigation();
|
|
15362
|
+
}
|
|
15363
|
+
else {
|
|
15364
|
+
this.removeKeyboardNavigation();
|
|
15365
|
+
}
|
|
15366
|
+
});
|
|
15367
|
+
effect(() => {
|
|
15368
|
+
const image = this.currentModalImage();
|
|
15369
|
+
const index = this.currentModalIndex();
|
|
15370
|
+
if (image && this.isModalOpen()) {
|
|
15371
|
+
this.imageChange.emit({ image, index });
|
|
15372
|
+
}
|
|
15373
|
+
});
|
|
15374
|
+
}
|
|
15375
|
+
ngOnDestroy() {
|
|
15376
|
+
this.removeKeyboardNavigation();
|
|
15377
|
+
this.galleryModalService.reset();
|
|
15378
|
+
}
|
|
15379
|
+
onImageClick(image, index) {
|
|
15380
|
+
this.imageClick.emit({ image, index });
|
|
15381
|
+
this.openModal(index);
|
|
15382
|
+
}
|
|
15383
|
+
openModal(initialIndex = 0) {
|
|
15384
|
+
const images = this.images();
|
|
15385
|
+
this.galleryModalService.openModal(images, initialIndex);
|
|
15386
|
+
this.modalOpen.emit({ images, index: initialIndex });
|
|
15387
|
+
}
|
|
15388
|
+
closeModal() {
|
|
15389
|
+
const config = this.finalConfig();
|
|
15390
|
+
const immediate = config.animationType === GalleryAnimationType.NONE;
|
|
15391
|
+
this.galleryModalService.closeModal(immediate);
|
|
15392
|
+
this.modalClose.emit();
|
|
15393
|
+
}
|
|
15394
|
+
previousImage() {
|
|
15395
|
+
this.galleryModalService.previousImage();
|
|
15396
|
+
}
|
|
15397
|
+
nextImage() {
|
|
15398
|
+
this.galleryModalService.nextImage();
|
|
15399
|
+
}
|
|
15400
|
+
onOverlayClick() {
|
|
15401
|
+
if (this.finalConfig().closeOnOutsideClick) {
|
|
15402
|
+
this.closeModal();
|
|
15403
|
+
}
|
|
15404
|
+
}
|
|
15405
|
+
setupKeyboardNavigation() {
|
|
15406
|
+
this.removeKeyboardNavigation();
|
|
15407
|
+
this.keyboardListener = (event) => {
|
|
15408
|
+
if (!this.isModalOpen())
|
|
15409
|
+
return;
|
|
15410
|
+
switch (event.key) {
|
|
15411
|
+
case 'ArrowLeft':
|
|
15412
|
+
event.preventDefault();
|
|
15413
|
+
this.previousImage();
|
|
15414
|
+
break;
|
|
15415
|
+
case 'ArrowRight':
|
|
15416
|
+
event.preventDefault();
|
|
15417
|
+
this.nextImage();
|
|
15418
|
+
break;
|
|
15419
|
+
case 'Escape':
|
|
15420
|
+
event.preventDefault();
|
|
15421
|
+
this.closeModal();
|
|
15422
|
+
break;
|
|
15423
|
+
}
|
|
15424
|
+
};
|
|
15425
|
+
document.addEventListener('keydown', this.keyboardListener);
|
|
15426
|
+
}
|
|
15427
|
+
removeKeyboardNavigation() {
|
|
15428
|
+
if (this.keyboardListener) {
|
|
15429
|
+
document.removeEventListener('keydown', this.keyboardListener);
|
|
15430
|
+
this.keyboardListener = undefined;
|
|
15431
|
+
}
|
|
15432
|
+
}
|
|
15433
|
+
getModalClasses() {
|
|
15434
|
+
const classes = ['c-gallery-modal', 'js-gallery-modal'];
|
|
15435
|
+
if (this.isModalOpen()) {
|
|
15436
|
+
classes.push('is-visible');
|
|
15437
|
+
}
|
|
15438
|
+
if (this.isModalClosing()) {
|
|
15439
|
+
classes.push('is-closing');
|
|
15440
|
+
}
|
|
15441
|
+
return classes.join(' ');
|
|
15442
|
+
}
|
|
15443
|
+
getModalStyles() {
|
|
15444
|
+
const config = this.finalConfig();
|
|
15445
|
+
return {
|
|
15446
|
+
'--_modal-animation-in': `${config.animationInDuration}ms`,
|
|
15447
|
+
'--_modal-animation-out': `${config.animationOutDuration}ms`
|
|
15448
|
+
};
|
|
15449
|
+
}
|
|
15450
|
+
getImageKey(image, index) {
|
|
15451
|
+
return image.id?.toString() || image.src || index.toString();
|
|
15452
|
+
}
|
|
15453
|
+
isImageLoading(image, index) {
|
|
15454
|
+
const key = this.getImageKey(image, index);
|
|
15455
|
+
return this.imageLoadingStates().get(key) ?? true;
|
|
15456
|
+
}
|
|
15457
|
+
hasImageError(image, index) {
|
|
15458
|
+
const key = this.getImageKey(image, index);
|
|
15459
|
+
return this.imageErrorStates().get(key) ?? false;
|
|
15460
|
+
}
|
|
15461
|
+
onImageLoad(image, index) {
|
|
15462
|
+
const key = this.getImageKey(image, index);
|
|
15463
|
+
const loadingStates = new Map(this.imageLoadingStates());
|
|
15464
|
+
const errorStates = new Map(this.imageErrorStates());
|
|
15465
|
+
loadingStates.set(key, false);
|
|
15466
|
+
errorStates.set(key, false);
|
|
15467
|
+
this.imageLoadingStates.set(loadingStates);
|
|
15468
|
+
this.imageErrorStates.set(errorStates);
|
|
15469
|
+
}
|
|
15470
|
+
onImageError(image, index) {
|
|
15471
|
+
const key = this.getImageKey(image, index);
|
|
15472
|
+
const loadingStates = new Map(this.imageLoadingStates());
|
|
15473
|
+
const errorStates = new Map(this.imageErrorStates());
|
|
15474
|
+
loadingStates.set(key, false);
|
|
15475
|
+
errorStates.set(key, true);
|
|
15476
|
+
this.imageLoadingStates.set(loadingStates);
|
|
15477
|
+
this.imageErrorStates.set(errorStates);
|
|
15478
|
+
}
|
|
15479
|
+
initializeImageStates() {
|
|
15480
|
+
const images = this.images();
|
|
15481
|
+
const loadingStates = new Map();
|
|
15482
|
+
const errorStates = new Map();
|
|
15483
|
+
images.forEach((image, index) => {
|
|
15484
|
+
const key = this.getImageKey(image, index);
|
|
15485
|
+
loadingStates.set(key, true);
|
|
15486
|
+
errorStates.set(key, false);
|
|
15487
|
+
});
|
|
15488
|
+
this.imageLoadingStates.set(loadingStates);
|
|
15489
|
+
this.imageErrorStates.set(errorStates);
|
|
15490
|
+
}
|
|
15491
|
+
getImageLoading(isMainImage = false) {
|
|
15492
|
+
const config = this.finalConfig();
|
|
15493
|
+
if (isMainImage) {
|
|
15494
|
+
return 'eager';
|
|
15495
|
+
}
|
|
15496
|
+
return config.lazyLoading ? 'lazy' : 'eager';
|
|
15497
|
+
}
|
|
15498
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GenericGalleryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15499
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: GenericGalleryComponent, isStandalone: true, selector: "core-generic-gallery", inputs: { images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imageClick: "imageClick", modalOpen: "modalOpen", modalClose: "modalClose", imageChange: "imageChange" }, providers: [], ngImport: i0, template: "<div [class]=\"containerClasses()\" \n [ngStyle]=\"containerStyles()\">\n \n @if (finalConfig().layoutType === 'main-left') {\n @if (mainImage()) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(mainImage()!, 0)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(mainImage()!, 0)\">\n \n @if (isImageLoading(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading image: ' + (mainImage()!.alt || 'Main image')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(mainImage()!, 0) && !hasImageError(mainImage()!, 0)) {\n <img\n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n [title]=\"mainImage()!.title || ''\"\n [loading]=\"getImageLoading(true)\"\n (click)=\"onImageClick(mainImage()!, 0)\">\n }\n \n @if (isImageLoading(mainImage()!, 0)) {\n <img \n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(mainImage()!, 0)\"\n (error)=\"onImageError(mainImage()!, 0)\">\n }\n \n @if (hasImageError(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error al cargar imagen</span>\n </div>\n </div>\n }\n </div>\n }\n \n @if (thumbnailImages().length > 0) {\n <div class=\"c-gallery-grid__imgs-xs\">\n @for (image of thumbnailImages(); track image.id || $index; let i = $index) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(image, i + 1)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(image, i + 1)\">\n \n @if (isImageLoading(image, i + 1)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading thumbnail: ' + (image.alt || 'Thumbnail')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(image, i + 1) && !hasImageError(image, i + 1)) {\n <img\n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n [title]=\"image.title || ''\"\n [loading]=\"getImageLoading(false)\"\n (click)=\"onImageClick(image, i + 1)\">\n }\n \n @if (isImageLoading(image, i + 1)) {\n <img \n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(image, i + 1)\"\n (error)=\"onImageError(image, i + 1)\">\n }\n \n @if (hasImageError(image, i + 1)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n \n @if (finalConfig().layoutType === 'main-right') {\n @if (thumbnailImages().length > 0) {\n <div class=\"c-gallery-grid__imgs-xs\">\n @for (image of thumbnailImages(); track image.id || $index; let i = $index) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(image, i + 1)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(image, i + 1)\">\n \n @if (isImageLoading(image, i + 1)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading thumbnail: ' + (image.alt || 'Thumbnail')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(image, i + 1) && !hasImageError(image, i + 1)) {\n <img\n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n [title]=\"image.title || ''\"\n [loading]=\"getImageLoading(false)\"\n (click)=\"onImageClick(image, i + 1)\">\n }\n \n @if (isImageLoading(image, i + 1)) {\n <img \n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(image, i + 1)\"\n (error)=\"onImageError(image, i + 1)\">\n }\n \n @if (hasImageError(image, i + 1)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n \n @if (mainImage()) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(mainImage()!, 0)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(mainImage()!, 0)\">\n \n @if (isImageLoading(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading image: ' + (mainImage()!.alt || 'Main image')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(mainImage()!, 0) && !hasImageError(mainImage()!, 0)) {\n <img\n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n [title]=\"mainImage()!.title || ''\"\n [loading]=\"getImageLoading(true)\"\n (click)=\"onImageClick(mainImage()!, 0)\">\n }\n \n @if (isImageLoading(mainImage()!, 0)) {\n <img \n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(mainImage()!, 0)\"\n (error)=\"onImageError(mainImage()!, 0)\">\n }\n \n @if (hasImageError(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error al cargar imagen</span>\n </div>\n </div>\n }\n </div>\n }\n }\n \n @if (finalConfig().layoutType === 'main-top') {\n @if (mainImage()) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(mainImage()!, 0)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(mainImage()!, 0)\">\n \n @if (isImageLoading(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading image: ' + (mainImage()!.alt || 'Main image')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(mainImage()!, 0) && !hasImageError(mainImage()!, 0)) {\n <img\n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n [title]=\"mainImage()!.title || ''\"\n [loading]=\"getImageLoading(true)\"\n (click)=\"onImageClick(mainImage()!, 0)\">\n }\n \n @if (isImageLoading(mainImage()!, 0)) {\n <img \n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(mainImage()!, 0)\"\n (error)=\"onImageError(mainImage()!, 0)\">\n }\n \n @if (hasImageError(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error al cargar imagen</span>\n </div>\n </div>\n }\n </div>\n }\n \n @if (thumbnailImages().length > 0) {\n <div class=\"c-gallery-grid__imgs-xs\">\n @for (image of thumbnailImages(); track image.id || $index; let i = $index) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(image, i + 1)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(image, i + 1)\">\n \n @if (isImageLoading(image, i + 1)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading thumbnail: ' + (image.alt || 'Thumbnail')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(image, i + 1) && !hasImageError(image, i + 1)) {\n <img\n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n [title]=\"image.title || ''\"\n [loading]=\"getImageLoading(false)\"\n (click)=\"onImageClick(image, i + 1)\">\n }\n \n @if (isImageLoading(image, i + 1)) {\n <img \n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(image, i + 1)\"\n (error)=\"onImageError(image, i + 1)\">\n }\n \n @if (hasImageError(image, i + 1)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n\n @if (finalConfig().layoutType === 'single') {\n @if (mainImage()) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(mainImage()!, 0)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(mainImage()!, 0)\">\n \n @if (isImageLoading(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading image: ' + (mainImage()!.alt || 'Single image')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(mainImage()!, 0) && !hasImageError(mainImage()!, 0)) {\n <img\n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n [title]=\"mainImage()!.title || ''\"\n [loading]=\"getImageLoading(true)\"\n (click)=\"onImageClick(mainImage()!, 0)\">\n }\n \n @if (isImageLoading(mainImage()!, 0)) {\n <img \n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(mainImage()!, 0)\"\n (error)=\"onImageError(mainImage()!, 0)\">\n }\n \n @if (hasImageError(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error al cargar imagen</span>\n </div>\n </div>\n }\n </div>\n }\n }\n</div>\n\n@if (isModalOpen()) {\n <div [class]=\"getModalClasses()\" \n [ngStyle]=\"getModalStyles()\">\n \n <span class=\"c-gallery-modal__close icon-cross-thin js-gallery-modal-close\" \n (click)=\"closeModal()\"></span>\n \n <div class=\"c-gallery-modal__overlay js-gallery-modal-close\" \n (click)=\"onOverlayClick()\"></div>\n \n <div class=\"c-gallery-modal__content\">\n \n @if (canNavigatePrevious()) {\n <button class=\"c-gallery-modal__nav c-gallery-modal__nav--prev icon-arrow-left\" \n (click)=\"previousImage()\"\n [attr.aria-label]=\"'Imagen anterior'\">\n </button>\n }\n \n @if (canNavigateNext()) {\n <button class=\"c-gallery-modal__nav c-gallery-modal__nav--next icon-arrow-right\" \n (click)=\"nextImage()\"\n [attr.aria-label]=\"'Siguiente imagen'\">\n </button>\n }\n \n @if (currentModalImage()) {\n <div class=\"c-gallery-modal__image-container\">\n <img \n [src]=\"currentModalImage()!.src\"\n [alt]=\"currentModalImage()!.alt || ''\"\n [title]=\"currentModalImage()!.title || ''\"\n loading=\"eager\"\n class=\"c-gallery-modal__image\">\n \n @if (finalConfig().showDescription && currentModalImage()!.description) {\n <div class=\"c-gallery-modal__description\">\n {{ currentModalImage()!.description }}\n </div>\n }\n </div>\n }\n \n @if (finalConfig().showCounter) {\n <div class=\"c-gallery-modal__counter\">\n {{ modalImageCounter() }}\n </div>\n }\n \n </div>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: GenericSkeletonComponent, selector: "core-generic-skeleton", inputs: ["config", "items", "type", "size", "width", "height", "animated", "animation", "lines", "customClass", "ariaLabel"] }] });
|
|
15500
|
+
}
|
|
15501
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GenericGalleryComponent, decorators: [{
|
|
15502
|
+
type: Component,
|
|
15503
|
+
args: [{ selector: 'core-generic-gallery', standalone: true, imports: [CommonModule, GenericSkeletonComponent], providers: [], template: "<div [class]=\"containerClasses()\" \n [ngStyle]=\"containerStyles()\">\n \n @if (finalConfig().layoutType === 'main-left') {\n @if (mainImage()) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(mainImage()!, 0)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(mainImage()!, 0)\">\n \n @if (isImageLoading(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading image: ' + (mainImage()!.alt || 'Main image')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(mainImage()!, 0) && !hasImageError(mainImage()!, 0)) {\n <img\n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n [title]=\"mainImage()!.title || ''\"\n [loading]=\"getImageLoading(true)\"\n (click)=\"onImageClick(mainImage()!, 0)\">\n }\n \n @if (isImageLoading(mainImage()!, 0)) {\n <img \n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(mainImage()!, 0)\"\n (error)=\"onImageError(mainImage()!, 0)\">\n }\n \n @if (hasImageError(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error al cargar imagen</span>\n </div>\n </div>\n }\n </div>\n }\n \n @if (thumbnailImages().length > 0) {\n <div class=\"c-gallery-grid__imgs-xs\">\n @for (image of thumbnailImages(); track image.id || $index; let i = $index) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(image, i + 1)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(image, i + 1)\">\n \n @if (isImageLoading(image, i + 1)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading thumbnail: ' + (image.alt || 'Thumbnail')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(image, i + 1) && !hasImageError(image, i + 1)) {\n <img\n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n [title]=\"image.title || ''\"\n [loading]=\"getImageLoading(false)\"\n (click)=\"onImageClick(image, i + 1)\">\n }\n \n @if (isImageLoading(image, i + 1)) {\n <img \n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(image, i + 1)\"\n (error)=\"onImageError(image, i + 1)\">\n }\n \n @if (hasImageError(image, i + 1)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n \n @if (finalConfig().layoutType === 'main-right') {\n @if (thumbnailImages().length > 0) {\n <div class=\"c-gallery-grid__imgs-xs\">\n @for (image of thumbnailImages(); track image.id || $index; let i = $index) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(image, i + 1)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(image, i + 1)\">\n \n @if (isImageLoading(image, i + 1)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading thumbnail: ' + (image.alt || 'Thumbnail')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(image, i + 1) && !hasImageError(image, i + 1)) {\n <img\n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n [title]=\"image.title || ''\"\n [loading]=\"getImageLoading(false)\"\n (click)=\"onImageClick(image, i + 1)\">\n }\n \n @if (isImageLoading(image, i + 1)) {\n <img \n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(image, i + 1)\"\n (error)=\"onImageError(image, i + 1)\">\n }\n \n @if (hasImageError(image, i + 1)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n \n @if (mainImage()) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(mainImage()!, 0)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(mainImage()!, 0)\">\n \n @if (isImageLoading(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading image: ' + (mainImage()!.alt || 'Main image')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(mainImage()!, 0) && !hasImageError(mainImage()!, 0)) {\n <img\n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n [title]=\"mainImage()!.title || ''\"\n [loading]=\"getImageLoading(true)\"\n (click)=\"onImageClick(mainImage()!, 0)\">\n }\n \n @if (isImageLoading(mainImage()!, 0)) {\n <img \n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(mainImage()!, 0)\"\n (error)=\"onImageError(mainImage()!, 0)\">\n }\n \n @if (hasImageError(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error al cargar imagen</span>\n </div>\n </div>\n }\n </div>\n }\n }\n \n @if (finalConfig().layoutType === 'main-top') {\n @if (mainImage()) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(mainImage()!, 0)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(mainImage()!, 0)\">\n \n @if (isImageLoading(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading image: ' + (mainImage()!.alt || 'Main image')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(mainImage()!, 0) && !hasImageError(mainImage()!, 0)) {\n <img\n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n [title]=\"mainImage()!.title || ''\"\n [loading]=\"getImageLoading(true)\"\n (click)=\"onImageClick(mainImage()!, 0)\">\n }\n \n @if (isImageLoading(mainImage()!, 0)) {\n <img \n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(mainImage()!, 0)\"\n (error)=\"onImageError(mainImage()!, 0)\">\n }\n \n @if (hasImageError(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error al cargar imagen</span>\n </div>\n </div>\n }\n </div>\n }\n \n @if (thumbnailImages().length > 0) {\n <div class=\"c-gallery-grid__imgs-xs\">\n @for (image of thumbnailImages(); track image.id || $index; let i = $index) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(image, i + 1)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(image, i + 1)\">\n \n @if (isImageLoading(image, i + 1)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading thumbnail: ' + (image.alt || 'Thumbnail')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(image, i + 1) && !hasImageError(image, i + 1)) {\n <img\n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n [title]=\"image.title || ''\"\n [loading]=\"getImageLoading(false)\"\n (click)=\"onImageClick(image, i + 1)\">\n }\n \n @if (isImageLoading(image, i + 1)) {\n <img \n [src]=\"image.thumbnail || image.src\"\n [alt]=\"image.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(image, i + 1)\"\n (error)=\"onImageError(image, i + 1)\">\n }\n \n @if (hasImageError(image, i + 1)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n\n @if (finalConfig().layoutType === 'single') {\n @if (mainImage()) {\n <div class=\"c-gallery-grid__img\" \n [class.c-gallery-grid__img--loading]=\"isImageLoading(mainImage()!, 0)\"\n [class.c-gallery-grid__img--error]=\"hasImageError(mainImage()!, 0)\">\n \n @if (isImageLoading(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__skeleton\">\n <core-generic-skeleton \n [type]=\"SkeletonType.IMAGE\"\n width=\"100%\"\n height=\"100%\"\n [animation]=\"SkeletonAnimation.SHIMMER\"\n [ariaLabel]=\"'Loading image: ' + (mainImage()!.alt || 'Single image')\">\n </core-generic-skeleton>\n </div>\n }\n \n @if (!isImageLoading(mainImage()!, 0) && !hasImageError(mainImage()!, 0)) {\n <img\n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n [title]=\"mainImage()!.title || ''\"\n [loading]=\"getImageLoading(true)\"\n (click)=\"onImageClick(mainImage()!, 0)\">\n }\n \n @if (isImageLoading(mainImage()!, 0)) {\n <img \n [src]=\"mainImage()!.src\"\n [alt]=\"mainImage()!.alt || ''\"\n style=\"display: none;\"\n (load)=\"onImageLoad(mainImage()!, 0)\"\n (error)=\"onImageError(mainImage()!, 0)\">\n }\n \n @if (hasImageError(mainImage()!, 0)) {\n <div class=\"c-gallery-grid__error\">\n <div class=\"c-gallery-grid__error-content\">\n <span class=\"c-gallery-grid__error-icon\">\uD83D\uDCF7</span>\n <span class=\"c-gallery-grid__error-text\">Error al cargar imagen</span>\n </div>\n </div>\n }\n </div>\n }\n }\n</div>\n\n@if (isModalOpen()) {\n <div [class]=\"getModalClasses()\" \n [ngStyle]=\"getModalStyles()\">\n \n <span class=\"c-gallery-modal__close icon-cross-thin js-gallery-modal-close\" \n (click)=\"closeModal()\"></span>\n \n <div class=\"c-gallery-modal__overlay js-gallery-modal-close\" \n (click)=\"onOverlayClick()\"></div>\n \n <div class=\"c-gallery-modal__content\">\n \n @if (canNavigatePrevious()) {\n <button class=\"c-gallery-modal__nav c-gallery-modal__nav--prev icon-arrow-left\" \n (click)=\"previousImage()\"\n [attr.aria-label]=\"'Imagen anterior'\">\n </button>\n }\n \n @if (canNavigateNext()) {\n <button class=\"c-gallery-modal__nav c-gallery-modal__nav--next icon-arrow-right\" \n (click)=\"nextImage()\"\n [attr.aria-label]=\"'Siguiente imagen'\">\n </button>\n }\n \n @if (currentModalImage()) {\n <div class=\"c-gallery-modal__image-container\">\n <img \n [src]=\"currentModalImage()!.src\"\n [alt]=\"currentModalImage()!.alt || ''\"\n [title]=\"currentModalImage()!.title || ''\"\n loading=\"eager\"\n class=\"c-gallery-modal__image\">\n \n @if (finalConfig().showDescription && currentModalImage()!.description) {\n <div class=\"c-gallery-modal__description\">\n {{ currentModalImage()!.description }}\n </div>\n }\n </div>\n }\n \n @if (finalConfig().showCounter) {\n <div class=\"c-gallery-modal__counter\">\n {{ modalImageCounter() }}\n </div>\n }\n \n </div>\n </div>\n}\n" }]
|
|
15504
|
+
}], ctorParameters: () => [] });
|
|
15505
|
+
|
|
14965
15506
|
class CacheBustingInterceptor {
|
|
14966
15507
|
intercept(req, next) {
|
|
14967
15508
|
if (req.url.includes('/assets/i18n/') && req.url.endsWith('.json')) {
|
|
@@ -15149,5 +15690,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
15149
15690
|
* Generated bundle index. Do not edit.
|
|
15150
15691
|
*/
|
|
15151
15692
|
|
|
15152
|
-
export { ActiveFiltersComponent, AlertComponent, AlertContainerComponent, AlertService, AlertType, ApiConfigurationProvider, BaseFieldComponent, ButtonContext, ButtonSize, ButtonType, CacheBustingInterceptor, CardComponent, CarouselComponent, ChatMessagePosition, ChatMessageType, CheckboxFieldComponent, ConfigurationModel, ConfirmationDialogComponent, ConfirmationDialogService, CoreHostDirective, CoreUiHttpLoaderFactory, CoreUiTranslateLoader, CoreUiTranslateService, DataListComponent, DataListItemComponent, DateFieldComponent, DateUtility, DatetimeFieldComponent, DialogActions, DocumentAction, DocumentDisplayMode, DropdownComponent, DropdownDirection, DropdownService, DynamicFieldDirective, DynamicFieldsHelper, FieldErrorsComponent, FieldType, FileFieldComponent, FileModel, FilePreviewActionType, FileTemplateModel, FileTemplateType, FileType, FileTypeModel, FileUploadService, FilterModalComponent, FilterService, FilterType, GenericButtonComponent, GenericChatComponent, GenericChatService, GenericDocumentationComponent, GenericModalComponent, GenericPaginationComponent, GenericRatingComponent, GenericSidebarComponent, GenericSkeletonComponent, 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, SkeletonAnimation, SkeletonService, SkeletonSize, SkeletonType, 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 };
|
|
15693
|
+
export { ActiveFiltersComponent, AlertComponent, AlertContainerComponent, AlertService, AlertType, ApiConfigurationProvider, BaseFieldComponent, ButtonContext, ButtonSize, ButtonType, CacheBustingInterceptor, CardComponent, CarouselComponent, ChatMessagePosition, ChatMessageType, CheckboxFieldComponent, ConfigurationModel, ConfirmationDialogComponent, ConfirmationDialogService, CoreHostDirective, CoreManualRefreshComponent, CoreUiHttpLoaderFactory, CoreUiTranslateLoader, CoreUiTranslateService, DataListComponent, DataListItemComponent, DateFieldComponent, DateUtility, DatetimeFieldComponent, DialogActions, DocumentAction, DocumentDisplayMode, DropdownComponent, DropdownDirection, DropdownService, DynamicFieldDirective, DynamicFieldsHelper, FieldErrorsComponent, FieldType, FileFieldComponent, FileModel, FilePreviewActionType, FileTemplateModel, FileTemplateType, FileType, FileTypeModel, FileUploadService, FilterModalComponent, FilterService, FilterType, GalleryAnimationType, GalleryLayoutType, GalleryModalService, GenericButtonComponent, GenericChatComponent, GenericChatService, GenericDocumentationComponent, GenericGalleryComponent, GenericModalComponent, GenericPaginationComponent, GenericRatingComponent, GenericSidebarComponent, GenericSkeletonComponent, GenericStepsComponent, GenericTableComponent, GenericTabsComponent, GenericTimelineComponent, GlobalApiConfigService, HeaderComponent, HeaderConfigurationService, HeaderElementType, HeaderService, HttpLoaderFactory, ImageModalComponent, ImageModalService, ImagePreviewComponent, LayoutAuth, LayoutBreakpoint, LayoutComponent, LayoutService, LayoutStateService, LayoutType, LoaderComponent, LoaderService, MainNavComponent, MainNavService, ManualRefreshService, 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, SkeletonAnimation, SkeletonService, SkeletonSize, SkeletonType, 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 };
|
|
15153
15694
|
//# sourceMappingURL=solcre-org-core-ui.mjs.map
|