@solcre-org/core-ui 2.15.3 → 2.15.5

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.
@@ -38,6 +38,10 @@
38
38
  "placeholder": "Select an option"
39
39
  }
40
40
  },
41
+ "mobile-header": {
42
+ "filter": "Filters",
43
+ "refresh": "Refresh data"
44
+ },
41
45
  "sidebar": {
42
46
  "title": "Admin panel",
43
47
  "logout": "Logout",
@@ -38,6 +38,10 @@
38
38
  "placeholder": "Seleccione una opción"
39
39
  }
40
40
  },
41
+ "mobile-header": {
42
+ "filter": "Filtros",
43
+ "refresh": "Actualizar"
44
+ },
41
45
  "sidebar": {
42
46
  "title": "Admin panel",
43
47
  "logout": "Cerrar sesión",
@@ -10842,6 +10842,7 @@ class HeaderService {
10842
10842
  showDefaultCreate = signal(true);
10843
10843
  headerOrder = signal(undefined);
10844
10844
  customTemplate = signal(null);
10845
+ mobileCustomTemplate = signal(null);
10845
10846
  filterButtonConfig = signal(undefined);
10846
10847
  createButtonConfig = signal(undefined);
10847
10848
  createButtonText = signal(undefined);
@@ -10906,6 +10907,12 @@ class HeaderService {
10906
10907
  setCustomTemplate(template) {
10907
10908
  this.customTemplate.set(template);
10908
10909
  }
10910
+ getMobileCustomTemplate() {
10911
+ return this.mobileCustomTemplate;
10912
+ }
10913
+ setMobileCustomTemplate(template) {
10914
+ this.mobileCustomTemplate.set(template);
10915
+ }
10909
10916
  clearHeaderData() {
10910
10917
  this.title.set('');
10911
10918
  this.text.set('');
@@ -10916,6 +10923,7 @@ class HeaderService {
10916
10923
  this.hasCreatePermission.set(false);
10917
10924
  this.headerOrder.set(undefined);
10918
10925
  this.customTemplate.set(null);
10926
+ this.mobileCustomTemplate.set(null);
10919
10927
  this.filterButtonConfig.set(undefined);
10920
10928
  this.createButtonConfig.set(undefined);
10921
10929
  this.createButtonText.set(undefined);
@@ -15197,6 +15205,10 @@ class MobileHeaderComponent {
15197
15205
  refreshClick = output();
15198
15206
  filterClick = output();
15199
15207
  shouldShow = this.mobileResolutionService.shouldShowMobileHeader;
15208
+ displayTitle = computed(() => {
15209
+ const headerTitle = this.headerService.getTitle()();
15210
+ return headerTitle || this.config().title;
15211
+ });
15200
15212
  shouldShowRefreshButton = computed(() => {
15201
15213
  const config = this.config();
15202
15214
  if (config.showRefreshButton !== undefined) {
@@ -15211,6 +15223,13 @@ class MobileHeaderComponent {
15211
15223
  }
15212
15224
  return this.headerService.hasFilters();
15213
15225
  });
15226
+ customTemplate = computed(() => {
15227
+ const configTemplate = this.config().customTemplate;
15228
+ if (configTemplate) {
15229
+ return configTemplate;
15230
+ }
15231
+ return this.headerService.getMobileCustomTemplate()();
15232
+ });
15214
15233
  onMenuClick() {
15215
15234
  this.menuClick.emit();
15216
15235
  }
@@ -15221,11 +15240,11 @@ class MobileHeaderComponent {
15221
15240
  this.filterClick.emit();
15222
15241
  }
15223
15242
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: MobileHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15224
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: MobileHeaderComponent, isStandalone: true, selector: "core-mobile-header", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { menuClick: "menuClick", refreshClick: "refreshClick", filterClick: "filterClick" }, ngImport: i0, template: "@if (shouldShow()) {\n <div class=\"c-header-mobile__holder\">\n <div class=\"c-header-mobile__row\">\n <div class=\"c-header-mobile__col\">\n <p class=\"c-header-mobile__title\">{{ config().title | translate }}</p>\n </div>\n <div class=\"c-header-mobile__col\">\n <button \n type=\"button\" \n class=\"c-header-mobile__menu icon-burger\"\n [attr.aria-label]=\"'mobile-header.menu' | translate\"\n (click)=\"onMenuClick()\">\n </button>\n </div>\n </div>\n </div>\n \n @if (shouldShowRefreshButton() || shouldShowFilterButton()) {\n <div class=\"c-header-mobile__subnav\" \n [class.c-header-mobile__subnav--light]=\"config().lightSubnav !== false\">\n <div class=\"u-flex u-flex--space-between\">\n @if (shouldShowRefreshButton()) {\n <button \n type=\"button\"\n class=\"c-btn c-btn--stroke c-btn--secondary\"\n (click)=\"onRefreshClick()\">\n <span class=\"icon-reload\"></span>\n {{ (config().refreshButtonLabel || 'mobile-header.refresh') | translate }}\n </button>\n }\n \n @if (shouldShowFilterButton()) {\n <button \n type=\"button\"\n class=\"c-btn c-btn--stroke\"\n (click)=\"onFilterClick()\">\n <span class=\"icon-filter\"></span>\n {{ (config().filterButtonLabel || 'mobile-header.filter') | translate }}\n </button>\n }\n </div>\n </div>\n }\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
15243
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: MobileHeaderComponent, isStandalone: true, selector: "core-mobile-header", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { menuClick: "menuClick", refreshClick: "refreshClick", filterClick: "filterClick" }, ngImport: i0, template: "@if (shouldShow()) {\n <div class=\"c-header-mobile__holder\">\n <div class=\"c-header-mobile__row\">\n <div class=\"c-header-mobile__col\">\n <p class=\"c-header-mobile__title\">{{ displayTitle() | translate }}</p>\n </div>\n <div class=\"c-header-mobile__col\"> <button \n type=\"button\" \n class=\"c-header-mobile__menu icon-burger\"\n [attr.aria-label]=\"'mobile-header.menu' | translate\"\n (click)=\"onMenuClick()\">\n </button>\n </div>\n </div>\n </div>\n \n @if (customTemplate()) {\n <ng-container *ngTemplateOutlet=\"customTemplate()!\"></ng-container>\n }\n \n @if (shouldShowRefreshButton() || shouldShowFilterButton()) {\n <div class=\"c-header-mobile__subnav\" \n [class.c-header-mobile__subnav--light]=\"config().lightSubnav !== false\">\n <div class=\"u-flex u-flex--space-between\">\n @if (shouldShowRefreshButton()) {\n <button \n type=\"button\"\n class=\"c-btn c-btn--stroke c-btn--secondary\"\n (click)=\"onRefreshClick()\">\n <span class=\"icon-reload\"></span>\n {{ (config().refreshButtonLabel || 'mobile-header.refresh') | translate }}\n </button>\n }\n \n @if (shouldShowFilterButton()) {\n <button \n type=\"button\"\n class=\"c-btn c-btn--stroke\"\n (click)=\"onFilterClick()\">\n <span class=\"icon-filter\"></span>\n {{ (config().filterButtonLabel || 'mobile-header.filter') | translate }}\n </button>\n }\n </div>\n </div>\n }\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
15225
15244
  }
15226
15245
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: MobileHeaderComponent, decorators: [{
15227
15246
  type: Component,
15228
- args: [{ selector: 'core-mobile-header', standalone: true, imports: [CommonModule, TranslateModule], template: "@if (shouldShow()) {\n <div class=\"c-header-mobile__holder\">\n <div class=\"c-header-mobile__row\">\n <div class=\"c-header-mobile__col\">\n <p class=\"c-header-mobile__title\">{{ config().title | translate }}</p>\n </div>\n <div class=\"c-header-mobile__col\">\n <button \n type=\"button\" \n class=\"c-header-mobile__menu icon-burger\"\n [attr.aria-label]=\"'mobile-header.menu' | translate\"\n (click)=\"onMenuClick()\">\n </button>\n </div>\n </div>\n </div>\n \n @if (shouldShowRefreshButton() || shouldShowFilterButton()) {\n <div class=\"c-header-mobile__subnav\" \n [class.c-header-mobile__subnav--light]=\"config().lightSubnav !== false\">\n <div class=\"u-flex u-flex--space-between\">\n @if (shouldShowRefreshButton()) {\n <button \n type=\"button\"\n class=\"c-btn c-btn--stroke c-btn--secondary\"\n (click)=\"onRefreshClick()\">\n <span class=\"icon-reload\"></span>\n {{ (config().refreshButtonLabel || 'mobile-header.refresh') | translate }}\n </button>\n }\n \n @if (shouldShowFilterButton()) {\n <button \n type=\"button\"\n class=\"c-btn c-btn--stroke\"\n (click)=\"onFilterClick()\">\n <span class=\"icon-filter\"></span>\n {{ (config().filterButtonLabel || 'mobile-header.filter') | translate }}\n </button>\n }\n </div>\n </div>\n }\n}\n" }]
15247
+ args: [{ selector: 'core-mobile-header', standalone: true, imports: [CommonModule, TranslateModule], template: "@if (shouldShow()) {\n <div class=\"c-header-mobile__holder\">\n <div class=\"c-header-mobile__row\">\n <div class=\"c-header-mobile__col\">\n <p class=\"c-header-mobile__title\">{{ displayTitle() | translate }}</p>\n </div>\n <div class=\"c-header-mobile__col\"> <button \n type=\"button\" \n class=\"c-header-mobile__menu icon-burger\"\n [attr.aria-label]=\"'mobile-header.menu' | translate\"\n (click)=\"onMenuClick()\">\n </button>\n </div>\n </div>\n </div>\n \n @if (customTemplate()) {\n <ng-container *ngTemplateOutlet=\"customTemplate()!\"></ng-container>\n }\n \n @if (shouldShowRefreshButton() || shouldShowFilterButton()) {\n <div class=\"c-header-mobile__subnav\" \n [class.c-header-mobile__subnav--light]=\"config().lightSubnav !== false\">\n <div class=\"u-flex u-flex--space-between\">\n @if (shouldShowRefreshButton()) {\n <button \n type=\"button\"\n class=\"c-btn c-btn--stroke c-btn--secondary\"\n (click)=\"onRefreshClick()\">\n <span class=\"icon-reload\"></span>\n {{ (config().refreshButtonLabel || 'mobile-header.refresh') | translate }}\n </button>\n }\n \n @if (shouldShowFilterButton()) {\n <button \n type=\"button\"\n class=\"c-btn c-btn--stroke\"\n (click)=\"onFilterClick()\">\n <span class=\"icon-filter\"></span>\n {{ (config().filterButtonLabel || 'mobile-header.filter') | translate }}\n </button>\n }\n </div>\n </div>\n }\n}\n" }]
15229
15248
  }] });
15230
15249
 
15231
15250
  var PermissionsActions;
@@ -15302,11 +15321,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
15302
15321
  // Este archivo es generado automáticamente por scripts/update-version.js
15303
15322
  // No edites manualmente este archivo
15304
15323
  const VERSION = {
15305
- full: '2.15.3',
15324
+ full: '2.15.5',
15306
15325
  major: 2,
15307
15326
  minor: 15,
15308
- patch: 3,
15309
- timestamp: '2025-10-10T15:39:20.114Z',
15327
+ patch: 5,
15328
+ timestamp: '2025-10-10T16:14:37.566Z',
15310
15329
  buildDate: '10/10/2025'
15311
15330
  };
15312
15331
 
@@ -15317,7 +15336,9 @@ class MainNavComponent {
15317
15336
  router = inject(Router);
15318
15337
  mobileResolutionService = inject(MobileResolutionService);
15319
15338
  isCollapsed = false;
15320
- isMobile = false;
15339
+ get isMobile() {
15340
+ return this.mobileResolutionService.shouldShowMobileHeader();
15341
+ }
15321
15342
  isBottomNavOpen = false;
15322
15343
  expandedSections = {};
15323
15344
  routerSubscription = new Subscription();
@@ -15353,7 +15374,6 @@ class MainNavComponent {
15353
15374
  };
15354
15375
  }
15355
15376
  ngOnInit() {
15356
- this.checkIfMobile();
15357
15377
  this.setupResizeListener();
15358
15378
  this.mainNavService.isCollapsed$.subscribe(isCollapsed => {
15359
15379
  const wasCollapsed = this.isCollapsed;
@@ -15381,6 +15401,9 @@ class MainNavComponent {
15381
15401
  this.routerSubscription.add(this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe((event) => {
15382
15402
  this.updateExpandedSectionsBasedOnCurrentRoute(event.url);
15383
15403
  this.updateBottomNavActiveState(event.url);
15404
+ if (this.isBottomNavOpen) {
15405
+ this.closeMobileNav();
15406
+ }
15384
15407
  }));
15385
15408
  this.updateExpandedSectionsBasedOnCurrentRoute(this.router.url);
15386
15409
  this.updateBottomNavActiveState(this.router.url);
@@ -15542,13 +15565,18 @@ class MainNavComponent {
15542
15565
  document.documentElement.classList.add('nav-expanded');
15543
15566
  }
15544
15567
  else {
15545
- document.body.classList.add('bottom-nav-closing');
15546
- setTimeout(() => {
15547
- document.body.classList.remove('bottom-nav-open');
15548
- document.body.classList.remove('bottom-nav-closing');
15549
- }, 700);
15568
+ this.closeMobileNav();
15550
15569
  }
15551
15570
  }
15571
+ closeMobileNav() {
15572
+ this.isBottomNavOpen = false;
15573
+ document.body.classList.add('bottom-nav-closing');
15574
+ document.documentElement.classList.remove('nav-expanded');
15575
+ setTimeout(() => {
15576
+ document.body.classList.remove('bottom-nav-open');
15577
+ document.body.classList.remove('bottom-nav-closing');
15578
+ }, 700);
15579
+ }
15552
15580
  onBottomNavItemClick(item) {
15553
15581
  if (item.disabled)
15554
15582
  return;
@@ -15581,14 +15609,10 @@ class MainNavComponent {
15581
15609
  }
15582
15610
  return classes;
15583
15611
  }
15584
- checkIfMobile() {
15585
- this.isMobile = window.innerWidth <= this.mobileResolutionService.breakpoint();
15586
- }
15587
15612
  setupResizeListener() {
15588
15613
  window.addEventListener('resize', this.onResize.bind(this));
15589
15614
  }
15590
15615
  onResize() {
15591
- this.checkIfMobile();
15592
15616
  if (!this.isMobile && this.isBottomNavOpen) {
15593
15617
  this.isBottomNavOpen = false;
15594
15618
  document.body.classList.remove('bottom-nav-open', 'bottom-nav-closing');