@xsmusices/ui 1.44.10 → 1.44.11

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.
@@ -17731,7 +17731,7 @@ class XSTableItemsEntityComponent {
17731
17731
  return !Array.isArray(value);
17732
17732
  }
17733
17733
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSTableItemsEntityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17734
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSTableItemsEntityComponent, isStandalone: true, selector: "xs-table-items-entity", inputs: { header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let i = $any(item());\n@switch (header().type) {\n @case ('artist') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n [viewTransitionName]=\"itemForImage?._id || i._id\"\n rounded=\"lg\"\n [objectFit]=\"'cover'\"\n size=\"full\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n }}\n </p>\n @if (i.country || itemForDisplay.country) {\n <div class=\"flex items-center gap-1\">\n <xs-image\n [src]=\"\n i.country?.code ||\n itemForDisplay.country?.code ||\n i.country ||\n itemForDisplay.country | countryFlag\n \"\n rounded=\"none\"\n [objectFit]=\"'cover'\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <p\n class=\"text-xs font-medium text-zinc-500 dark:text-zinc-400 leading-tight\"\n >\n {{\n i.country?.name ||\n itemForDisplay.country?.name ||\n (i.country | countryName) ||\n (itemForDisplay.country | countryName)\n }}\n </p>\n </div>\n }\n @if (!(i.country || itemForDisplay.country)) {\n <p\n class=\"text-xs font-medium text-zinc-500 dark:text-zinc-400 leading-tight\"\n >\n {{ textsService.notClaimed }}\n </p>\n }\n </div>\n </div>\n }\n @case ('artistNameAdmin') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n [viewTransitionName]=\"itemForImage?._id || i._id\"\n size=\"full\"\n rounded=\"lg\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ itemForDisplay.name || i.name | truncateText: 40 }}\n </p>\n @if (i.country || itemForDisplay.country) {\n <div class=\"flex items-center gap-1\">\n <xs-image\n [src]=\"\n i.country?.code ||\n itemForDisplay.country?.code ||\n i.country ||\n itemForDisplay.country | countryFlag\n \"\n rounded=\"none\"\n [objectFit]=\"'cover'\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n @if (\n i.countryResidence &&\n i.countryResidence?.code !== 'nd' &&\n i.countryResidence?.code !== i.country?.code\n ) {\n <xs-image\n [src]=\"\n i.countryResidence?.code ||\n itemForDisplay.countryResidence?.code ||\n i.countryResidence ||\n itemForDisplay.countryResidence | countryFlag\n \"\n rounded=\"none\"\n [objectFit]=\"'cover'\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n }\n <p class=\"text-xs font-extralight text-gray-400\">\n {{\n i.country?.name ||\n itemForDisplay.country?.name ||\n (i.country | countryName) ||\n (itemForDisplay.country | countryName)\n }}\n </p>\n </div>\n }\n @if (!(i.country || itemForDisplay.country)) {\n <p class=\"text-xs font-extralight text-gray-400\">\n {{ textsService.notClaimed }}\n </p>\n }\n </div>\n </div>\n }\n @case ('event') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'event'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n | truncateText: 40\n }}\n </p>\n </div>\n </div>\n }\n @case ('media') {\n @if (\n itemForDisplay && itemForDisplay.name !== 'Desconocido'\n ) {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'media'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name ||\n itemForDisplay.title ||\n i.name | truncateText: 40\n }}\n </p>\n @if (itemForDisplay || item()) {\n <div class=\"flex gap-1 items-center\">\n <p class=\"text-xs font-light text-gray-400\">\n @if (\n getArtists(itemForDisplay || item()).length > 0\n ) {\n @for (\n artist of getArtists(\n itemForDisplay || item()\n ) | sliceArray: 0 : 3;\n track $index\n ) {\n @if ($index !== 0) {\n <span> & </span>\n }\n {{ artist.name }}\n }\n } @else {\n {{\n (itemForDisplay.artist || i.artist)?.name ||\n (itemForDisplay.user || i.user)?.name ||\n '---'\n }}\n }\n </p>\n </div>\n }\n </div>\n </div>\n }\n }\n @case ('site') {\n @if (itemForDisplay?._id === ImportantItems.ANONYMOUS_SITE) {\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n -\n </p>\n } @else {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'site'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name ||\n itemForDisplay.title ||\n i.name | truncateText: 20\n }}\n </p>\n <div class=\"flex items-center gap-1\">\n @if (itemForDisplay.address?.country?.code) {\n <xs-image\n [src]=\"\n itemForDisplay.address?.country?.code\n | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n }\n <span class=\"text-xs font-light text-gray-400\">\n {{\n itemForDisplay.address?.region\n ? (itemForDisplay.address.region.name\n | fixRegion\n | truncateText: 20)\n : (itemForDisplay.address?.country?.code\n | countryName)\n }}\n </span>\n </div>\n </div>\n </div>\n }\n }\n @case ('siteItem') {\n @if (i.site) {\n @if (i.site._id === ImportantItems.ANONYMOUS_SITE) {\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n -\n </p>\n } @else {\n <div class=\"flex items-center w-64 gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"i.site\"\n [typeItem]=\"'site'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-10 h-10\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.site.name | truncateText: 20 }}\n </p>\n <div\n class=\"flex items-center gap-1 text-xs font-light text-gray-400\"\n >\n <xs-image\n [src]=\"\n i.site.address?.country?.code | countryFlag\n \"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <span>\n {{\n i.site.address?.region\n ? (i.site.address?.region.name\n | fixRegion\n | truncateText: 20)\n : (i.site.address?.town | truncateText: 20)\n }}\n </span>\n </div>\n </div>\n </div>\n }\n }\n }\n @case ('organization') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'organization'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n | truncateText: 40\n }}\n </p>\n <div class=\"flex items-center gap-1\">\n @if (\n itemForDisplay.country?.code ||\n (itemForDisplay.country &&\n itemForDisplay.country.length &&\n isNotArray(itemForDisplay.country))\n ) {\n <xs-image\n [src]=\"\n itemForDisplay.country?.code ||\n itemForDisplay.country | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n }\n <span class=\"text-xs font-light text-gray-400\">\n {{\n itemForDisplay.country?.name ||\n (itemForDisplay.country &&\n itemForDisplay.country.length &&\n isNotArray(itemForDisplay.country)\n ? (itemForDisplay.country | countryName)\n : '')\n }}\n </span>\n </div>\n </div>\n </div>\n }\n @case ('organizationObject') {\n @if (i.organizations?.length > 0) {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"i.organizations[0]\"\n [typeItem]=\"'organization'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col justify-center gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.organizations[0]?.name | truncateText: 40 }}\n </p>\n @if (i.organizations[0].country) {\n <div class=\"flex items-center gap-1\">\n <xs-image\n [src]=\"\n i.organizations[0].country?.code ||\n i.organizations[0].country | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <span class=\"text-xs font-light text-gray-400\">\n {{\n i.organizations[0].country?.name ||\n (i.organizations[0].country | countryName)\n }}\n </span>\n </div>\n }\n </div>\n @if (i.organizations.length > 1) {\n <p class=\"text-sm text-gray-500\">\n +{{ i.organizations.length - 1 }}\n </p>\n }\n </div>\n }\n @if (!i.organizations || i.organizations.length === 0) {\n <p>{{ textsService.t('TABLE_ITEMS.NO_LABEL') }}</p>\n }\n }\n @case ('equipment') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"item()\"\n [typeItem]=\"'equipment'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.name | truncateText: 40 }}\n </p>\n <p class=\"text-xs font-extralight\">\n {{\n i.manufacturer ??\n (i.equipment && i.equipment.length\n ? i.equipment[0]\n : '')\n }}\n </p>\n </div>\n </div>\n }\n @case ('equipmentSetupArtist') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-8\">\n <xs-image\n [item]=\"i.artist\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-8 h-8\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"mr-2 text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.artist.name | truncateText: 40 }}\n </p>\n <p\n class=\"flex items-center gap-1 text-xs leading-none font-extralight\"\n >\n <xs-image\n [src]=\"i.artist.country?.code | countryFlag\"\n rounded=\"none\"\n objectFit=\"cover\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n {{ i.artist.country?.name | truncateText: 20 }}\n </p>\n </div>\n </div>\n }\n @case ('itemContactManagement') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-8\">\n <xs-image\n [item]=\"item()\"\n [typeItem]=\"i.type\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-8 h-8\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"mr-2 text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.name | truncateText: 40 }}\n </p>\n <div class=\"flex items-center gap-1\">\n <xs-image\n [item]=\"i.country\"\n [typeItem]=\"'flag'\"\n [imageType]=\"'small'\"\n rounded=\"none\"\n customClass=\"w-4 h-4\"\n ></xs-image>\n <p class=\"text-xs font-extralight\">\n {{ i.country?.name }}\n </p>\n </div>\n </div>\n </div>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: XSImageComponent, selector: "xs-image", inputs: ["config", "viewTransitionName", "src", "alt", "width", "height", "size", "rounded", "objectFit", "clickable", "item", "typeItem", "imageType", "fallbackSrc", "loading", "priority", "customClass", "generateAvatar"], outputs: ["onClick", "onLoad", "onError"] }, { kind: "pipe", type: CountryFlagPipe, name: "countryFlag" }, { kind: "pipe", type: CountryNamePipe, name: "countryName" }, { kind: "pipe", type: TruncateTextPipe, name: "truncateText" }, { kind: "pipe", type: FixRegionPipe, name: "fixRegion" }, { kind: "pipe", type: SliceArrayPipe, name: "sliceArray" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17734
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSTableItemsEntityComponent, isStandalone: true, selector: "xs-table-items-entity", inputs: { header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let i = $any(item());\n@switch (header().type) {\n @case ('artist') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n [viewTransitionName]=\"itemForImage?._id || i._id\"\n rounded=\"lg\"\n [objectFit]=\"'cover'\"\n size=\"full\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n }}\n </p>\n @if (i.country || itemForDisplay.country) {\n <div class=\"flex items-center gap-1\">\n <xs-image\n [src]=\"\n i.country?.code ||\n itemForDisplay.country?.code ||\n i.country ||\n itemForDisplay.country | countryFlag\n \"\n rounded=\"none\"\n [objectFit]=\"'cover'\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <p\n class=\"text-xs font-medium text-zinc-500 dark:text-zinc-400 leading-tight\"\n >\n {{\n i.country?.name ||\n itemForDisplay.country?.name ||\n (i.country | countryName) ||\n (itemForDisplay.country | countryName)\n }}\n </p>\n </div>\n }\n @if (!(i.country || itemForDisplay.country)) {\n <p\n class=\"text-xs font-medium text-zinc-500 dark:text-zinc-400 leading-tight\"\n >\n {{ textsService.notClaimed }}\n </p>\n }\n </div>\n </div>\n }\n @case ('artistNameAdmin') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n [viewTransitionName]=\"itemForImage?._id || i._id\"\n size=\"full\"\n rounded=\"lg\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ itemForDisplay.name || i.name | truncateText: 40 }}\n </p>\n @let ownerId =\n i.user?._id || itemForDisplay.user?._id;\n @let ownerName =\n i.user?.name || itemForDisplay.user?.name;\n @if (!ownerId || ownerId === ImportantItems.ADMIN_USER) {\n <span\n class=\"w-fit rounded bg-zinc-500/20 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-[0.12em] text-zinc-400\"\n >\n {{ textsService.notClaimed }}\n </span>\n } @else if (ownerName) {\n <p\n class=\"flex items-center gap-1 text-xs font-medium leading-tight text-zinc-500 dark:text-zinc-400\"\n >\n <span class=\"truncate\">{{\n ownerName | truncateText: 25\n }}</span>\n <svg\n [attr.aria-label]=\"\n textsService.t('TABLE_ITEMS.VERIFIED')\n \"\n fill=\"rgb(0, 149, 246)\"\n height=\"10\"\n viewBox=\"0 0 40 40\"\n width=\"10\"\n class=\"shrink-0\"\n >\n <path\n d=\"M19.998 3.094 14.638 0l-2.972 5.15H5.432v6.354L0 14.64 3.094 20 0 25.359l5.432 3.137v5.905h5.975L14.638 40l5.36-3.094L25.358 40l3.232-5.6h6.162v-6.01L40 25.359 36.905 20 40 14.641l-5.248-3.03v-6.46h-6.419L25.358 0l-5.36 3.094Zm7.415 11.225 2.254 2.287-11.43 11.5-6.835-6.93 2.244-2.258 4.587 4.581 9.18-9.18Z\"\n fill-rule=\"evenodd\"\n ></path>\n </svg>\n </p>\n }\n </div>\n </div>\n }\n @case ('event') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'event'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n | truncateText: 40\n }}\n </p>\n </div>\n </div>\n }\n @case ('media') {\n @if (\n itemForDisplay && itemForDisplay.name !== 'Desconocido'\n ) {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'media'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name ||\n itemForDisplay.title ||\n i.name | truncateText: 40\n }}\n </p>\n @if (itemForDisplay || item()) {\n <div class=\"flex gap-1 items-center\">\n <p class=\"text-xs font-light text-gray-400\">\n @if (\n getArtists(itemForDisplay || item()).length > 0\n ) {\n @for (\n artist of getArtists(\n itemForDisplay || item()\n ) | sliceArray: 0 : 3;\n track $index\n ) {\n @if ($index !== 0) {\n <span> & </span>\n }\n {{ artist.name }}\n }\n } @else {\n {{\n (itemForDisplay.artist || i.artist)?.name ||\n (itemForDisplay.user || i.user)?.name ||\n '---'\n }}\n }\n </p>\n </div>\n }\n </div>\n </div>\n }\n }\n @case ('site') {\n @if (itemForDisplay?._id === ImportantItems.ANONYMOUS_SITE) {\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n -\n </p>\n } @else {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'site'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name ||\n itemForDisplay.title ||\n i.name | truncateText: 20\n }}\n </p>\n <div class=\"flex items-center gap-1\">\n @if (itemForDisplay.address?.country?.code) {\n <xs-image\n [src]=\"\n itemForDisplay.address?.country?.code\n | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n }\n <span class=\"text-xs font-light text-gray-400\">\n {{\n itemForDisplay.address?.region\n ? (itemForDisplay.address.region.name\n | fixRegion\n | truncateText: 20)\n : (itemForDisplay.address?.country?.code\n | countryName)\n }}\n </span>\n </div>\n </div>\n </div>\n }\n }\n @case ('siteItem') {\n @if (i.site) {\n @if (i.site._id === ImportantItems.ANONYMOUS_SITE) {\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n -\n </p>\n } @else {\n <div class=\"flex items-center w-64 gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"i.site\"\n [typeItem]=\"'site'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-10 h-10\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.site.name | truncateText: 20 }}\n </p>\n <div\n class=\"flex items-center gap-1 text-xs font-light text-gray-400\"\n >\n <xs-image\n [src]=\"\n i.site.address?.country?.code | countryFlag\n \"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <span>\n {{\n i.site.address?.region\n ? (i.site.address?.region.name\n | fixRegion\n | truncateText: 20)\n : (i.site.address?.town | truncateText: 20)\n }}\n </span>\n </div>\n </div>\n </div>\n }\n }\n }\n @case ('organization') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'organization'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n | truncateText: 40\n }}\n </p>\n <div class=\"flex items-center gap-1\">\n @if (\n itemForDisplay.country?.code ||\n (itemForDisplay.country &&\n itemForDisplay.country.length &&\n isNotArray(itemForDisplay.country))\n ) {\n <xs-image\n [src]=\"\n itemForDisplay.country?.code ||\n itemForDisplay.country | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n }\n <span class=\"text-xs font-light text-gray-400\">\n {{\n itemForDisplay.country?.name ||\n (itemForDisplay.country &&\n itemForDisplay.country.length &&\n isNotArray(itemForDisplay.country)\n ? (itemForDisplay.country | countryName)\n : '')\n }}\n </span>\n </div>\n </div>\n </div>\n }\n @case ('organizationObject') {\n @if (i.organizations?.length > 0) {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"i.organizations[0]\"\n [typeItem]=\"'organization'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col justify-center gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.organizations[0]?.name | truncateText: 40 }}\n </p>\n @if (i.organizations[0].country) {\n <div class=\"flex items-center gap-1\">\n <xs-image\n [src]=\"\n i.organizations[0].country?.code ||\n i.organizations[0].country | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <span class=\"text-xs font-light text-gray-400\">\n {{\n i.organizations[0].country?.name ||\n (i.organizations[0].country | countryName)\n }}\n </span>\n </div>\n }\n </div>\n @if (i.organizations.length > 1) {\n <p class=\"text-sm text-gray-500\">\n +{{ i.organizations.length - 1 }}\n </p>\n }\n </div>\n }\n @if (!i.organizations || i.organizations.length === 0) {\n <p>{{ textsService.t('TABLE_ITEMS.NO_LABEL') }}</p>\n }\n }\n @case ('equipment') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"item()\"\n [typeItem]=\"'equipment'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.name | truncateText: 40 }}\n </p>\n <p class=\"text-xs font-extralight\">\n {{\n i.manufacturer ??\n (i.equipment && i.equipment.length\n ? i.equipment[0]\n : '')\n }}\n </p>\n </div>\n </div>\n }\n @case ('equipmentSetupArtist') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-8\">\n <xs-image\n [item]=\"i.artist\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-8 h-8\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"mr-2 text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.artist.name | truncateText: 40 }}\n </p>\n <p\n class=\"flex items-center gap-1 text-xs leading-none font-extralight\"\n >\n <xs-image\n [src]=\"i.artist.country?.code | countryFlag\"\n rounded=\"none\"\n objectFit=\"cover\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n {{ i.artist.country?.name | truncateText: 20 }}\n </p>\n </div>\n </div>\n }\n @case ('itemContactManagement') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-8\">\n <xs-image\n [item]=\"item()\"\n [typeItem]=\"i.type\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-8 h-8\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"mr-2 text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.name | truncateText: 40 }}\n </p>\n <div class=\"flex items-center gap-1\">\n <xs-image\n [item]=\"i.country\"\n [typeItem]=\"'flag'\"\n [imageType]=\"'small'\"\n rounded=\"none\"\n customClass=\"w-4 h-4\"\n ></xs-image>\n <p class=\"text-xs font-extralight\">\n {{ i.country?.name }}\n </p>\n </div>\n </div>\n </div>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: XSImageComponent, selector: "xs-image", inputs: ["config", "viewTransitionName", "src", "alt", "width", "height", "size", "rounded", "objectFit", "clickable", "item", "typeItem", "imageType", "fallbackSrc", "loading", "priority", "customClass", "generateAvatar"], outputs: ["onClick", "onLoad", "onError"] }, { kind: "pipe", type: CountryFlagPipe, name: "countryFlag" }, { kind: "pipe", type: CountryNamePipe, name: "countryName" }, { kind: "pipe", type: TruncateTextPipe, name: "truncateText" }, { kind: "pipe", type: FixRegionPipe, name: "fixRegion" }, { kind: "pipe", type: SliceArrayPipe, name: "sliceArray" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17735
17735
  }
17736
17736
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSTableItemsEntityComponent, decorators: [{
17737
17737
  type: Component,
@@ -17743,7 +17743,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
17743
17743
  TruncateTextPipe,
17744
17744
  FixRegionPipe,
17745
17745
  SliceArrayPipe,
17746
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let i = $any(item());\n@switch (header().type) {\n @case ('artist') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n [viewTransitionName]=\"itemForImage?._id || i._id\"\n rounded=\"lg\"\n [objectFit]=\"'cover'\"\n size=\"full\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n }}\n </p>\n @if (i.country || itemForDisplay.country) {\n <div class=\"flex items-center gap-1\">\n <xs-image\n [src]=\"\n i.country?.code ||\n itemForDisplay.country?.code ||\n i.country ||\n itemForDisplay.country | countryFlag\n \"\n rounded=\"none\"\n [objectFit]=\"'cover'\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <p\n class=\"text-xs font-medium text-zinc-500 dark:text-zinc-400 leading-tight\"\n >\n {{\n i.country?.name ||\n itemForDisplay.country?.name ||\n (i.country | countryName) ||\n (itemForDisplay.country | countryName)\n }}\n </p>\n </div>\n }\n @if (!(i.country || itemForDisplay.country)) {\n <p\n class=\"text-xs font-medium text-zinc-500 dark:text-zinc-400 leading-tight\"\n >\n {{ textsService.notClaimed }}\n </p>\n }\n </div>\n </div>\n }\n @case ('artistNameAdmin') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n [viewTransitionName]=\"itemForImage?._id || i._id\"\n size=\"full\"\n rounded=\"lg\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ itemForDisplay.name || i.name | truncateText: 40 }}\n </p>\n @if (i.country || itemForDisplay.country) {\n <div class=\"flex items-center gap-1\">\n <xs-image\n [src]=\"\n i.country?.code ||\n itemForDisplay.country?.code ||\n i.country ||\n itemForDisplay.country | countryFlag\n \"\n rounded=\"none\"\n [objectFit]=\"'cover'\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n @if (\n i.countryResidence &&\n i.countryResidence?.code !== 'nd' &&\n i.countryResidence?.code !== i.country?.code\n ) {\n <xs-image\n [src]=\"\n i.countryResidence?.code ||\n itemForDisplay.countryResidence?.code ||\n i.countryResidence ||\n itemForDisplay.countryResidence | countryFlag\n \"\n rounded=\"none\"\n [objectFit]=\"'cover'\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n }\n <p class=\"text-xs font-extralight text-gray-400\">\n {{\n i.country?.name ||\n itemForDisplay.country?.name ||\n (i.country | countryName) ||\n (itemForDisplay.country | countryName)\n }}\n </p>\n </div>\n }\n @if (!(i.country || itemForDisplay.country)) {\n <p class=\"text-xs font-extralight text-gray-400\">\n {{ textsService.notClaimed }}\n </p>\n }\n </div>\n </div>\n }\n @case ('event') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'event'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n | truncateText: 40\n }}\n </p>\n </div>\n </div>\n }\n @case ('media') {\n @if (\n itemForDisplay && itemForDisplay.name !== 'Desconocido'\n ) {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'media'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name ||\n itemForDisplay.title ||\n i.name | truncateText: 40\n }}\n </p>\n @if (itemForDisplay || item()) {\n <div class=\"flex gap-1 items-center\">\n <p class=\"text-xs font-light text-gray-400\">\n @if (\n getArtists(itemForDisplay || item()).length > 0\n ) {\n @for (\n artist of getArtists(\n itemForDisplay || item()\n ) | sliceArray: 0 : 3;\n track $index\n ) {\n @if ($index !== 0) {\n <span> & </span>\n }\n {{ artist.name }}\n }\n } @else {\n {{\n (itemForDisplay.artist || i.artist)?.name ||\n (itemForDisplay.user || i.user)?.name ||\n '---'\n }}\n }\n </p>\n </div>\n }\n </div>\n </div>\n }\n }\n @case ('site') {\n @if (itemForDisplay?._id === ImportantItems.ANONYMOUS_SITE) {\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n -\n </p>\n } @else {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'site'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name ||\n itemForDisplay.title ||\n i.name | truncateText: 20\n }}\n </p>\n <div class=\"flex items-center gap-1\">\n @if (itemForDisplay.address?.country?.code) {\n <xs-image\n [src]=\"\n itemForDisplay.address?.country?.code\n | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n }\n <span class=\"text-xs font-light text-gray-400\">\n {{\n itemForDisplay.address?.region\n ? (itemForDisplay.address.region.name\n | fixRegion\n | truncateText: 20)\n : (itemForDisplay.address?.country?.code\n | countryName)\n }}\n </span>\n </div>\n </div>\n </div>\n }\n }\n @case ('siteItem') {\n @if (i.site) {\n @if (i.site._id === ImportantItems.ANONYMOUS_SITE) {\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n -\n </p>\n } @else {\n <div class=\"flex items-center w-64 gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"i.site\"\n [typeItem]=\"'site'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-10 h-10\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.site.name | truncateText: 20 }}\n </p>\n <div\n class=\"flex items-center gap-1 text-xs font-light text-gray-400\"\n >\n <xs-image\n [src]=\"\n i.site.address?.country?.code | countryFlag\n \"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <span>\n {{\n i.site.address?.region\n ? (i.site.address?.region.name\n | fixRegion\n | truncateText: 20)\n : (i.site.address?.town | truncateText: 20)\n }}\n </span>\n </div>\n </div>\n </div>\n }\n }\n }\n @case ('organization') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'organization'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n | truncateText: 40\n }}\n </p>\n <div class=\"flex items-center gap-1\">\n @if (\n itemForDisplay.country?.code ||\n (itemForDisplay.country &&\n itemForDisplay.country.length &&\n isNotArray(itemForDisplay.country))\n ) {\n <xs-image\n [src]=\"\n itemForDisplay.country?.code ||\n itemForDisplay.country | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n }\n <span class=\"text-xs font-light text-gray-400\">\n {{\n itemForDisplay.country?.name ||\n (itemForDisplay.country &&\n itemForDisplay.country.length &&\n isNotArray(itemForDisplay.country)\n ? (itemForDisplay.country | countryName)\n : '')\n }}\n </span>\n </div>\n </div>\n </div>\n }\n @case ('organizationObject') {\n @if (i.organizations?.length > 0) {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"i.organizations[0]\"\n [typeItem]=\"'organization'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col justify-center gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.organizations[0]?.name | truncateText: 40 }}\n </p>\n @if (i.organizations[0].country) {\n <div class=\"flex items-center gap-1\">\n <xs-image\n [src]=\"\n i.organizations[0].country?.code ||\n i.organizations[0].country | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <span class=\"text-xs font-light text-gray-400\">\n {{\n i.organizations[0].country?.name ||\n (i.organizations[0].country | countryName)\n }}\n </span>\n </div>\n }\n </div>\n @if (i.organizations.length > 1) {\n <p class=\"text-sm text-gray-500\">\n +{{ i.organizations.length - 1 }}\n </p>\n }\n </div>\n }\n @if (!i.organizations || i.organizations.length === 0) {\n <p>{{ textsService.t('TABLE_ITEMS.NO_LABEL') }}</p>\n }\n }\n @case ('equipment') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"item()\"\n [typeItem]=\"'equipment'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.name | truncateText: 40 }}\n </p>\n <p class=\"text-xs font-extralight\">\n {{\n i.manufacturer ??\n (i.equipment && i.equipment.length\n ? i.equipment[0]\n : '')\n }}\n </p>\n </div>\n </div>\n }\n @case ('equipmentSetupArtist') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-8\">\n <xs-image\n [item]=\"i.artist\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-8 h-8\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"mr-2 text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.artist.name | truncateText: 40 }}\n </p>\n <p\n class=\"flex items-center gap-1 text-xs leading-none font-extralight\"\n >\n <xs-image\n [src]=\"i.artist.country?.code | countryFlag\"\n rounded=\"none\"\n objectFit=\"cover\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n {{ i.artist.country?.name | truncateText: 20 }}\n </p>\n </div>\n </div>\n }\n @case ('itemContactManagement') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-8\">\n <xs-image\n [item]=\"item()\"\n [typeItem]=\"i.type\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-8 h-8\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"mr-2 text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.name | truncateText: 40 }}\n </p>\n <div class=\"flex items-center gap-1\">\n <xs-image\n [item]=\"i.country\"\n [typeItem]=\"'flag'\"\n [imageType]=\"'small'\"\n rounded=\"none\"\n customClass=\"w-4 h-4\"\n ></xs-image>\n <p class=\"text-xs font-extralight\">\n {{ i.country?.name }}\n </p>\n </div>\n </div>\n </div>\n }\n}\n" }]
17746
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let i = $any(item());\n@switch (header().type) {\n @case ('artist') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n [viewTransitionName]=\"itemForImage?._id || i._id\"\n rounded=\"lg\"\n [objectFit]=\"'cover'\"\n size=\"full\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n }}\n </p>\n @if (i.country || itemForDisplay.country) {\n <div class=\"flex items-center gap-1\">\n <xs-image\n [src]=\"\n i.country?.code ||\n itemForDisplay.country?.code ||\n i.country ||\n itemForDisplay.country | countryFlag\n \"\n rounded=\"none\"\n [objectFit]=\"'cover'\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <p\n class=\"text-xs font-medium text-zinc-500 dark:text-zinc-400 leading-tight\"\n >\n {{\n i.country?.name ||\n itemForDisplay.country?.name ||\n (i.country | countryName) ||\n (itemForDisplay.country | countryName)\n }}\n </p>\n </div>\n }\n @if (!(i.country || itemForDisplay.country)) {\n <p\n class=\"text-xs font-medium text-zinc-500 dark:text-zinc-400 leading-tight\"\n >\n {{ textsService.notClaimed }}\n </p>\n }\n </div>\n </div>\n }\n @case ('artistNameAdmin') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n [viewTransitionName]=\"itemForImage?._id || i._id\"\n size=\"full\"\n rounded=\"lg\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ itemForDisplay.name || i.name | truncateText: 40 }}\n </p>\n @let ownerId =\n i.user?._id || itemForDisplay.user?._id;\n @let ownerName =\n i.user?.name || itemForDisplay.user?.name;\n @if (!ownerId || ownerId === ImportantItems.ADMIN_USER) {\n <span\n class=\"w-fit rounded bg-zinc-500/20 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-[0.12em] text-zinc-400\"\n >\n {{ textsService.notClaimed }}\n </span>\n } @else if (ownerName) {\n <p\n class=\"flex items-center gap-1 text-xs font-medium leading-tight text-zinc-500 dark:text-zinc-400\"\n >\n <span class=\"truncate\">{{\n ownerName | truncateText: 25\n }}</span>\n <svg\n [attr.aria-label]=\"\n textsService.t('TABLE_ITEMS.VERIFIED')\n \"\n fill=\"rgb(0, 149, 246)\"\n height=\"10\"\n viewBox=\"0 0 40 40\"\n width=\"10\"\n class=\"shrink-0\"\n >\n <path\n d=\"M19.998 3.094 14.638 0l-2.972 5.15H5.432v6.354L0 14.64 3.094 20 0 25.359l5.432 3.137v5.905h5.975L14.638 40l5.36-3.094L25.358 40l3.232-5.6h6.162v-6.01L40 25.359 36.905 20 40 14.641l-5.248-3.03v-6.46h-6.419L25.358 0l-5.36 3.094Zm7.415 11.225 2.254 2.287-11.43 11.5-6.835-6.93 2.244-2.258 4.587 4.581 9.18-9.18Z\"\n fill-rule=\"evenodd\"\n ></path>\n </svg>\n </p>\n }\n </div>\n </div>\n }\n @case ('event') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'event'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n | truncateText: 40\n }}\n </p>\n </div>\n </div>\n }\n @case ('media') {\n @if (\n itemForDisplay && itemForDisplay.name !== 'Desconocido'\n ) {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'media'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name ||\n itemForDisplay.title ||\n i.name | truncateText: 40\n }}\n </p>\n @if (itemForDisplay || item()) {\n <div class=\"flex gap-1 items-center\">\n <p class=\"text-xs font-light text-gray-400\">\n @if (\n getArtists(itemForDisplay || item()).length > 0\n ) {\n @for (\n artist of getArtists(\n itemForDisplay || item()\n ) | sliceArray: 0 : 3;\n track $index\n ) {\n @if ($index !== 0) {\n <span> & </span>\n }\n {{ artist.name }}\n }\n } @else {\n {{\n (itemForDisplay.artist || i.artist)?.name ||\n (itemForDisplay.user || i.user)?.name ||\n '---'\n }}\n }\n </p>\n </div>\n }\n </div>\n </div>\n }\n }\n @case ('site') {\n @if (itemForDisplay?._id === ImportantItems.ANONYMOUS_SITE) {\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n -\n </p>\n } @else {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'site'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name ||\n itemForDisplay.title ||\n i.name | truncateText: 20\n }}\n </p>\n <div class=\"flex items-center gap-1\">\n @if (itemForDisplay.address?.country?.code) {\n <xs-image\n [src]=\"\n itemForDisplay.address?.country?.code\n | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n }\n <span class=\"text-xs font-light text-gray-400\">\n {{\n itemForDisplay.address?.region\n ? (itemForDisplay.address.region.name\n | fixRegion\n | truncateText: 20)\n : (itemForDisplay.address?.country?.code\n | countryName)\n }}\n </span>\n </div>\n </div>\n </div>\n }\n }\n @case ('siteItem') {\n @if (i.site) {\n @if (i.site._id === ImportantItems.ANONYMOUS_SITE) {\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n -\n </p>\n } @else {\n <div class=\"flex items-center w-64 gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"i.site\"\n [typeItem]=\"'site'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-10 h-10\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.site.name | truncateText: 20 }}\n </p>\n <div\n class=\"flex items-center gap-1 text-xs font-light text-gray-400\"\n >\n <xs-image\n [src]=\"\n i.site.address?.country?.code | countryFlag\n \"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <span>\n {{\n i.site.address?.region\n ? (i.site.address?.region.name\n | fixRegion\n | truncateText: 20)\n : (i.site.address?.town | truncateText: 20)\n }}\n </span>\n </div>\n </div>\n </div>\n }\n }\n }\n @case ('organization') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"itemForImage\"\n [typeItem]=\"'organization'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{\n itemForDisplay.name || itemForDisplay.title || i.name\n | truncateText: 40\n }}\n </p>\n <div class=\"flex items-center gap-1\">\n @if (\n itemForDisplay.country?.code ||\n (itemForDisplay.country &&\n itemForDisplay.country.length &&\n isNotArray(itemForDisplay.country))\n ) {\n <xs-image\n [src]=\"\n itemForDisplay.country?.code ||\n itemForDisplay.country | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n }\n <span class=\"text-xs font-light text-gray-400\">\n {{\n itemForDisplay.country?.name ||\n (itemForDisplay.country &&\n itemForDisplay.country.length &&\n isNotArray(itemForDisplay.country)\n ? (itemForDisplay.country | countryName)\n : '')\n }}\n </span>\n </div>\n </div>\n </div>\n }\n @case ('organizationObject') {\n @if (i.organizations?.length > 0) {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"i.organizations[0]\"\n [typeItem]=\"'organization'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col justify-center gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.organizations[0]?.name | truncateText: 40 }}\n </p>\n @if (i.organizations[0].country) {\n <div class=\"flex items-center gap-1\">\n <xs-image\n [src]=\"\n i.organizations[0].country?.code ||\n i.organizations[0].country | countryFlag\n \"\n rounded=\"none\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n <span class=\"text-xs font-light text-gray-400\">\n {{\n i.organizations[0].country?.name ||\n (i.organizations[0].country | countryName)\n }}\n </span>\n </div>\n }\n </div>\n @if (i.organizations.length > 1) {\n <p class=\"text-sm text-gray-500\">\n +{{ i.organizations.length - 1 }}\n </p>\n }\n </div>\n }\n @if (!i.organizations || i.organizations.length === 0) {\n <p>{{ textsService.t('TABLE_ITEMS.NO_LABEL') }}</p>\n }\n }\n @case ('equipment') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-10 h-10\">\n <xs-image\n [item]=\"item()\"\n [typeItem]=\"'equipment'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n size=\"full\"\n objectFit=\"cover\"\n [generateAvatar]=\"true\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.name | truncateText: 40 }}\n </p>\n <p class=\"text-xs font-extralight\">\n {{\n i.manufacturer ??\n (i.equipment && i.equipment.length\n ? i.equipment[0]\n : '')\n }}\n </p>\n </div>\n </div>\n }\n @case ('equipmentSetupArtist') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-8\">\n <xs-image\n [item]=\"i.artist\"\n [typeItem]=\"'artist'\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-8 h-8\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"mr-2 text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.artist.name | truncateText: 40 }}\n </p>\n <p\n class=\"flex items-center gap-1 text-xs leading-none font-extralight\"\n >\n <xs-image\n [src]=\"i.artist.country?.code | countryFlag\"\n rounded=\"none\"\n objectFit=\"cover\"\n customClass=\"w-4 h-3\"\n ></xs-image>\n {{ i.artist.country?.name | truncateText: 20 }}\n </p>\n </div>\n </div>\n }\n @case ('itemContactManagement') {\n <div class=\"flex items-center gap-3\">\n <div class=\"w-8\">\n <xs-image\n [item]=\"item()\"\n [typeItem]=\"i.type\"\n [imageType]=\"'small'\"\n rounded=\"lg\"\n customClass=\"object-cover object-center w-8 h-8\"\n ></xs-image>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p\n class=\"mr-2 text-base font-bold leading-none text-black dark:text-white\"\n >\n {{ i.name | truncateText: 40 }}\n </p>\n <div class=\"flex items-center gap-1\">\n <xs-image\n [item]=\"i.country\"\n [typeItem]=\"'flag'\"\n [imageType]=\"'small'\"\n rounded=\"none\"\n customClass=\"w-4 h-4\"\n ></xs-image>\n <p class=\"text-xs font-extralight\">\n {{ i.country?.name }}\n </p>\n </div>\n </div>\n </div>\n }\n}\n" }]
17747
17747
  }], propDecorators: { header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: true }] }], item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: true }] }] } });
17748
17748
 
17749
17749
  class XSTableItemsStateComponent {
@@ -17792,7 +17792,7 @@ class XSTableItemsStateComponent {
17792
17792
  : 'green';
17793
17793
  }
17794
17794
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSTableItemsStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17795
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSTableItemsStateComponent, isStandalone: true, selector: "xs-table-items-state", inputs: { header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let i = $any(item());\n@switch (header().type) {\n @case ('githubStatus') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === '\u00C9xito',\n 'bg-red-500': $any(item())[header().key] === 'Fallido',\n 'bg-gray-500': $any(item())[header().key] === 'Cancelado' || $any(item())[header().key] === 'Omitido' || $any(item())[header().key] === 'Desconocido',\n 'bg-yellow-500': $any(item())[header().key] === 'En Progreso',\n }\"\n ></div>\n <p class=\"pl-1 text-xs font-extralight\">{{ $any(item())[header().key] }}</p>\n </div>\n }\n @case ('githubRun') {\n <div class=\"flex items-center gap-2\">\n <div\n class=\"w-4 h-4 rounded-full flex items-center justify-center text-white\"\n [ngClass]=\"{\n 'bg-green-500': i.status_text === '\u00C9xito',\n 'bg-red-500': i.status_text === 'Fallido',\n 'bg-gray-500': i.status_text === 'Cancelado' || i.status_text === 'Omitido' || i.status_text === 'Desconocido' || i.status_text === 'En Cola',\n 'bg-yellow-500': i.status_text === 'En Progreso',\n }\"\n >\n @if (i.status_text === '\u00C9xito') {\n <xs-icon size=\"xs\" [icon]=\"'check'\"></xs-icon>\n }\n @if (i.status_text === 'Fallido') {\n <xs-icon size=\"xs\" [icon]=\"'times'\"></xs-icon>\n }\n </div>\n <div class=\"flex flex-col min-w-0\">\n <a\n target=\"_blank\"\n class=\"text-sm font-semibold truncate block\"\n title=\"{{ i.head_commit?.message }}\"\n >\n {{ i.head_commit?.message | truncateText: 50 }}\n </a>\n <p class=\"text-xs text-gray-400 truncate\">\n <span class=\"font-bold\">{{ i.name }}</span>\n #{{ i.run_number }}\n <span class=\"text-gray-500\">\n Commit {{ i.head_commit?.id?.slice(0, 7) }} pushed by {{ i.triggering_actor?.login }}\n </span>\n </p>\n </div>\n </div>\n }\n @case ('state') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === 'active' || $any(item())[header().key] === 'confirmed' || $any(item())[header().key] === 'completed',\n 'bg-yellow-500': $any(item())[header().key] === 'pending',\n 'bg-blue-500': $any(item())[header().key] === 'inProgress',\n 'bg-orange-500': $any(item())[header().key] === 'suspended',\n 'bg-red-500': $any(item())[header().key] === 'inactive' || $any(item())[header().key] === 'rejected' || $any(item())[header().key] === 'canceled' || $any(item())[header().key] === 'unpaid' || $any(item())[header().key] === 'failed',\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-extralight\">{{ $any(item())[header().key] | stateName }}</span>\n </div>\n }\n @case ('stateFull') {\n <div class=\"flex flex-col items-start gap-1 px-2 py-1 rounded-xl\">\n <div class=\"flex items-center gap-1\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === 'active' || $any(item())[header().key] === 'confirmed' || $any(item())[header().key] === 'completed',\n 'bg-yellow-500': $any(item())[header().key] === 'pending',\n 'bg-blue-500': $any(item())[header().key] === 'inProgress',\n 'bg-orange-500': $any(item())[header().key] === 'suspended',\n 'bg-red-500': $any(item())[header().key] === 'inactive' || $any(item())[header().key] === 'rejected' || $any(item())[header().key] === 'canceled' || $any(item())[header().key] === 'unpaid' || $any(item())[header().key] === 'failed',\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-extralight\">{{ i.state | stateName }}</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <div\n class=\"w-2.5 h-2.5\"\n [ngClass]=\"{\n 'bg-green-500': i.leadStatus === 'new',\n 'bg-blue-500': i.leadStatus === 'contacted',\n 'bg-purple-500': i.leadStatus === 'interested',\n 'bg-indigo-600': i.leadStatus === 'highlyInterested',\n 'bg-emerald-500': i.leadStatus === 'activeCollaboration',\n 'bg-orange-500': i.leadStatus === 'ignored',\n 'bg-yellow-500': i.leadStatus === 'notRelevant',\n 'bg-red-500': i.leadStatus === 'discarded',\n 'bg-gray-400': !i.leadStatus,\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-extralight\">\n @if (i.user && i.user._id === adminUserId) {\n @if (!i.lastContacted) {\n N/D\n } @else {\n @if (i.leadStatus === 'new' || i.leadStatus === 'contacted') {\n {{ i.lastContacted | dateChat | firstLetterCase }}\n } @else if (i.leadStatus && i.leadStatus !== 'new' && i.leadStatus !== 'contacted') {\n {{ i.leadStatus | leadStatus }}\n } @else {\n {{ i.lastContacted | dateChat | firstLetterCase }}\n }\n }\n }\n @if (i.user && i.user._id !== adminUserId) {\n {{ textsService.t('TABLE_ITEMS.ALREADY_VALIDATED') }}\n }\n </span>\n </div>\n </div>\n }\n @case ('toggleStates') {\n <div class=\"flex items-center gap-1.5\">\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.WEB') + ': ' + (i.stateWeb === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateWeb === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.ANDROID') + ': ' + (i.stateAndroid === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateAndroid === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.IOS') + ': ' + (i.stateIos === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateIos === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n </div>\n }\n @case ('priority') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.priority === 'low',\n 'bg-yellow-500': i.priority === 'medium',\n 'bg-red-500': i.priority === 'high',\n 'bg-zinc-900': !i.priority,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ i.priority ? (i.priority | priorities) : 'N/D' }}\n </span>\n </div>\n }\n @case ('capacity') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-red-500': i.capacity > 1 && i.capacity <= 100,\n 'bg-yellow-500': i.capacity > 100 && i.capacity <= 500,\n 'bg-green-500': i.capacity > 500,\n 'bg-zinc-900': !i.capacity || i.capacity === 0,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ i.capacity ? i.capacity : 'N/D' }}\n </span>\n </div>\n }\n @case ('lastContactedItems') {\n <div class=\"flex gap-1.5 items-center\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.user._id !== adminUserId,\n 'bg-yellow-500': i.user._id === adminUserId,\n }\"\n ></div>\n @if (i.lastContacted && i.user._id === adminUserId) {\n <span class=\"text-xs\">{{ i.lastContacted | dateChat | firstLetterCase }}</span>\n }\n @if ((i.lastContacted && i.user._id !== adminUserId) || i.user._id !== adminUserId) {\n <span class=\"text-xs\">{{ textsService.t('TABLE_ITEMS.VERIFIED') }}</span>\n }\n @if (!i.lastContacted && i.user._id === adminUserId) {\n <span class=\"text-xs\">N/D</span>\n }\n </div>\n }\n @case ('lastContactedOkKo') {\n <div class=\"flex gap-1.5 items-center\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.user._id !== adminUserId,\n 'bg-yellow-500': i.user._id === adminUserId,\n }\"\n ></div>\n @if (i.user._id !== adminUserId) {\n <span>{{ textsService.t('TABLE_ITEMS.SUCCESS') }}</span>\n }\n @if (i.user._id === adminUserId) {\n <span>{{ textsService.t('TABLE_ITEMS.PENDING') }}</span>\n }\n </div>\n }\n @case ('level') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngStyle]=\"{ 'background-color': getLevelColor(item()) }\"\n ></div>\n <p class=\"pl-1 text-sm font-semibold\">\n {{ getLevelName(item()) }}\n @if (getLevelPrice(item()) !== null) {\n <span class=\"text-xs font-extralight\">({{ getLevelPrice(item()) }}\u20AC)</span>\n }\n </p>\n </div>\n }\n @case ('subStatePromotion') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': getSubStatePromotion(item()) === 'finished',\n 'bg-yellow-500': getSubStatePromotion(item()) === 'schedule',\n 'bg-blue-500': getSubStatePromotion(item()) === 'inProgress',\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">{{ getSubStatePromotion(item()) | stateName }}</span>\n </div>\n }\n @case ('trueOrFalse') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === true,\n 'bg-red-500': $any(item())[header().key] !== false,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ $any(item())[header().key] ? textsService.yes : textsService.no }}\n </span>\n </div>\n }\n @case ('promotionCodeUsage') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n @if (getRemainingPercentage(item()) > 50) {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-green-500\"></div>\n } @else if (getRemainingPercentage(item()) > 20) {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-yellow-500\"></div>\n } @else {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-red-500\"></div>\n }\n <p class=\"text-sm\">{{ i.usedCount }} / {{ i.maxUses }}</p>\n </div>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: XSIconComponent, selector: "xs-icon", inputs: ["icon", "size", "class"] }, { kind: "pipe", type: StateNamePipe, name: "stateName" }, { kind: "pipe", type: DateChatPipe, name: "dateChat" }, { kind: "pipe", type: XSFirstLetterPipe, name: "firstLetterCase" }, { kind: "pipe", type: PrioritiesPipe, name: "priorities" }, { kind: "pipe", type: LeadStatusPipe, name: "leadStatus" }, { kind: "pipe", type: TruncateTextPipe, name: "truncateText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17795
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: XSTableItemsStateComponent, isStandalone: true, selector: "xs-table-items-state", inputs: { header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let i = $any(item());\n@switch (header().type) {\n @case ('githubStatus') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === '\u00C9xito',\n 'bg-red-500': $any(item())[header().key] === 'Fallido',\n 'bg-gray-500': $any(item())[header().key] === 'Cancelado' || $any(item())[header().key] === 'Omitido' || $any(item())[header().key] === 'Desconocido',\n 'bg-yellow-500': $any(item())[header().key] === 'En Progreso',\n }\"\n ></div>\n <p class=\"pl-1 text-xs font-extralight\">{{ $any(item())[header().key] }}</p>\n </div>\n }\n @case ('githubRun') {\n <div class=\"flex items-center gap-2\">\n <div\n class=\"w-4 h-4 rounded-full flex items-center justify-center text-white\"\n [ngClass]=\"{\n 'bg-green-500': i.status_text === '\u00C9xito',\n 'bg-red-500': i.status_text === 'Fallido',\n 'bg-gray-500': i.status_text === 'Cancelado' || i.status_text === 'Omitido' || i.status_text === 'Desconocido' || i.status_text === 'En Cola',\n 'bg-yellow-500': i.status_text === 'En Progreso',\n }\"\n >\n @if (i.status_text === '\u00C9xito') {\n <xs-icon size=\"xs\" [icon]=\"'check'\"></xs-icon>\n }\n @if (i.status_text === 'Fallido') {\n <xs-icon size=\"xs\" [icon]=\"'times'\"></xs-icon>\n }\n </div>\n <div class=\"flex flex-col min-w-0\">\n <a\n target=\"_blank\"\n class=\"text-sm font-semibold truncate block\"\n title=\"{{ i.head_commit?.message }}\"\n >\n {{ i.head_commit?.message | truncateText: 50 }}\n </a>\n <p class=\"text-xs text-gray-400 truncate\">\n <span class=\"font-bold\">{{ i.name }}</span>\n #{{ i.run_number }}\n <span class=\"text-gray-500\">\n Commit {{ i.head_commit?.id?.slice(0, 7) }} pushed by {{ i.triggering_actor?.login }}\n </span>\n </p>\n </div>\n </div>\n }\n @case ('state') {\n <div\n class=\"flex items-center gap-1.5 rounded-full bg-zinc-900/50 p-1 px-2\"\n >\n <div\n class=\"h-2 w-2 rounded-full text-xs\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === 'active' || $any(item())[header().key] === 'confirmed' || $any(item())[header().key] === 'completed',\n 'bg-yellow-500': $any(item())[header().key] === 'pending',\n 'bg-blue-500': $any(item())[header().key] === 'inProgress',\n 'bg-orange-500': $any(item())[header().key] === 'suspended',\n 'bg-red-500': $any(item())[header().key] === 'inactive' || $any(item())[header().key] === 'rejected' || $any(item())[header().key] === 'canceled' || $any(item())[header().key] === 'unpaid' || $any(item())[header().key] === 'failed',\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-medium\">{{ $any(item())[header().key] | stateName }}</span>\n </div>\n }\n @case ('stateFull') {\n <div class=\"flex flex-col items-start gap-1 px-2 py-1 rounded-xl\">\n <div class=\"flex items-center gap-1\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === 'active' || $any(item())[header().key] === 'confirmed' || $any(item())[header().key] === 'completed',\n 'bg-yellow-500': $any(item())[header().key] === 'pending',\n 'bg-blue-500': $any(item())[header().key] === 'inProgress',\n 'bg-orange-500': $any(item())[header().key] === 'suspended',\n 'bg-red-500': $any(item())[header().key] === 'inactive' || $any(item())[header().key] === 'rejected' || $any(item())[header().key] === 'canceled' || $any(item())[header().key] === 'unpaid' || $any(item())[header().key] === 'failed',\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-extralight\">{{ i.state | stateName }}</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <div\n class=\"w-2.5 h-2.5\"\n [ngClass]=\"{\n 'bg-green-500': i.leadStatus === 'new',\n 'bg-blue-500': i.leadStatus === 'contacted',\n 'bg-purple-500': i.leadStatus === 'interested',\n 'bg-indigo-600': i.leadStatus === 'highlyInterested',\n 'bg-emerald-500': i.leadStatus === 'activeCollaboration',\n 'bg-orange-500': i.leadStatus === 'ignored',\n 'bg-yellow-500': i.leadStatus === 'notRelevant',\n 'bg-red-500': i.leadStatus === 'discarded',\n 'bg-gray-400': !i.leadStatus,\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-extralight\">\n @if (i.user && i.user._id === adminUserId) {\n @if (!i.lastContacted) {\n N/D\n } @else {\n @if (i.leadStatus === 'new' || i.leadStatus === 'contacted') {\n {{ i.lastContacted | dateChat | firstLetterCase }}\n } @else if (i.leadStatus && i.leadStatus !== 'new' && i.leadStatus !== 'contacted') {\n {{ i.leadStatus | leadStatus }}\n } @else {\n {{ i.lastContacted | dateChat | firstLetterCase }}\n }\n }\n }\n @if (i.user && i.user._id !== adminUserId) {\n {{ textsService.t('TABLE_ITEMS.ALREADY_VALIDATED') }}\n }\n </span>\n </div>\n </div>\n }\n @case ('toggleStates') {\n <div class=\"flex items-center gap-1.5\">\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.WEB') + ': ' + (i.stateWeb === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateWeb === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.ANDROID') + ': ' + (i.stateAndroid === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateAndroid === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.IOS') + ': ' + (i.stateIos === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateIos === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n </div>\n }\n @case ('priority') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.priority === 'low',\n 'bg-yellow-500': i.priority === 'medium',\n 'bg-red-500': i.priority === 'high',\n 'bg-zinc-900': !i.priority,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ i.priority ? (i.priority | priorities) : 'N/D' }}\n </span>\n </div>\n }\n @case ('capacity') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-red-500': i.capacity > 1 && i.capacity <= 100,\n 'bg-yellow-500': i.capacity > 100 && i.capacity <= 500,\n 'bg-green-500': i.capacity > 500,\n 'bg-zinc-900': !i.capacity || i.capacity === 0,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ i.capacity ? i.capacity : 'N/D' }}\n </span>\n </div>\n }\n @case ('lastContactedItems') {\n <div class=\"flex gap-1.5 items-center\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.user._id !== adminUserId,\n 'bg-yellow-500': i.user._id === adminUserId,\n }\"\n ></div>\n @if (i.lastContacted && i.user._id === adminUserId) {\n <span class=\"text-xs\">{{ i.lastContacted | dateChat | firstLetterCase }}</span>\n }\n @if ((i.lastContacted && i.user._id !== adminUserId) || i.user._id !== adminUserId) {\n <span class=\"text-xs\">{{ textsService.t('TABLE_ITEMS.VERIFIED') }}</span>\n }\n @if (!i.lastContacted && i.user._id === adminUserId) {\n <span class=\"text-xs\">N/D</span>\n }\n </div>\n }\n @case ('lastContactedOkKo') {\n <div class=\"flex gap-1.5 items-center\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.user._id !== adminUserId,\n 'bg-yellow-500': i.user._id === adminUserId,\n }\"\n ></div>\n @if (i.user._id !== adminUserId) {\n <span>{{ textsService.t('TABLE_ITEMS.SUCCESS') }}</span>\n }\n @if (i.user._id === adminUserId) {\n <span>{{ textsService.t('TABLE_ITEMS.PENDING') }}</span>\n }\n </div>\n }\n @case ('level') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngStyle]=\"{ 'background-color': getLevelColor(item()) }\"\n ></div>\n <p class=\"pl-1 text-sm font-semibold\">\n {{ getLevelName(item()) }}\n @if (getLevelPrice(item()) !== null) {\n <span class=\"text-xs font-extralight\">({{ getLevelPrice(item()) }}\u20AC)</span>\n }\n </p>\n </div>\n }\n @case ('subStatePromotion') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': getSubStatePromotion(item()) === 'finished',\n 'bg-yellow-500': getSubStatePromotion(item()) === 'schedule',\n 'bg-blue-500': getSubStatePromotion(item()) === 'inProgress',\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">{{ getSubStatePromotion(item()) | stateName }}</span>\n </div>\n }\n @case ('trueOrFalse') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === true,\n 'bg-red-500': $any(item())[header().key] !== false,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ $any(item())[header().key] ? textsService.yes : textsService.no }}\n </span>\n </div>\n }\n @case ('promotionCodeUsage') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n @if (getRemainingPercentage(item()) > 50) {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-green-500\"></div>\n } @else if (getRemainingPercentage(item()) > 20) {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-yellow-500\"></div>\n } @else {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-red-500\"></div>\n }\n <p class=\"text-sm\">{{ i.usedCount }} / {{ i.maxUses }}</p>\n </div>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: XSIconComponent, selector: "xs-icon", inputs: ["icon", "size", "class"] }, { kind: "pipe", type: StateNamePipe, name: "stateName" }, { kind: "pipe", type: DateChatPipe, name: "dateChat" }, { kind: "pipe", type: XSFirstLetterPipe, name: "firstLetterCase" }, { kind: "pipe", type: PrioritiesPipe, name: "priorities" }, { kind: "pipe", type: LeadStatusPipe, name: "leadStatus" }, { kind: "pipe", type: TruncateTextPipe, name: "truncateText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17796
17796
  }
17797
17797
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: XSTableItemsStateComponent, decorators: [{
17798
17798
  type: Component,
@@ -17805,7 +17805,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
17805
17805
  PrioritiesPipe,
17806
17806
  LeadStatusPipe,
17807
17807
  TruncateTextPipe,
17808
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let i = $any(item());\n@switch (header().type) {\n @case ('githubStatus') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === '\u00C9xito',\n 'bg-red-500': $any(item())[header().key] === 'Fallido',\n 'bg-gray-500': $any(item())[header().key] === 'Cancelado' || $any(item())[header().key] === 'Omitido' || $any(item())[header().key] === 'Desconocido',\n 'bg-yellow-500': $any(item())[header().key] === 'En Progreso',\n }\"\n ></div>\n <p class=\"pl-1 text-xs font-extralight\">{{ $any(item())[header().key] }}</p>\n </div>\n }\n @case ('githubRun') {\n <div class=\"flex items-center gap-2\">\n <div\n class=\"w-4 h-4 rounded-full flex items-center justify-center text-white\"\n [ngClass]=\"{\n 'bg-green-500': i.status_text === '\u00C9xito',\n 'bg-red-500': i.status_text === 'Fallido',\n 'bg-gray-500': i.status_text === 'Cancelado' || i.status_text === 'Omitido' || i.status_text === 'Desconocido' || i.status_text === 'En Cola',\n 'bg-yellow-500': i.status_text === 'En Progreso',\n }\"\n >\n @if (i.status_text === '\u00C9xito') {\n <xs-icon size=\"xs\" [icon]=\"'check'\"></xs-icon>\n }\n @if (i.status_text === 'Fallido') {\n <xs-icon size=\"xs\" [icon]=\"'times'\"></xs-icon>\n }\n </div>\n <div class=\"flex flex-col min-w-0\">\n <a\n target=\"_blank\"\n class=\"text-sm font-semibold truncate block\"\n title=\"{{ i.head_commit?.message }}\"\n >\n {{ i.head_commit?.message | truncateText: 50 }}\n </a>\n <p class=\"text-xs text-gray-400 truncate\">\n <span class=\"font-bold\">{{ i.name }}</span>\n #{{ i.run_number }}\n <span class=\"text-gray-500\">\n Commit {{ i.head_commit?.id?.slice(0, 7) }} pushed by {{ i.triggering_actor?.login }}\n </span>\n </p>\n </div>\n </div>\n }\n @case ('state') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === 'active' || $any(item())[header().key] === 'confirmed' || $any(item())[header().key] === 'completed',\n 'bg-yellow-500': $any(item())[header().key] === 'pending',\n 'bg-blue-500': $any(item())[header().key] === 'inProgress',\n 'bg-orange-500': $any(item())[header().key] === 'suspended',\n 'bg-red-500': $any(item())[header().key] === 'inactive' || $any(item())[header().key] === 'rejected' || $any(item())[header().key] === 'canceled' || $any(item())[header().key] === 'unpaid' || $any(item())[header().key] === 'failed',\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-extralight\">{{ $any(item())[header().key] | stateName }}</span>\n </div>\n }\n @case ('stateFull') {\n <div class=\"flex flex-col items-start gap-1 px-2 py-1 rounded-xl\">\n <div class=\"flex items-center gap-1\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === 'active' || $any(item())[header().key] === 'confirmed' || $any(item())[header().key] === 'completed',\n 'bg-yellow-500': $any(item())[header().key] === 'pending',\n 'bg-blue-500': $any(item())[header().key] === 'inProgress',\n 'bg-orange-500': $any(item())[header().key] === 'suspended',\n 'bg-red-500': $any(item())[header().key] === 'inactive' || $any(item())[header().key] === 'rejected' || $any(item())[header().key] === 'canceled' || $any(item())[header().key] === 'unpaid' || $any(item())[header().key] === 'failed',\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-extralight\">{{ i.state | stateName }}</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <div\n class=\"w-2.5 h-2.5\"\n [ngClass]=\"{\n 'bg-green-500': i.leadStatus === 'new',\n 'bg-blue-500': i.leadStatus === 'contacted',\n 'bg-purple-500': i.leadStatus === 'interested',\n 'bg-indigo-600': i.leadStatus === 'highlyInterested',\n 'bg-emerald-500': i.leadStatus === 'activeCollaboration',\n 'bg-orange-500': i.leadStatus === 'ignored',\n 'bg-yellow-500': i.leadStatus === 'notRelevant',\n 'bg-red-500': i.leadStatus === 'discarded',\n 'bg-gray-400': !i.leadStatus,\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-extralight\">\n @if (i.user && i.user._id === adminUserId) {\n @if (!i.lastContacted) {\n N/D\n } @else {\n @if (i.leadStatus === 'new' || i.leadStatus === 'contacted') {\n {{ i.lastContacted | dateChat | firstLetterCase }}\n } @else if (i.leadStatus && i.leadStatus !== 'new' && i.leadStatus !== 'contacted') {\n {{ i.leadStatus | leadStatus }}\n } @else {\n {{ i.lastContacted | dateChat | firstLetterCase }}\n }\n }\n }\n @if (i.user && i.user._id !== adminUserId) {\n {{ textsService.t('TABLE_ITEMS.ALREADY_VALIDATED') }}\n }\n </span>\n </div>\n </div>\n }\n @case ('toggleStates') {\n <div class=\"flex items-center gap-1.5\">\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.WEB') + ': ' + (i.stateWeb === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateWeb === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.ANDROID') + ': ' + (i.stateAndroid === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateAndroid === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.IOS') + ': ' + (i.stateIos === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateIos === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n </div>\n }\n @case ('priority') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.priority === 'low',\n 'bg-yellow-500': i.priority === 'medium',\n 'bg-red-500': i.priority === 'high',\n 'bg-zinc-900': !i.priority,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ i.priority ? (i.priority | priorities) : 'N/D' }}\n </span>\n </div>\n }\n @case ('capacity') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-red-500': i.capacity > 1 && i.capacity <= 100,\n 'bg-yellow-500': i.capacity > 100 && i.capacity <= 500,\n 'bg-green-500': i.capacity > 500,\n 'bg-zinc-900': !i.capacity || i.capacity === 0,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ i.capacity ? i.capacity : 'N/D' }}\n </span>\n </div>\n }\n @case ('lastContactedItems') {\n <div class=\"flex gap-1.5 items-center\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.user._id !== adminUserId,\n 'bg-yellow-500': i.user._id === adminUserId,\n }\"\n ></div>\n @if (i.lastContacted && i.user._id === adminUserId) {\n <span class=\"text-xs\">{{ i.lastContacted | dateChat | firstLetterCase }}</span>\n }\n @if ((i.lastContacted && i.user._id !== adminUserId) || i.user._id !== adminUserId) {\n <span class=\"text-xs\">{{ textsService.t('TABLE_ITEMS.VERIFIED') }}</span>\n }\n @if (!i.lastContacted && i.user._id === adminUserId) {\n <span class=\"text-xs\">N/D</span>\n }\n </div>\n }\n @case ('lastContactedOkKo') {\n <div class=\"flex gap-1.5 items-center\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.user._id !== adminUserId,\n 'bg-yellow-500': i.user._id === adminUserId,\n }\"\n ></div>\n @if (i.user._id !== adminUserId) {\n <span>{{ textsService.t('TABLE_ITEMS.SUCCESS') }}</span>\n }\n @if (i.user._id === adminUserId) {\n <span>{{ textsService.t('TABLE_ITEMS.PENDING') }}</span>\n }\n </div>\n }\n @case ('level') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngStyle]=\"{ 'background-color': getLevelColor(item()) }\"\n ></div>\n <p class=\"pl-1 text-sm font-semibold\">\n {{ getLevelName(item()) }}\n @if (getLevelPrice(item()) !== null) {\n <span class=\"text-xs font-extralight\">({{ getLevelPrice(item()) }}\u20AC)</span>\n }\n </p>\n </div>\n }\n @case ('subStatePromotion') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': getSubStatePromotion(item()) === 'finished',\n 'bg-yellow-500': getSubStatePromotion(item()) === 'schedule',\n 'bg-blue-500': getSubStatePromotion(item()) === 'inProgress',\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">{{ getSubStatePromotion(item()) | stateName }}</span>\n </div>\n }\n @case ('trueOrFalse') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === true,\n 'bg-red-500': $any(item())[header().key] !== false,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ $any(item())[header().key] ? textsService.yes : textsService.no }}\n </span>\n </div>\n }\n @case ('promotionCodeUsage') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n @if (getRemainingPercentage(item()) > 50) {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-green-500\"></div>\n } @else if (getRemainingPercentage(item()) > 20) {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-yellow-500\"></div>\n } @else {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-red-500\"></div>\n }\n <p class=\"text-sm\">{{ i.usedCount }} / {{ i.maxUses }}</p>\n </div>\n }\n}\n" }]
17808
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let i = $any(item());\n@switch (header().type) {\n @case ('githubStatus') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === '\u00C9xito',\n 'bg-red-500': $any(item())[header().key] === 'Fallido',\n 'bg-gray-500': $any(item())[header().key] === 'Cancelado' || $any(item())[header().key] === 'Omitido' || $any(item())[header().key] === 'Desconocido',\n 'bg-yellow-500': $any(item())[header().key] === 'En Progreso',\n }\"\n ></div>\n <p class=\"pl-1 text-xs font-extralight\">{{ $any(item())[header().key] }}</p>\n </div>\n }\n @case ('githubRun') {\n <div class=\"flex items-center gap-2\">\n <div\n class=\"w-4 h-4 rounded-full flex items-center justify-center text-white\"\n [ngClass]=\"{\n 'bg-green-500': i.status_text === '\u00C9xito',\n 'bg-red-500': i.status_text === 'Fallido',\n 'bg-gray-500': i.status_text === 'Cancelado' || i.status_text === 'Omitido' || i.status_text === 'Desconocido' || i.status_text === 'En Cola',\n 'bg-yellow-500': i.status_text === 'En Progreso',\n }\"\n >\n @if (i.status_text === '\u00C9xito') {\n <xs-icon size=\"xs\" [icon]=\"'check'\"></xs-icon>\n }\n @if (i.status_text === 'Fallido') {\n <xs-icon size=\"xs\" [icon]=\"'times'\"></xs-icon>\n }\n </div>\n <div class=\"flex flex-col min-w-0\">\n <a\n target=\"_blank\"\n class=\"text-sm font-semibold truncate block\"\n title=\"{{ i.head_commit?.message }}\"\n >\n {{ i.head_commit?.message | truncateText: 50 }}\n </a>\n <p class=\"text-xs text-gray-400 truncate\">\n <span class=\"font-bold\">{{ i.name }}</span>\n #{{ i.run_number }}\n <span class=\"text-gray-500\">\n Commit {{ i.head_commit?.id?.slice(0, 7) }} pushed by {{ i.triggering_actor?.login }}\n </span>\n </p>\n </div>\n </div>\n }\n @case ('state') {\n <div\n class=\"flex items-center gap-1.5 rounded-full bg-zinc-900/50 p-1 px-2\"\n >\n <div\n class=\"h-2 w-2 rounded-full text-xs\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === 'active' || $any(item())[header().key] === 'confirmed' || $any(item())[header().key] === 'completed',\n 'bg-yellow-500': $any(item())[header().key] === 'pending',\n 'bg-blue-500': $any(item())[header().key] === 'inProgress',\n 'bg-orange-500': $any(item())[header().key] === 'suspended',\n 'bg-red-500': $any(item())[header().key] === 'inactive' || $any(item())[header().key] === 'rejected' || $any(item())[header().key] === 'canceled' || $any(item())[header().key] === 'unpaid' || $any(item())[header().key] === 'failed',\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-medium\">{{ $any(item())[header().key] | stateName }}</span>\n </div>\n }\n @case ('stateFull') {\n <div class=\"flex flex-col items-start gap-1 px-2 py-1 rounded-xl\">\n <div class=\"flex items-center gap-1\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === 'active' || $any(item())[header().key] === 'confirmed' || $any(item())[header().key] === 'completed',\n 'bg-yellow-500': $any(item())[header().key] === 'pending',\n 'bg-blue-500': $any(item())[header().key] === 'inProgress',\n 'bg-orange-500': $any(item())[header().key] === 'suspended',\n 'bg-red-500': $any(item())[header().key] === 'inactive' || $any(item())[header().key] === 'rejected' || $any(item())[header().key] === 'canceled' || $any(item())[header().key] === 'unpaid' || $any(item())[header().key] === 'failed',\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-extralight\">{{ i.state | stateName }}</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <div\n class=\"w-2.5 h-2.5\"\n [ngClass]=\"{\n 'bg-green-500': i.leadStatus === 'new',\n 'bg-blue-500': i.leadStatus === 'contacted',\n 'bg-purple-500': i.leadStatus === 'interested',\n 'bg-indigo-600': i.leadStatus === 'highlyInterested',\n 'bg-emerald-500': i.leadStatus === 'activeCollaboration',\n 'bg-orange-500': i.leadStatus === 'ignored',\n 'bg-yellow-500': i.leadStatus === 'notRelevant',\n 'bg-red-500': i.leadStatus === 'discarded',\n 'bg-gray-400': !i.leadStatus,\n }\"\n ></div>\n <span class=\"pl-1 text-xs font-extralight\">\n @if (i.user && i.user._id === adminUserId) {\n @if (!i.lastContacted) {\n N/D\n } @else {\n @if (i.leadStatus === 'new' || i.leadStatus === 'contacted') {\n {{ i.lastContacted | dateChat | firstLetterCase }}\n } @else if (i.leadStatus && i.leadStatus !== 'new' && i.leadStatus !== 'contacted') {\n {{ i.leadStatus | leadStatus }}\n } @else {\n {{ i.lastContacted | dateChat | firstLetterCase }}\n }\n }\n }\n @if (i.user && i.user._id !== adminUserId) {\n {{ textsService.t('TABLE_ITEMS.ALREADY_VALIDATED') }}\n }\n </span>\n </div>\n </div>\n }\n @case ('toggleStates') {\n <div class=\"flex items-center gap-1.5\">\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.WEB') + ': ' + (i.stateWeb === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateWeb === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.ANDROID') + ': ' + (i.stateAndroid === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateAndroid === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n <span\n class=\"w-2 h-2 rounded-sm\"\n [title]=\"textsService.t('TABLE_ITEMS.PLATFORM.IOS') + ': ' + (i.stateIos === 'on' ? textsService.t('TABLE_ITEMS.ON') : textsService.t('TABLE_ITEMS.OFF'))\"\n [ngClass]=\"i.stateIos === 'on' ? 'bg-green-400' : 'bg-red-400'\"\n ></span>\n </div>\n }\n @case ('priority') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.priority === 'low',\n 'bg-yellow-500': i.priority === 'medium',\n 'bg-red-500': i.priority === 'high',\n 'bg-zinc-900': !i.priority,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ i.priority ? (i.priority | priorities) : 'N/D' }}\n </span>\n </div>\n }\n @case ('capacity') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-red-500': i.capacity > 1 && i.capacity <= 100,\n 'bg-yellow-500': i.capacity > 100 && i.capacity <= 500,\n 'bg-green-500': i.capacity > 500,\n 'bg-zinc-900': !i.capacity || i.capacity === 0,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ i.capacity ? i.capacity : 'N/D' }}\n </span>\n </div>\n }\n @case ('lastContactedItems') {\n <div class=\"flex gap-1.5 items-center\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.user._id !== adminUserId,\n 'bg-yellow-500': i.user._id === adminUserId,\n }\"\n ></div>\n @if (i.lastContacted && i.user._id === adminUserId) {\n <span class=\"text-xs\">{{ i.lastContacted | dateChat | firstLetterCase }}</span>\n }\n @if ((i.lastContacted && i.user._id !== adminUserId) || i.user._id !== adminUserId) {\n <span class=\"text-xs\">{{ textsService.t('TABLE_ITEMS.VERIFIED') }}</span>\n }\n @if (!i.lastContacted && i.user._id === adminUserId) {\n <span class=\"text-xs\">N/D</span>\n }\n </div>\n }\n @case ('lastContactedOkKo') {\n <div class=\"flex gap-1.5 items-center\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngClass]=\"{\n 'bg-green-500': i.user._id !== adminUserId,\n 'bg-yellow-500': i.user._id === adminUserId,\n }\"\n ></div>\n @if (i.user._id !== adminUserId) {\n <span>{{ textsService.t('TABLE_ITEMS.SUCCESS') }}</span>\n }\n @if (i.user._id === adminUserId) {\n <span>{{ textsService.t('TABLE_ITEMS.PENDING') }}</span>\n }\n </div>\n }\n @case ('level') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1 flex items-center justify-center\"\n [ngStyle]=\"{ 'background-color': getLevelColor(item()) }\"\n ></div>\n <p class=\"pl-1 text-sm font-semibold\">\n {{ getLevelName(item()) }}\n @if (getLevelPrice(item()) !== null) {\n <span class=\"text-xs font-extralight\">({{ getLevelPrice(item()) }}\u20AC)</span>\n }\n </p>\n </div>\n }\n @case ('subStatePromotion') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': getSubStatePromotion(item()) === 'finished',\n 'bg-yellow-500': getSubStatePromotion(item()) === 'schedule',\n 'bg-blue-500': getSubStatePromotion(item()) === 'inProgress',\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">{{ getSubStatePromotion(item()) | stateName }}</span>\n </div>\n }\n @case ('trueOrFalse') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n <div\n class=\"w-2.5 h-2.5 text-xs border-1\"\n [ngClass]=\"{\n 'bg-green-500': $any(item())[header().key] === true,\n 'bg-red-500': $any(item())[header().key] !== false,\n }\"\n ></div>\n <span class=\"pl-1 text-sm font-semibold\">\n {{ $any(item())[header().key] ? textsService.yes : textsService.no }}\n </span>\n </div>\n }\n @case ('promotionCodeUsage') {\n <div class=\"flex items-center gap-1 p-1 px-2 rounded-xl\">\n @if (getRemainingPercentage(item()) > 50) {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-green-500\"></div>\n } @else if (getRemainingPercentage(item()) > 20) {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-yellow-500\"></div>\n } @else {\n <div class=\"w-2.5 h-2.5 text-xs border-1 bg-red-500\"></div>\n }\n <p class=\"text-sm\">{{ i.usedCount }} / {{ i.maxUses }}</p>\n </div>\n }\n}\n" }]
17809
17809
  }], propDecorators: { header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: true }] }], item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: true }] }] } });
17810
17810
 
17811
17811
  class XSTableItemsVisitsComponent {