ctt-puro 0.47.6 → 0.47.8

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.
@@ -4237,20 +4237,15 @@ class MapperService {
4237
4237
  else if (posts) {
4238
4238
  items = posts.map((item) => {
4239
4239
  const identifier = item?.blogs?.[0]?.nameIdentifier?.toLowerCase() || '';
4240
- const dynamicSiteId = identifier.includes('puro beach')
4241
- ? 3
4242
- : identifier.includes('puro hotel')
4243
- ? 2
4244
- : 1;
4245
- const prefix = dynamicSiteId === 3
4246
- ? '/purobeach'
4247
- : dynamicSiteId === 2
4248
- ? '/purohotels'
4249
- : '';
4250
- const button = Utils.mapButtons(dynamicSiteId, item?.buttons || [])?.[0];
4251
- if (button?.url) {
4252
- button.url = prefix + button.url;
4240
+ const normalized = identifier.toLowerCase().replace(/\s+/g, '');
4241
+ let siteId = 1;
4242
+ if (normalized.includes('purohotels')) {
4243
+ siteId = 2;
4244
+ }
4245
+ else if (normalized.includes('purobeach')) {
4246
+ siteId = 3;
4253
4247
  }
4248
+ const button = Utils.mapButtons(siteId, item?.buttons || [])?.[0];
4254
4249
  return {
4255
4250
  description: item?.texts?.title,
4256
4251
  img: this.getImageResponsive(item?.multimedia?.[0]),
@@ -4786,17 +4781,15 @@ class MapperService {
4786
4781
  else if (posts) {
4787
4782
  items = posts?.map((item) => {
4788
4783
  const identifier = item?.blogs?.[0]?.nameIdentifier?.toLowerCase() || '';
4789
- let prefix = '';
4790
- if (identifier.includes('puro beach')) {
4791
- prefix = '/purobeach';
4792
- }
4793
- else if (identifier.includes('puro hotel')) {
4794
- prefix = '/purohotels';
4784
+ const normalized = identifier.toLowerCase().replace(/\s+/g, '');
4785
+ let siteId = 1;
4786
+ if (normalized.includes('purohotels')) {
4787
+ siteId = 2;
4795
4788
  }
4796
- const button = Utils.mapButtons(this.siteId(), item?.buttons || [])?.[0];
4797
- if (button?.url) {
4798
- button.url = prefix + button.url;
4789
+ else if (normalized.includes('purobeach')) {
4790
+ siteId = 3;
4799
4791
  }
4792
+ const button = Utils.mapButtons(siteId, item?.buttons || [])?.[0];
4800
4793
  return {
4801
4794
  description: item?.texts?.title,
4802
4795
  img: this.getImageResponsive(item?.multimedia?.[0]),
@@ -5376,19 +5369,26 @@ class MapperService {
5376
5369
  };
5377
5370
  }
5378
5371
  mapInfoTable(props) {
5379
- //TODO: pendiente props
5372
+ const lists = props?.Lists;
5373
+ if (!Array.isArray(lists)) {
5374
+ return undefined;
5375
+ }
5380
5376
  return {
5381
- title: props?.texts?.title,
5382
5377
  pretitle: props?.texts?.pretitle,
5383
- tableItems: props?.table?.items?.map((item) => ({
5384
- title: item.title,
5385
- subtitle: item.subtitle,
5386
- columns: item.columns?.map((col) => ({
5387
- text: col.text,
5388
- icon: col.icon,
5389
- })),
5390
- })),
5391
- tableHeaders: props?.table?.headers,
5378
+ title: props?.texts?.title,
5379
+ columns: lists.map((list) => {
5380
+ const items = list.items ?? [];
5381
+ const header = items[0]?.title ?? '';
5382
+ const columnItems = items.slice(1).map((item) => ({
5383
+ title: item.title,
5384
+ text: item.text,
5385
+ icon: item.icon,
5386
+ }));
5387
+ return {
5388
+ header,
5389
+ items: columnItems,
5390
+ };
5391
+ }),
5392
5392
  infoItems: props?.infoItems,
5393
5393
  };
5394
5394
  }
@@ -7544,24 +7544,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
7544
7544
 
7545
7545
  class PuroInfoTableComponent {
7546
7546
  constructor() {
7547
- this.collapsed = [true, true, true];
7547
+ this.collapsed = [];
7548
+ }
7549
+ ngOnChanges(changes) {
7550
+ if (changes['columns']) {
7551
+ this.collapsed = this.columns?.map(() => true) ?? [];
7552
+ }
7548
7553
  }
7549
7554
  toggleCollapse(index) {
7550
7555
  this.collapsed[index] = !this.collapsed[index];
7551
7556
  }
7552
7557
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroInfoTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7553
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroInfoTableComponent, isStandalone: true, selector: "lib-puro-info-table", inputs: { pretitle: "pretitle", title: "title", tableItems: "tableItems", tableHeaders: "tableHeaders", infoItems: "infoItems" }, ngImport: i0, template: "<section class=\"info-table\">\n @if (pretitle) {\n <p class=\"info-table__pretitle\">{{ pretitle }}</p>\n }\n @if (title) {\n <h2 class=\"info-table__title\">{{ title }}</h2>\n }\n <div class=\"info-table__wrapper\">\n <ng-container [ngTemplateOutlet]=\"table\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"dropdowns\"></ng-container>\n @if (infoItems?.length){\n <ul class=\"info-table__list\">\n @for (item of infoItems || []; track $index) {\n <li>\n @if (item.label) {\n <a\n [href]=\"item.url\"\n [attr.aria-label]=\"item.label\"\n >\n {{ item.label }}\n </a>\n }@else {\n {{ item.text }}\n }\n </li>\n }\n </ul>\n }\n </div>\n</section>\n\n<ng-template #dropdowns>\n <div class=\"info-table__dropdowns\">\n @for (header of tableHeaders; let headerIndex = $index; track headerIndex) {\n @if (headerIndex === 0) {\n <div class=\"info-table__headItem info-table__headItem--first\">{{ header }}</div>\n }@else{\n @if (tableItems?.length){\n <div class=\"info-table__headItem\" (click)=\"toggleCollapse(headerIndex - 1)\">\n {{ header }}\n <i\n class=\"info-table__iconCollapse icon-91\"\n [ngClass]=\"{'info-table__iconCollapse--collapsed': !collapsed[headerIndex - 1],}\"\n ></i>\n </div>\n <div\n class=\"info-table__items\"\n [ngClass]=\"{ 'info-table__items--collapsed': collapsed[headerIndex - 1] }\"\n >\n @for (item of tableItems; track $index){\n <div class=\"info-table__item\">\n <p class=\"info-table__itemTitle\">\n {{ item.title }}\n <span class=\"info-table__itemSubtitle\">\n {{ item.subtitle}}\n </span>\n </p>\n @if (item.columns?.[headerIndex - 1]?.text){\n <span class=\"info-table__itemSubtitle\">\n {{ item.columns?.[headerIndex - 1]?.text }}\n </span>\n }@else if(item.columns?.[headerIndex - 1]?.icon){\n <span [class]=\"item.columns?.[headerIndex - 1]?.icon\"></span>\n }\n </div>\n }\n </div>\n }@else{\n <div class=\"info-table__headItem\">{{ header }}</div>\n }\n }\n }\n </div>\n</ng-template>\n\n<ng-template #table>\n <table class=\"info-table__table\">\n <tr class=\"info-table__row\">\n @for (header of tableHeaders; track $index) {\n <th class=\"info-table__headItem\">{{ header }}</th>\n }\n </tr>\n @for (item of tableItems; track $index) {\n <tr class=\"info-table__row\">\n <td class=\"info-table__item\">\n <p class=\"info-table__itemTitle\">\n {{ item.title}}\n </p>\n <span class=\"info-table__itemSubtitle\">\n {{ item.subtitle }}\n </span>\n </td>\n @for (column of item.columns; track $index) {\n <td class=\"info-table__item\">\n @if (column.text){\n {{ column.text }}\n }\n @else if(column.icon){\n <i [class]=\"'info-table__itemIcon ' + column.icon\"></i>\n }\n </td>\n }\n </tr>\n }\n </table>\n</ng-template>\n", styles: [".info-table{transition:all .5s;padding-block:3.5rem;padding-inline:4.5rem}@media (min-width: 768px){.info-table{padding-block:6.8rem 5.6rem}}@media (min-width: 1024px){.info-table{padding-block:4.8rem 4rem}}@media (min-width: 1680px){.info-table{padding-block:7rem 5.3rem}}.info-table__pretitle{width:100%;color:#b79955;font-weight:500;font-size:1.6rem;line-height:1.2;letter-spacing:.16rem;text-align:center;margin-bottom:2.5rem}@media (min-width: 768px){.info-table__pretitle{font-size:1.8rem;line-height:1.2127777778;letter-spacing:.18rem}}@media (min-width: 1280px){.info-table__pretitle{margin-bottom:5rem}}@media (min-width: 1680px){.info-table__pretitle{font-size:2rem;line-height:1.213;letter-spacing:.2rem}}.info-table__title{text-align:center;width:100%;color:#b79955;transition:all .5s;margin-bottom:2.5rem;font-size:2.8rem;line-height:1.3103571429;letter-spacing:.056rem}@media (min-width: 540px){.info-table__title{font-size:3.2rem;line-height:1.25;letter-spacing:.064rem}}@media (min-width: 768px){.info-table__title{font-size:4rem;line-height:1.25;letter-spacing:.08rem}}@media (min-width: 1280px){.info-table__title{margin-bottom:5rem}}@media (min-width: 1366px){.info-table__title{font-size:5.4rem;line-height:1.2888888889;letter-spacing:.108rem}}@media (min-width: 1680px){.info-table__title{font-size:6.4rem;line-height:.968;letter-spacing:.128rem}}.info-table__wrapper{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:38px}.info-table__table{border-spacing:28px;width:100%}@media (max-width: 1280px){.info-table__table{display:none}}.info-table__headItem,.info-table__item{padding:14px 32px;font-size:2rem;text-align:center;vertical-align:middle}@media (min-width: 1280px){.info-table__headItem,.info-table__item{padding:14px 42px}}.info-table__headItem:first-child,.info-table__item:first-child{text-align:left}.info-table__headItem{color:#616160;font-weight:700;line-height:24.18px;letter-spacing:.1em;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}@media (max-width: 1280px){.info-table__headItem{display:flex;align-items:center;justify-content:space-between}}.info-table__headItem:not(.info-table__headItem:last-child,.info-table__headItem:nth-child(6)),.info-table__headItem--notCollapsed{margin-bottom:28px}.info-table__headItem:first-child{color:#b79955;background-color:#fff}.info-table__headItem:nth-child(2){background-color:#ceb57766}.info-table__headItem:nth-child(4){background-color:#ceb577b3}.info-table__headItem:nth-child(6){background-color:#ceb577}@media (min-width: 1280px){.info-table__headItem:first-child{color:#b79955;background-color:#fff}.info-table__headItem:not(:first-child){text-align:center}.info-table__headItem:nth-child(2){background-color:#ceb57766}.info-table__headItem:nth-child(3){background-color:#ceb577b3}.info-table__headItem:nth-child(4){background-color:#ceb577}}.info-table__iconCollapse{width:17px;height:33px;color:#616160;opacity:.4;transition:all .2s;width:max-content;display:flex;align-items:center}.info-table__iconCollapse--collapsed{transform:rotate(180deg);right:-18.5px}.info-table__items{interpolate-size:allow-keywords;transition:all .2s;height:auto;overflow:hidden;margin-bottom:28px}.info-table__items--collapsed{height:0;margin:0}.info-table__item{color:#616160}@media (max-width: 1280px){.info-table__item{display:flex;justify-content:space-between;align-items:center;min-height:71px;background-color:#fff}.info-table__item:not(.info-table__item:last-child){margin-bottom:20px}}@media (min-width: 1280px){.info-table__item:first-child{background-color:#ceb6774d}.info-table__item:nth-child(2),.info-table__item:nth-child(4){background-color:#fff}.info-table__item:nth-child(3){background-color:#ceb67725}}.info-table__itemTitle{font-size:1.6rem;line-height:1.6em;font-weight:400;letter-spacing:.03em;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}@media (min-width: 768px){.info-table__itemTitle{font-size:2rem}}@media (max-width: 1280px){.info-table__itemTitle{display:flex;flex-direction:column}}.info-table__itemSubtitle{font-size:.9rem;font-weight:400;line-height:1.6rem;letter-spacing:.03em;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}@media (min-width: 768px){.info-table__itemSubtitle{font-size:1.2rem}}.info-table__itemIcon{font-size:1.8rem;width:20px;height:20px;display:block;position:relative;left:50%;transform:translate(-50%)}.info-table__list{padding:0 42px}.info-table__list li{font-weight:400;font-size:2rem;line-height:34px;letter-spacing:3%;opacity:.6;color:#616160;position:relative}.info-table__list li:before{content:\"\";width:3px;height:3px;border-radius:100%;background-color:#616160;display:inline-block;vertical-align:middle;margin-right:10px}.info-table__list li ::ng-deep a{text-decoration:underline}.info-table__dropdowns{width:100%}@media (min-width: 1280px){.info-table__dropdowns{display:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
7558
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroInfoTableComponent, isStandalone: true, selector: "lib-puro-info-table", inputs: { pretitle: "pretitle", title: "title", columns: "columns", infoItems: "infoItems" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"info-table generalMargin\">\n @if (pretitle) {\n <p class=\"info-table__pretitle\">{{ pretitle }}</p>\n }\n\n @if (title) {\n <h2 class=\"info-table__title\">{{ title }}</h2>\n }\n\n <div class=\"info-table__wrapper\">\n <!-- ===== Desktop table ===== -->\n <ng-container [ngTemplateOutlet]=\"table\"></ng-container>\n\n <!-- ===== Mobile dropdowns ===== -->\n <ng-container [ngTemplateOutlet]=\"dropdowns\"></ng-container>\n\n @if (infoItems?.length) {\n <ul class=\"info-table__list\">\n @for (item of infoItems; track $index) {\n <li>\n @if (item.label) {\n <a [href]=\"item.url\" [attr.aria-label]=\"item.label\">\n {{ item.label }}\n </a>\n } @else {\n {{ item.text }}\n }\n </li>\n }\n </ul>\n }\n </div>\n</section>\n\n<!-- ========================================================= -->\n<!-- ===================== MOBILE ============================ -->\n<!-- ========================================================= -->\n<ng-template #dropdowns>\n <div class=\"info-table__dropdowns\">\n @for (col of columns; let colIndex = $index; track colIndex) {\n <div\n class=\"info-table__headItem\"\n (click)=\"colIndex !== 0 && toggleCollapse(colIndex)\"\n >\n {{ col.header }}\n @if (colIndex !== 0) {\n <i\n class=\"info-table__iconCollapse icon-91\"\n [ngClass]=\"{\n 'info-table__iconCollapse--collapsed':\n !collapsed[colIndex],\n }\"\n ></i>\n }\n </div>\n\n <div\n class=\"info-table__items\"\n [ngClass]=\"{\n 'info-table__items--collapsed': collapsed[colIndex],\n }\"\n >\n @for (\n rowIndex of columns?.[0]?.items?.length\n ? [].constructor(columns?.[0]?.items?.length)\n : [];\n let i = $index;\n track i\n ) {\n <div class=\"info-table__item\">\n <!-- TITLE \u2192 SIEMPRE columna 0 -->\n <div class=\"info-table__itemLeft\">\n @if (columns?.[0]?.items?.[i]?.title) {\n <p class=\"info-table__itemTitle\">\n {{ columns?.[0]?.items?.[i]?.title }}\n </p>\n }\n @if (columns?.[0]?.items?.[i]?.text) {\n <span class=\"info-table__itemSubtitle\">\n {{ columns?.[0]?.items?.[i]?.text }}\n </span>\n }\n </div>\n\n <!-- VALUE \u2192 columna actual -->\n <div class=\"info-table__itemRight\">\n @if (\n columns?.[colIndex]?.items?.[i]?.title ===\n 'icon'\n ) {\n <div class=\"info-table__itemIcon\">\n <i\n class=\"icon-{{\n columns?.[colIndex]?.items?.[i]\n ?.icon\n }}\"\n ></i>\n </div>\n } @else if (\n columns?.[colIndex]?.items?.[i]?.title\n ) {\n <span class=\"info-table__itemTitle\">\n {{ columns?.[colIndex]?.items?.[i]?.title }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n\n<!-- ========================================================= -->\n<!-- ===================== DESKTOP =========================== -->\n<!-- ========================================================= -->\n<ng-template #table>\n <table class=\"info-table__table\">\n <!-- Headers -->\n <tr class=\"info-table__row\">\n @for (col of columns; track $index) {\n <th class=\"info-table__headItem\">\n {{ col.header }}\n </th>\n }\n </tr>\n\n <!-- Rows -->\n @for (\n rowIndex of columns?.[0]?.items?.length\n ? [].constructor(columns?.[0]?.items?.length)\n : [];\n let i = $index;\n track i\n ) {\n <tr class=\"info-table__row\">\n @for (col of columns; track $index) {\n <td class=\"info-table__item\">\n @if (col.items[i]?.title === 'icon') {\n <div class=\"info-table__itemIcon\">\n <i class=\"icon-{{ col.items[i]?.icon }}\"></i>\n </div>\n } @else if (col.items[i]?.title) {\n <p class=\"info-table__itemTitle\">\n {{ col.items[i]?.title }}\n </p>\n }\n\n @if (col.items[i]?.text) {\n <span class=\"info-table__itemSubtitle\">\n {{ col.items[i]?.text }}\n </span>\n }\n </td>\n }\n </tr>\n }\n </table>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
7554
7559
  }
7555
7560
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroInfoTableComponent, decorators: [{
7556
7561
  type: Component,
7557
- args: [{ selector: 'lib-puro-info-table', standalone: true, imports: [CommonModule], template: "<section class=\"info-table\">\n @if (pretitle) {\n <p class=\"info-table__pretitle\">{{ pretitle }}</p>\n }\n @if (title) {\n <h2 class=\"info-table__title\">{{ title }}</h2>\n }\n <div class=\"info-table__wrapper\">\n <ng-container [ngTemplateOutlet]=\"table\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"dropdowns\"></ng-container>\n @if (infoItems?.length){\n <ul class=\"info-table__list\">\n @for (item of infoItems || []; track $index) {\n <li>\n @if (item.label) {\n <a\n [href]=\"item.url\"\n [attr.aria-label]=\"item.label\"\n >\n {{ item.label }}\n </a>\n }@else {\n {{ item.text }}\n }\n </li>\n }\n </ul>\n }\n </div>\n</section>\n\n<ng-template #dropdowns>\n <div class=\"info-table__dropdowns\">\n @for (header of tableHeaders; let headerIndex = $index; track headerIndex) {\n @if (headerIndex === 0) {\n <div class=\"info-table__headItem info-table__headItem--first\">{{ header }}</div>\n }@else{\n @if (tableItems?.length){\n <div class=\"info-table__headItem\" (click)=\"toggleCollapse(headerIndex - 1)\">\n {{ header }}\n <i\n class=\"info-table__iconCollapse icon-91\"\n [ngClass]=\"{'info-table__iconCollapse--collapsed': !collapsed[headerIndex - 1],}\"\n ></i>\n </div>\n <div\n class=\"info-table__items\"\n [ngClass]=\"{ 'info-table__items--collapsed': collapsed[headerIndex - 1] }\"\n >\n @for (item of tableItems; track $index){\n <div class=\"info-table__item\">\n <p class=\"info-table__itemTitle\">\n {{ item.title }}\n <span class=\"info-table__itemSubtitle\">\n {{ item.subtitle}}\n </span>\n </p>\n @if (item.columns?.[headerIndex - 1]?.text){\n <span class=\"info-table__itemSubtitle\">\n {{ item.columns?.[headerIndex - 1]?.text }}\n </span>\n }@else if(item.columns?.[headerIndex - 1]?.icon){\n <span [class]=\"item.columns?.[headerIndex - 1]?.icon\"></span>\n }\n </div>\n }\n </div>\n }@else{\n <div class=\"info-table__headItem\">{{ header }}</div>\n }\n }\n }\n </div>\n</ng-template>\n\n<ng-template #table>\n <table class=\"info-table__table\">\n <tr class=\"info-table__row\">\n @for (header of tableHeaders; track $index) {\n <th class=\"info-table__headItem\">{{ header }}</th>\n }\n </tr>\n @for (item of tableItems; track $index) {\n <tr class=\"info-table__row\">\n <td class=\"info-table__item\">\n <p class=\"info-table__itemTitle\">\n {{ item.title}}\n </p>\n <span class=\"info-table__itemSubtitle\">\n {{ item.subtitle }}\n </span>\n </td>\n @for (column of item.columns; track $index) {\n <td class=\"info-table__item\">\n @if (column.text){\n {{ column.text }}\n }\n @else if(column.icon){\n <i [class]=\"'info-table__itemIcon ' + column.icon\"></i>\n }\n </td>\n }\n </tr>\n }\n </table>\n</ng-template>\n", styles: [".info-table{transition:all .5s;padding-block:3.5rem;padding-inline:4.5rem}@media (min-width: 768px){.info-table{padding-block:6.8rem 5.6rem}}@media (min-width: 1024px){.info-table{padding-block:4.8rem 4rem}}@media (min-width: 1680px){.info-table{padding-block:7rem 5.3rem}}.info-table__pretitle{width:100%;color:#b79955;font-weight:500;font-size:1.6rem;line-height:1.2;letter-spacing:.16rem;text-align:center;margin-bottom:2.5rem}@media (min-width: 768px){.info-table__pretitle{font-size:1.8rem;line-height:1.2127777778;letter-spacing:.18rem}}@media (min-width: 1280px){.info-table__pretitle{margin-bottom:5rem}}@media (min-width: 1680px){.info-table__pretitle{font-size:2rem;line-height:1.213;letter-spacing:.2rem}}.info-table__title{text-align:center;width:100%;color:#b79955;transition:all .5s;margin-bottom:2.5rem;font-size:2.8rem;line-height:1.3103571429;letter-spacing:.056rem}@media (min-width: 540px){.info-table__title{font-size:3.2rem;line-height:1.25;letter-spacing:.064rem}}@media (min-width: 768px){.info-table__title{font-size:4rem;line-height:1.25;letter-spacing:.08rem}}@media (min-width: 1280px){.info-table__title{margin-bottom:5rem}}@media (min-width: 1366px){.info-table__title{font-size:5.4rem;line-height:1.2888888889;letter-spacing:.108rem}}@media (min-width: 1680px){.info-table__title{font-size:6.4rem;line-height:.968;letter-spacing:.128rem}}.info-table__wrapper{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:38px}.info-table__table{border-spacing:28px;width:100%}@media (max-width: 1280px){.info-table__table{display:none}}.info-table__headItem,.info-table__item{padding:14px 32px;font-size:2rem;text-align:center;vertical-align:middle}@media (min-width: 1280px){.info-table__headItem,.info-table__item{padding:14px 42px}}.info-table__headItem:first-child,.info-table__item:first-child{text-align:left}.info-table__headItem{color:#616160;font-weight:700;line-height:24.18px;letter-spacing:.1em;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}@media (max-width: 1280px){.info-table__headItem{display:flex;align-items:center;justify-content:space-between}}.info-table__headItem:not(.info-table__headItem:last-child,.info-table__headItem:nth-child(6)),.info-table__headItem--notCollapsed{margin-bottom:28px}.info-table__headItem:first-child{color:#b79955;background-color:#fff}.info-table__headItem:nth-child(2){background-color:#ceb57766}.info-table__headItem:nth-child(4){background-color:#ceb577b3}.info-table__headItem:nth-child(6){background-color:#ceb577}@media (min-width: 1280px){.info-table__headItem:first-child{color:#b79955;background-color:#fff}.info-table__headItem:not(:first-child){text-align:center}.info-table__headItem:nth-child(2){background-color:#ceb57766}.info-table__headItem:nth-child(3){background-color:#ceb577b3}.info-table__headItem:nth-child(4){background-color:#ceb577}}.info-table__iconCollapse{width:17px;height:33px;color:#616160;opacity:.4;transition:all .2s;width:max-content;display:flex;align-items:center}.info-table__iconCollapse--collapsed{transform:rotate(180deg);right:-18.5px}.info-table__items{interpolate-size:allow-keywords;transition:all .2s;height:auto;overflow:hidden;margin-bottom:28px}.info-table__items--collapsed{height:0;margin:0}.info-table__item{color:#616160}@media (max-width: 1280px){.info-table__item{display:flex;justify-content:space-between;align-items:center;min-height:71px;background-color:#fff}.info-table__item:not(.info-table__item:last-child){margin-bottom:20px}}@media (min-width: 1280px){.info-table__item:first-child{background-color:#ceb6774d}.info-table__item:nth-child(2),.info-table__item:nth-child(4){background-color:#fff}.info-table__item:nth-child(3){background-color:#ceb67725}}.info-table__itemTitle{font-size:1.6rem;line-height:1.6em;font-weight:400;letter-spacing:.03em;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}@media (min-width: 768px){.info-table__itemTitle{font-size:2rem}}@media (max-width: 1280px){.info-table__itemTitle{display:flex;flex-direction:column}}.info-table__itemSubtitle{font-size:.9rem;font-weight:400;line-height:1.6rem;letter-spacing:.03em;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}@media (min-width: 768px){.info-table__itemSubtitle{font-size:1.2rem}}.info-table__itemIcon{font-size:1.8rem;width:20px;height:20px;display:block;position:relative;left:50%;transform:translate(-50%)}.info-table__list{padding:0 42px}.info-table__list li{font-weight:400;font-size:2rem;line-height:34px;letter-spacing:3%;opacity:.6;color:#616160;position:relative}.info-table__list li:before{content:\"\";width:3px;height:3px;border-radius:100%;background-color:#616160;display:inline-block;vertical-align:middle;margin-right:10px}.info-table__list li ::ng-deep a{text-decoration:underline}.info-table__dropdowns{width:100%}@media (min-width: 1280px){.info-table__dropdowns{display:none}}\n"] }]
7558
- }], ctorParameters: () => [], propDecorators: { pretitle: [{
7562
+ args: [{ selector: 'lib-puro-info-table', standalone: true, imports: [CommonModule], template: "<section class=\"info-table generalMargin\">\n @if (pretitle) {\n <p class=\"info-table__pretitle\">{{ pretitle }}</p>\n }\n\n @if (title) {\n <h2 class=\"info-table__title\">{{ title }}</h2>\n }\n\n <div class=\"info-table__wrapper\">\n <!-- ===== Desktop table ===== -->\n <ng-container [ngTemplateOutlet]=\"table\"></ng-container>\n\n <!-- ===== Mobile dropdowns ===== -->\n <ng-container [ngTemplateOutlet]=\"dropdowns\"></ng-container>\n\n @if (infoItems?.length) {\n <ul class=\"info-table__list\">\n @for (item of infoItems; track $index) {\n <li>\n @if (item.label) {\n <a [href]=\"item.url\" [attr.aria-label]=\"item.label\">\n {{ item.label }}\n </a>\n } @else {\n {{ item.text }}\n }\n </li>\n }\n </ul>\n }\n </div>\n</section>\n\n<!-- ========================================================= -->\n<!-- ===================== MOBILE ============================ -->\n<!-- ========================================================= -->\n<ng-template #dropdowns>\n <div class=\"info-table__dropdowns\">\n @for (col of columns; let colIndex = $index; track colIndex) {\n <div\n class=\"info-table__headItem\"\n (click)=\"colIndex !== 0 && toggleCollapse(colIndex)\"\n >\n {{ col.header }}\n @if (colIndex !== 0) {\n <i\n class=\"info-table__iconCollapse icon-91\"\n [ngClass]=\"{\n 'info-table__iconCollapse--collapsed':\n !collapsed[colIndex],\n }\"\n ></i>\n }\n </div>\n\n <div\n class=\"info-table__items\"\n [ngClass]=\"{\n 'info-table__items--collapsed': collapsed[colIndex],\n }\"\n >\n @for (\n rowIndex of columns?.[0]?.items?.length\n ? [].constructor(columns?.[0]?.items?.length)\n : [];\n let i = $index;\n track i\n ) {\n <div class=\"info-table__item\">\n <!-- TITLE \u2192 SIEMPRE columna 0 -->\n <div class=\"info-table__itemLeft\">\n @if (columns?.[0]?.items?.[i]?.title) {\n <p class=\"info-table__itemTitle\">\n {{ columns?.[0]?.items?.[i]?.title }}\n </p>\n }\n @if (columns?.[0]?.items?.[i]?.text) {\n <span class=\"info-table__itemSubtitle\">\n {{ columns?.[0]?.items?.[i]?.text }}\n </span>\n }\n </div>\n\n <!-- VALUE \u2192 columna actual -->\n <div class=\"info-table__itemRight\">\n @if (\n columns?.[colIndex]?.items?.[i]?.title ===\n 'icon'\n ) {\n <div class=\"info-table__itemIcon\">\n <i\n class=\"icon-{{\n columns?.[colIndex]?.items?.[i]\n ?.icon\n }}\"\n ></i>\n </div>\n } @else if (\n columns?.[colIndex]?.items?.[i]?.title\n ) {\n <span class=\"info-table__itemTitle\">\n {{ columns?.[colIndex]?.items?.[i]?.title }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n\n<!-- ========================================================= -->\n<!-- ===================== DESKTOP =========================== -->\n<!-- ========================================================= -->\n<ng-template #table>\n <table class=\"info-table__table\">\n <!-- Headers -->\n <tr class=\"info-table__row\">\n @for (col of columns; track $index) {\n <th class=\"info-table__headItem\">\n {{ col.header }}\n </th>\n }\n </tr>\n\n <!-- Rows -->\n @for (\n rowIndex of columns?.[0]?.items?.length\n ? [].constructor(columns?.[0]?.items?.length)\n : [];\n let i = $index;\n track i\n ) {\n <tr class=\"info-table__row\">\n @for (col of columns; track $index) {\n <td class=\"info-table__item\">\n @if (col.items[i]?.title === 'icon') {\n <div class=\"info-table__itemIcon\">\n <i class=\"icon-{{ col.items[i]?.icon }}\"></i>\n </div>\n } @else if (col.items[i]?.title) {\n <p class=\"info-table__itemTitle\">\n {{ col.items[i]?.title }}\n </p>\n }\n\n @if (col.items[i]?.text) {\n <span class=\"info-table__itemSubtitle\">\n {{ col.items[i]?.text }}\n </span>\n }\n </td>\n }\n </tr>\n }\n </table>\n</ng-template>\n" }]
7563
+ }], propDecorators: { pretitle: [{
7559
7564
  type: Input
7560
7565
  }], title: [{
7561
7566
  type: Input
7562
- }], tableItems: [{
7563
- type: Input
7564
- }], tableHeaders: [{
7567
+ }], columns: [{
7565
7568
  type: Input
7566
7569
  }], infoItems: [{
7567
7570
  type: Input
@@ -8384,7 +8387,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
8384
8387
 
8385
8388
  class PuroSlider1colComponent {
8386
8389
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroSlider1colComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8387
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroSlider1colComponent, isStandalone: true, selector: "lib-puro-slider1col", inputs: { title: "title", subtitle: "subtitle", button: "button", items: "items", tags: "tags", textColors: "textColors" }, ngImport: i0, template: "<section\n class=\"news js-active-slider generalMargin slider1col\"\n [puroSlider]=\"items\"\n data-slides_infinite=\"true\"\n data-slider_name=\"js-news-slider\"\n data-slider_showbtns=\"true\"\n data-slider_showdots=\"false\"\n data-slider_fade=\"false\"\n data-slider_autoplay=\"true\"\n data-slides_pc=\"1\"\n>\n @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'h2'\"\n cssClass=\"news__heading\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n }\n @if (subtitle) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.subtitle || 'p'\"\n cssClass=\"news__subHeading\"\n [color]=\"textColors?.subtitle\"\n [content]=\"subtitle\"\n ></lib-puro-dynamic-heading>\n }\n\n <div class=\"news__inner relative\">\n <div class=\"news__container\">\n <div class=\"js-news-slider news__slider\">\n @if (items) {\n @for (item of items; track $index) {\n <div>\n <a\n href=\"\"\n class=\"news__box\"\n [attr.aria-label]=\"item.description\"\n >\n <div class=\"news__graphic\">\n @if (item.img) {\n <img\n [ngSrc]=\"item.img.src\"\n width=\"391\"\n height=\"552\"\n class=\"news__graphic--img\"\n [alt]=\"item.img.alt\"\n decoding=\"async\"\n />\n }\n </div>\n <div class=\"news__content\">\n @if (item.description) {\n <p class=\"news__paragraph\">\n {{ item.description }}\n </p>\n }\n </div>\n </a>\n </div>\n }\n }\n </div>\n <div class=\"js-slider-arrows\"></div>\n </div>\n </div>\n\n @if (button) {\n <div class=\"btn__group hideBtn__only--lg\">\n <a\n [href]=\"button.url\"\n class=\"btn btn__primary--outline\"\n puroLinkType\n [linkType]=\"button.linkType\"\n [attr.aria-label]=\"button.label\"\n >\n <span>{{ button.label }}</span>\n </a>\n </div>\n }\n</section>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: PuroSliderDirective, selector: "[puroSlider]", inputs: ["puroSlider"] }, { kind: "directive", type: PuroLinkTypeDirective, selector: "[linkType]", inputs: ["linkType", "href", "modalClick"], outputs: ["bookClick", "anchorClicked"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }, { kind: "directive", type: AutoImageZoomWrapperDirective, selector: "img[ngSrc], img[src]" }, { kind: "component", type: PuroDynamicHeadingComponent, selector: "lib-puro-dynamic-heading", inputs: ["tag", "wrapper", "cssClass", "content", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8390
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroSlider1colComponent, isStandalone: true, selector: "lib-puro-slider1col", inputs: { title: "title", subtitle: "subtitle", button: "button", items: "items", tags: "tags", textColors: "textColors" }, ngImport: i0, template: "<section\n class=\"news js-active-slider generalMargin slider1col\"\n [puroSlider]=\"items\"\n data-slides_infinite=\"true\"\n data-slider_name=\"js-news-slider\"\n data-slider_showbtns=\"true\"\n data-slider_showdots=\"false\"\n data-slider_fade=\"false\"\n data-slider_autoplay=\"true\"\n data-slides_pc=\"1\"\n>\n @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'h2'\"\n cssClass=\"news__heading\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n }\n @if (subtitle) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.subtitle || 'p'\"\n cssClass=\"news__subHeading\"\n [color]=\"textColors?.subtitle\"\n [content]=\"subtitle\"\n ></lib-puro-dynamic-heading>\n }\n\n <div class=\"news__inner relative\">\n <div class=\"news__container\">\n <div class=\"js-news-slider news__slider\">\n @if (items) {\n @for (item of items; track $index) {\n <div>\n <a\n [href]=\"item?.link?.url\"\n [linkType]=\"item?.link?.linkType\"\n class=\"news__box\"\n [attr.aria-label]=\"item.description\"\n >\n <div class=\"news__graphic\">\n @if (item.img) {\n <img\n [ngSrc]=\"item.img.src\"\n width=\"391\"\n height=\"552\"\n class=\"news__graphic--img\"\n [alt]=\"item.img.alt\"\n decoding=\"async\"\n />\n }\n </div>\n <div class=\"news__content\">\n @if (item.description) {\n <p class=\"news__paragraph\">\n {{ item.description }}\n </p>\n }\n </div>\n </a>\n </div>\n }\n }\n </div>\n <div class=\"js-slider-arrows\"></div>\n </div>\n </div>\n\n @if (button) {\n <div class=\"btn__group hideBtn__only--lg\">\n <a\n [href]=\"button.url\"\n class=\"btn btn__primary--outline\"\n puroLinkType\n [linkType]=\"button.linkType\"\n [attr.aria-label]=\"button.label\"\n >\n <span>{{ button.label }}</span>\n </a>\n </div>\n }\n</section>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: PuroSliderDirective, selector: "[puroSlider]", inputs: ["puroSlider"] }, { kind: "directive", type: PuroLinkTypeDirective, selector: "[linkType]", inputs: ["linkType", "href", "modalClick"], outputs: ["bookClick", "anchorClicked"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }, { kind: "directive", type: AutoImageZoomWrapperDirective, selector: "img[ngSrc], img[src]" }, { kind: "component", type: PuroDynamicHeadingComponent, selector: "lib-puro-dynamic-heading", inputs: ["tag", "wrapper", "cssClass", "content", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8388
8391
  }
8389
8392
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroSlider1colComponent, decorators: [{
8390
8393
  type: Component,
@@ -8395,7 +8398,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
8395
8398
  NgOptimizedImage,
8396
8399
  AutoImageZoomWrapperDirective,
8397
8400
  PuroDynamicHeadingComponent,
8398
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section\n class=\"news js-active-slider generalMargin slider1col\"\n [puroSlider]=\"items\"\n data-slides_infinite=\"true\"\n data-slider_name=\"js-news-slider\"\n data-slider_showbtns=\"true\"\n data-slider_showdots=\"false\"\n data-slider_fade=\"false\"\n data-slider_autoplay=\"true\"\n data-slides_pc=\"1\"\n>\n @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'h2'\"\n cssClass=\"news__heading\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n }\n @if (subtitle) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.subtitle || 'p'\"\n cssClass=\"news__subHeading\"\n [color]=\"textColors?.subtitle\"\n [content]=\"subtitle\"\n ></lib-puro-dynamic-heading>\n }\n\n <div class=\"news__inner relative\">\n <div class=\"news__container\">\n <div class=\"js-news-slider news__slider\">\n @if (items) {\n @for (item of items; track $index) {\n <div>\n <a\n href=\"\"\n class=\"news__box\"\n [attr.aria-label]=\"item.description\"\n >\n <div class=\"news__graphic\">\n @if (item.img) {\n <img\n [ngSrc]=\"item.img.src\"\n width=\"391\"\n height=\"552\"\n class=\"news__graphic--img\"\n [alt]=\"item.img.alt\"\n decoding=\"async\"\n />\n }\n </div>\n <div class=\"news__content\">\n @if (item.description) {\n <p class=\"news__paragraph\">\n {{ item.description }}\n </p>\n }\n </div>\n </a>\n </div>\n }\n }\n </div>\n <div class=\"js-slider-arrows\"></div>\n </div>\n </div>\n\n @if (button) {\n <div class=\"btn__group hideBtn__only--lg\">\n <a\n [href]=\"button.url\"\n class=\"btn btn__primary--outline\"\n puroLinkType\n [linkType]=\"button.linkType\"\n [attr.aria-label]=\"button.label\"\n >\n <span>{{ button.label }}</span>\n </a>\n </div>\n }\n</section>\n" }]
8401
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section\n class=\"news js-active-slider generalMargin slider1col\"\n [puroSlider]=\"items\"\n data-slides_infinite=\"true\"\n data-slider_name=\"js-news-slider\"\n data-slider_showbtns=\"true\"\n data-slider_showdots=\"false\"\n data-slider_fade=\"false\"\n data-slider_autoplay=\"true\"\n data-slides_pc=\"1\"\n>\n @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'h2'\"\n cssClass=\"news__heading\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n }\n @if (subtitle) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.subtitle || 'p'\"\n cssClass=\"news__subHeading\"\n [color]=\"textColors?.subtitle\"\n [content]=\"subtitle\"\n ></lib-puro-dynamic-heading>\n }\n\n <div class=\"news__inner relative\">\n <div class=\"news__container\">\n <div class=\"js-news-slider news__slider\">\n @if (items) {\n @for (item of items; track $index) {\n <div>\n <a\n [href]=\"item?.link?.url\"\n [linkType]=\"item?.link?.linkType\"\n class=\"news__box\"\n [attr.aria-label]=\"item.description\"\n >\n <div class=\"news__graphic\">\n @if (item.img) {\n <img\n [ngSrc]=\"item.img.src\"\n width=\"391\"\n height=\"552\"\n class=\"news__graphic--img\"\n [alt]=\"item.img.alt\"\n decoding=\"async\"\n />\n }\n </div>\n <div class=\"news__content\">\n @if (item.description) {\n <p class=\"news__paragraph\">\n {{ item.description }}\n </p>\n }\n </div>\n </a>\n </div>\n }\n }\n </div>\n <div class=\"js-slider-arrows\"></div>\n </div>\n </div>\n\n @if (button) {\n <div class=\"btn__group hideBtn__only--lg\">\n <a\n [href]=\"button.url\"\n class=\"btn btn__primary--outline\"\n puroLinkType\n [linkType]=\"button.linkType\"\n [attr.aria-label]=\"button.label\"\n >\n <span>{{ button.label }}</span>\n </a>\n </div>\n }\n</section>\n" }]
8399
8402
  }], propDecorators: { title: [{
8400
8403
  type: Input
8401
8404
  }], subtitle: [{