tickera-angular-components 0.0.1-dev.0 → 0.0.1-dev.1

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.
@@ -1,20 +1,21 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, makeEnvironmentProviders, PLATFORM_ID, Inject, Injectable, signal, LOCALE_ID, computed, inject, EventEmitter, Input, Output, ViewEncapsulation, Component, Self, Optional, Injector, HostListener, forwardRef } from '@angular/core';
2
+ import { InjectionToken, makeEnvironmentProviders, PLATFORM_ID, Inject, Injectable, signal, LOCALE_ID, computed, inject, EventEmitter, Input, Output, ViewEncapsulation, Component, Self, Optional, Injector, HostListener, forwardRef, effect, ViewChild } from '@angular/core';
3
3
  import * as i1 from '@angular/common/http';
4
4
  import { HttpHeaders } from '@angular/common/http';
5
5
  import { throwError, BehaviorSubject, Subject, of } from 'rxjs';
6
6
  import { catchError, distinctUntilChanged, debounceTime, switchMap, takeUntil, map } from 'rxjs/operators';
7
- import * as i1$2 from '@angular/common';
7
+ import * as i2$1 from '@angular/common';
8
8
  import { isPlatformBrowser, formatDate, CommonModule, DatePipe } from '@angular/common';
9
9
  import { toast } from 'ngx-sonner';
10
10
  import { toObservable } from '@angular/core/rxjs-interop';
11
11
  import * as i2 from '@jsverse/transloco';
12
12
  import { TranslocoModule } from '@jsverse/transloco';
13
+ import * as i3 from '@angular/router';
13
14
  import { RouterLink } from '@angular/router';
14
15
  import * as i1$1 from '@angular/forms';
15
16
  import { FormsModule, ReactiveFormsModule, Validators, NgControl, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
16
17
  import { DEFAULT_TOOLBAR, Editor, toHTML, NgxEditorComponent, NgxEditorMenuComponent } from 'ngx-editor';
17
- import * as i2$1 from '@ng-select/ng-select';
18
+ import * as i2$2 from '@ng-select/ng-select';
18
19
  import { NgSelectModule } from '@ng-select/ng-select';
19
20
 
20
21
  const TICKERA_COMPONENTS_CONFIG = new InjectionToken('TICKERA_COMPONENTS_CONFIG');
@@ -1585,7 +1586,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
1585
1586
  class AuditInformationComponent {
1586
1587
  data = null;
1587
1588
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AuditInformationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1588
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: AuditInformationComponent, isStandalone: true, selector: "app-audit-information", inputs: { data: "data" }, ngImport: i0, template: "@if (data) {\n <div class=\"w-full bg-white rounded-lg shadow-lg overflow-hidden\">\n <div class=\"border-b border-gray-200 last:border-b-0\">\n <div class=\"flex items-center justify-between p-4 bg-gray-50 border-b border-gray-200\">\n <p class=\"text-sm font-semibold\">Informaci\u00F3n de auditoria</p>\n </div>\n\n <div class=\"p-4 w-full\">\n <ul class=\"flex flex-col gap-4 list-none p-0 m-0 w-full text-xs\">\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">Fecha de creaci\u00F3n:</span>\n <span>{{ data.created_at | date: 'medium' }}</span>\n </li>\n\n @if (data.created_by_admin) {\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">Creado por:</span>\n <span>\n {{ data.created_by_admin.first_name }} - {{ data.created_by_admin.email }}\n </span>\n </li>\n }\n\n @if (data.updated_at) {\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">\u00DAltima actualizaci\u00F3n:</span>\n <span>{{ data.updated_at | date: 'medium' }}</span>\n </li>\n }\n\n @if (data.updated_by_admin) {\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">Actualizado por:</span>\n <span>\n {{ data.updated_by_admin.first_name }} - {{ data.updated_by_admin.email }}\n </span>\n </li>\n }\n\n @if (data.is_published && data.published_at) {\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">Fecha de publicaci\u00F3n:</span>\n <span>{{ data.published_at | date: 'medium' }}</span>\n </li>\n }\n\n @if (data.is_published && data.published_by_admin) {\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">Publicado por:</span>\n <span>\n {{ data.published_by_admin.first_name }} - {{ data.published_by_admin.email }}\n </span>\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.DatePipe, name: "date" }] });
1589
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: AuditInformationComponent, isStandalone: true, selector: "app-audit-information", inputs: { data: "data" }, ngImport: i0, template: "@if (data) {\n <div class=\"w-full bg-white rounded-lg shadow-lg overflow-hidden\">\n <div class=\"border-b border-gray-200 last:border-b-0\">\n <div class=\"flex items-center justify-between p-4 bg-gray-50 border-b border-gray-200\">\n <p class=\"text-sm font-semibold\">Informaci\u00F3n de auditoria</p>\n </div>\n\n <div class=\"p-4 w-full\">\n <ul class=\"flex flex-col gap-4 list-none p-0 m-0 w-full text-xs\">\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">Fecha de creaci\u00F3n:</span>\n <span>{{ data.created_at | date: 'medium' }}</span>\n </li>\n\n @if (data.created_by_admin) {\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">Creado por:</span>\n <span>\n {{ data.created_by_admin.first_name }} - {{ data.created_by_admin.email }}\n </span>\n </li>\n }\n\n @if (data.updated_at) {\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">\u00DAltima actualizaci\u00F3n:</span>\n <span>{{ data.updated_at | date: 'medium' }}</span>\n </li>\n }\n\n @if (data.updated_by_admin) {\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">Actualizado por:</span>\n <span>\n {{ data.updated_by_admin.first_name }} - {{ data.updated_by_admin.email }}\n </span>\n </li>\n }\n\n @if (data.is_published && data.published_at) {\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">Fecha de publicaci\u00F3n:</span>\n <span>{{ data.published_at | date: 'medium' }}</span>\n </li>\n }\n\n @if (data.is_published && data.published_by_admin) {\n <li class=\"flex flex-col items-start\">\n <span class=\"font-bold\">Publicado por:</span>\n <span>\n {{ data.published_by_admin.first_name }} - {{ data.published_by_admin.email }}\n </span>\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2$1.DatePipe, name: "date" }] });
1589
1590
  }
1590
1591
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AuditInformationComponent, decorators: [{
1591
1592
  type: Component,
@@ -1638,7 +1639,7 @@ class DynamicTableComponent {
1638
1639
  });
1639
1640
  }
1640
1641
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DynamicTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
1641
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: DynamicTableComponent, isStandalone: true, selector: "dynamic-table", inputs: { title: "title", data: "data", headers: "headers", columnComponents: "columnComponents", isLoading: "isLoading", totalItems: "totalItems", itemsPerPage: "itemsPerPage", currentPage: "currentPage", showPagination: "showPagination", showSearch: "showSearch", showTitle: "showTitle" }, outputs: { pageChange: "pageChange", searchChange: "searchChange" }, ngImport: i0, template: "<div\n class=\"bg-white rounded-lg overflow-hidden border border-gray-200 dark:bg-gray-800 dark:border-gray-700\"\n>\n @if (showTitle || showSearch) {\n <div class=\"p-4 border-b border-gray-200 flex items-center justify-start dark:border-gray-700\">\n @if (showTitle) {\n <h2 class=\"text-lg font-semibold dark:text-white\">{{ title }}</h2>\n }\n\n @if (showSearch) {\n <input\n type=\"text\"\n (input)=\"onSearch($event)\"\n placeholder=\"Buscar...\"\n class=\"ml-auto block w-sm rounded-md bg-white px-3 py-1.5 text-base text-gray-900 outline-1 -outline-offset-1 outline-gray-300 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-indigo-600 sm:text-sm/6 dark:bg-white/5 dark:text-white dark:outline-white/10 dark:placeholder:text-gray-500 dark:focus:outline-indigo-500\"\n />\n }\n </div>\n }\n\n <div class=\"overflow-x-auto\">\n <table class=\"w-full text-left border-collapse\">\n <thead class=\"bg-gray-100 text-gray-600 text-xs dark:bg-gray-700 dark:text-gray-300\">\n <tr>\n @for (header of headers; track header.key) {\n <th class=\"p-3 border-b border-gray-300 whitespace-nowrap dark:border-gray-600\">\n {{ header.label }}\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"text-gray-700 text-xs dark:text-gray-200\">\n @if (isLoading) {\n <tr\n class=\"border-b even:bg-gray-100 border-gray-200 last:border-none transition-colors dark:even:bg-gray-700/50 dark:border-gray-700\"\n >\n @for (header of headers; track header.key) {\n <td class=\"p-3\">\n <div class=\"h-5 bg-gray-200 rounded animate-pulse w-full dark:bg-gray-600\"></div>\n </td>\n }\n </tr>\n }\n\n @for (row of data; track row) {\n <tr\n class=\"hover:bg-gray-200 border-b even:bg-gray-100 border-gray-200 last:border-none transition-colors dark:hover:bg-gray-700 dark:even:bg-gray-700/50 dark:border-gray-700\"\n >\n @for (header of headers; track header.key) {\n <td class=\"p-3 whitespace-nowrap\">\n @if (columnComponents[header.key]) {\n <ng-container\n *ngComponentOutlet=\"columnComponents[header.key]; injector: createInjector(row)\"\n ></ng-container>\n } @else {\n {{ row[header.key] || '---' }}\n }\n </td>\n }\n </tr>\n }\n\n @if ((!data || data.length < 1) && !isLoading) {\n <tr>\n <td\n [attr.colspan]=\"headers.length\"\n class=\"p-6 text-center text-gray-400 italic dark:text-gray-500\"\n >\n No se encontraron registros en el servidor.\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n @if (showPagination) {\n <div\n class=\"p-4 flex items-center justify-between bg-gray-50 border-gray-300 border-t dark:bg-gray-800/50 dark:border-gray-700\"\n >\n <div class=\"text-sm text-gray-500 dark:text-gray-400\">\n Mostrando p\u00E1gina\n <span class=\"font-semibold text-gray-800 dark:text-white\">{{ currentPage }}</span> de\n <span class=\"font-semibold text-gray-800 dark:text-white\">{{ totalPages }}</span>\n <span class=\"ml-1\">({{ totalItems }} registros totales)</span>\n </div>\n\n <div class=\"flex gap-2\">\n <button\n (click)=\"changePage(-1)\"\n [disabled]=\"currentPage === 1\"\n class=\"flex items-center px-4 py-2 border rounded-lg bg-white text-sm font-medium hover:bg-gray-100 disabled:opacity-40 disabled:cursor-not-allowed transition-all dark:bg-gray-700 dark:hover:bg-gray-600 dark:border-gray-600 dark:text-white\"\n >\n Anterior\n </button>\n <button\n (click)=\"changePage(1)\"\n [disabled]=\"currentPage >= totalPages\"\n class=\"flex items-center px-4 py-2 border rounded-lg bg-white text-sm font-medium hover:bg-gray-100 disabled:opacity-40 disabled:cursor-not-allowed transition-all dark:bg-gray-700 dark:hover:bg-gray-600 dark:border-gray-600 dark:text-white\"\n >\n Siguiente\n </button>\n </div>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }] });
1642
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: DynamicTableComponent, isStandalone: true, selector: "dynamic-table", inputs: { title: "title", data: "data", headers: "headers", columnComponents: "columnComponents", isLoading: "isLoading", totalItems: "totalItems", itemsPerPage: "itemsPerPage", currentPage: "currentPage", showPagination: "showPagination", showSearch: "showSearch", showTitle: "showTitle" }, outputs: { pageChange: "pageChange", searchChange: "searchChange" }, ngImport: i0, template: "<div\n class=\"bg-white rounded-lg overflow-hidden border border-gray-200 dark:bg-gray-800 dark:border-gray-700\"\n>\n @if (showTitle || showSearch) {\n <div class=\"p-4 border-b border-gray-200 flex items-center justify-start dark:border-gray-700\">\n @if (showTitle) {\n <h2 class=\"text-lg font-semibold dark:text-white\">{{ title }}</h2>\n }\n\n @if (showSearch) {\n <input\n type=\"text\"\n (input)=\"onSearch($event)\"\n placeholder=\"Buscar...\"\n class=\"ml-auto block w-sm rounded-md bg-white px-3 py-1.5 text-base text-gray-900 outline-1 -outline-offset-1 outline-gray-300 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-indigo-600 sm:text-sm/6 dark:bg-white/5 dark:text-white dark:outline-white/10 dark:placeholder:text-gray-500 dark:focus:outline-indigo-500\"\n />\n }\n </div>\n }\n\n <div class=\"overflow-x-auto\">\n <table class=\"w-full text-left border-collapse\">\n <thead class=\"bg-gray-100 text-gray-600 text-xs dark:bg-gray-700 dark:text-gray-300\">\n <tr>\n @for (header of headers; track header.key) {\n <th class=\"p-3 border-b border-gray-300 whitespace-nowrap dark:border-gray-600\">\n {{ header.label }}\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"text-gray-700 text-xs dark:text-gray-200\">\n @if (isLoading) {\n <tr\n class=\"border-b even:bg-gray-100 border-gray-200 last:border-none transition-colors dark:even:bg-gray-700/50 dark:border-gray-700\"\n >\n @for (header of headers; track header.key) {\n <td class=\"p-3\">\n <div class=\"h-5 bg-gray-200 rounded animate-pulse w-full dark:bg-gray-600\"></div>\n </td>\n }\n </tr>\n }\n\n @for (row of data; track row) {\n <tr\n class=\"hover:bg-gray-200 border-b even:bg-gray-100 border-gray-200 last:border-none transition-colors dark:hover:bg-gray-700 dark:even:bg-gray-700/50 dark:border-gray-700\"\n >\n @for (header of headers; track header.key) {\n <td class=\"p-3 whitespace-nowrap\">\n @if (columnComponents[header.key]) {\n <ng-container\n *ngComponentOutlet=\"columnComponents[header.key]; injector: createInjector(row)\"\n ></ng-container>\n } @else {\n {{ row[header.key] || '---' }}\n }\n </td>\n }\n </tr>\n }\n\n @if ((!data || data.length < 1) && !isLoading) {\n <tr>\n <td\n [attr.colspan]=\"headers.length\"\n class=\"p-6 text-center text-gray-400 italic dark:text-gray-500\"\n >\n No se encontraron registros en el servidor.\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n @if (showPagination) {\n <div\n class=\"p-4 flex items-center justify-between bg-gray-50 border-gray-300 border-t dark:bg-gray-800/50 dark:border-gray-700\"\n >\n <div class=\"text-sm text-gray-500 dark:text-gray-400\">\n Mostrando p\u00E1gina\n <span class=\"font-semibold text-gray-800 dark:text-white\">{{ currentPage }}</span> de\n <span class=\"font-semibold text-gray-800 dark:text-white\">{{ totalPages }}</span>\n <span class=\"ml-1\">({{ totalItems }} registros totales)</span>\n </div>\n\n <div class=\"flex gap-2\">\n <button\n (click)=\"changePage(-1)\"\n [disabled]=\"currentPage === 1\"\n class=\"flex items-center px-4 py-2 border rounded-lg bg-white text-sm font-medium hover:bg-gray-100 disabled:opacity-40 disabled:cursor-not-allowed transition-all dark:bg-gray-700 dark:hover:bg-gray-600 dark:border-gray-600 dark:text-white\"\n >\n Anterior\n </button>\n <button\n (click)=\"changePage(1)\"\n [disabled]=\"currentPage >= totalPages\"\n class=\"flex items-center px-4 py-2 border rounded-lg bg-white text-sm font-medium hover:bg-gray-100 disabled:opacity-40 disabled:cursor-not-allowed transition-all dark:bg-gray-700 dark:hover:bg-gray-600 dark:border-gray-600 dark:text-white\"\n >\n Siguiente\n </button>\n </div>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }] });
1642
1643
  }
1643
1644
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DynamicTableComponent, decorators: [{
1644
1645
  type: Component,
@@ -1699,7 +1700,7 @@ class LanguageSwitcherComponent {
1699
1700
  </button>
1700
1701
  }
1701
1702
  </div>
1702
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1$2.UpperCasePipe, name: "uppercase" }] });
1703
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i2$1.UpperCasePipe, name: "uppercase" }] });
1703
1704
  }
1704
1705
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
1705
1706
  type: Component,
@@ -2976,7 +2977,7 @@ class AsyncSelectComponent {
2976
2977
  useExisting: forwardRef(() => AsyncSelectComponent),
2977
2978
  multi: true,
2978
2979
  },
2979
- ], usesOnChanges: true, ngImport: i0, template: "<div class=\"w-full\">\n @if (label) {\n <label class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {{ label }}\n @if (required) {\n <span class=\"text-red-500\">*</span>\n }\n </label>\n }\n\n <ng-select\n [items]=\"displayItems\"\n [multiple]=\"multiple\"\n [searchable]=\"searchable\"\n [clearable]=\"clearable\"\n [placeholder]=\"placeholder\"\n [loading]=\"loading || loadingSignal()\"\n [virtualScroll]=\"virtualScroll\"\n [notFoundText]=\"notFoundText\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [ngModel]=\"value\"\n [typeahead]=\"typeahead$\"\n [closeOnSelect]=\"!multiple\"\n (ngModelChange)=\"onSelectChange($event)\"\n (blur)=\"onTouched()\"\n (search)=\"onSearch($event)\"\n />\n\n @if (showError) {\n <div class=\"text-red-500 text-xs mt-1\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i2$1.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }] });
2980
+ ], usesOnChanges: true, ngImport: i0, template: "<div class=\"w-full\">\n @if (label) {\n <label class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n {{ label }}\n @if (required) {\n <span class=\"text-red-500\">*</span>\n }\n </label>\n }\n\n <ng-select\n [items]=\"displayItems\"\n [multiple]=\"multiple\"\n [searchable]=\"searchable\"\n [clearable]=\"clearable\"\n [placeholder]=\"placeholder\"\n [loading]=\"loading || loadingSignal()\"\n [virtualScroll]=\"virtualScroll\"\n [notFoundText]=\"notFoundText\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [ngModel]=\"value\"\n [typeahead]=\"typeahead$\"\n [closeOnSelect]=\"!multiple\"\n (ngModelChange)=\"onSelectChange($event)\"\n (blur)=\"onTouched()\"\n (search)=\"onSearch($event)\"\n />\n\n @if (showError) {\n <div class=\"text-red-500 text-xs mt-1\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i2$2.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }] });
2980
2981
  }
2981
2982
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AsyncSelectComponent, decorators: [{
2982
2983
  type: Component,
@@ -4576,11 +4577,286 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
4576
4577
  type: Output
4577
4578
  }] } });
4578
4579
 
4580
+ class DaySelectorGridComponent {
4581
+ platformId;
4582
+ performanceService;
4583
+ listEventService;
4584
+ toastService;
4585
+ displayMode = 'grid';
4586
+ loadingData = signal(true, ...(ngDevMode ? [{ debugName: "loadingData" }] : []));
4587
+ days = signal([], ...(ngDevMode ? [{ debugName: "days" }] : []));
4588
+ carouselTrack;
4589
+ constructor(platformId, performanceService, listEventService, toastService) {
4590
+ this.platformId = platformId;
4591
+ this.performanceService = performanceService;
4592
+ this.listEventService = listEventService;
4593
+ this.toastService = toastService;
4594
+ effect(() => {
4595
+ this.listEventService.filteredShowId();
4596
+ if (isPlatformBrowser(this.platformId)) {
4597
+ this.days.set([]);
4598
+ this.listEventService.setSelectedDay(null);
4599
+ this.loadData();
4600
+ }
4601
+ });
4602
+ }
4603
+ loadData() {
4604
+ this.loadingData.set(true);
4605
+ const showId = this.listEventService.filteredShowId() ?? undefined;
4606
+ this.performanceService.fetchAvailableDays({ show_id: showId }).subscribe({
4607
+ next: (response) => {
4608
+ const days = response?.data?.days ?? [];
4609
+ this.days.set(days);
4610
+ if (days.length > 0 && !this.listEventService.selectedDay()) {
4611
+ this.listEventService.setSelectedDay(days[0]);
4612
+ }
4613
+ this.loadingData.set(false);
4614
+ },
4615
+ error: () => {
4616
+ this.toastService.show('Error al cargar los datos de la función.', 'error');
4617
+ this.loadingData.set(false);
4618
+ },
4619
+ });
4620
+ }
4621
+ isDayActive(day) {
4622
+ return day.date === this.listEventService.selectedDay()?.date;
4623
+ }
4624
+ onToggle(day) {
4625
+ if (this.isDayActive(day))
4626
+ return;
4627
+ this.listEventService.setSelectedPerformance(null);
4628
+ this.listEventService.setSelectedDay(day);
4629
+ }
4630
+ scrollCarousel(direction) {
4631
+ const track = this.carouselTrack?.nativeElement;
4632
+ if (!track)
4633
+ return;
4634
+ const item = track.children[0];
4635
+ const itemWidth = item?.offsetWidth ?? 112;
4636
+ track.scrollBy({ left: direction * (itemWidth + 8), behavior: 'smooth' });
4637
+ }
4638
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DaySelectorGridComponent, deps: [{ token: PLATFORM_ID }, { token: PerformanceService }, { token: PerformancesListEventsService }, { token: ToastService }], target: i0.ɵɵFactoryTarget.Component });
4639
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: DaySelectorGridComponent, isStandalone: true, selector: "day-selector-grid", inputs: { displayMode: "displayMode" }, viewQueries: [{ propertyName: "carouselTrack", first: true, predicate: ["carouselTrack"], descendants: true }], ngImport: i0, template: "@if (loadingData()) {\n <div class=\"mt-3 grid grid-cols-4 gap-2 sm:grid-cols-10\">\n @for (i of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; track $index) {\n <div\n class=\"h-26 border border-neutral-200 dark:border-white/10 bg-neutral-100 dark:bg-white/[0.03] rounded-xl animate-pulse w-full\"\n ></div>\n }\n </div>\n}\n\n@if (!loadingData() && days().length < 1) {\n <app-alert\n type=\"error\"\n text=\"No se encontraron funciones disponibles\"\n size=\"md\"\n [closeable]=\"false\"\n />\n}\n\n@if (days().length > 0) {\n <p class=\"text-[11px] font-semibold tracking-[0.25em] text-neutral-500 uppercase\">\n Selecciona un d\u00EDa\n </p>\n}\n\n@if (displayMode === 'carousel' && days().length > 0) {\n <div class=\"relative mt-3\">\n <button\n type=\"button\"\n (click)=\"scrollCarousel(-1)\"\n class=\"absolute left-0 top-1/2 -translate-y-1/2 z-10 flex items-center justify-center w-8 h-8 rounded-full bg-white dark:bg-neutral-800 border border-neutral-200 dark:border-white/10 shadow-sm hover:bg-neutral-100 dark:hover:bg-neutral-700 transition cursor-pointer\"\n aria-label=\"Anterior\"\n >\n <i class=\"ri-arrow-left-s-line text-lg\"></i>\n </button>\n <div\n #carouselTrack\n class=\"flex overflow-x-auto snap-x snap-mandatory gap-2 px-10 py-1 scroll-smooth [&::-webkit-scrollbar]:hidden\"\n >\n @for (item of days(); track $index) {\n <button\n (click)=\"onToggle(item)\"\n class=\"snap-start flex-shrink-0 w-28 flex flex-col items-center cursor-pointer rounded-xl border border-neutral-200 dark:border-white/10 bg-neutral-50 dark:bg-white/[0.03] px-2 py-3 transition hover:border-neutral-300 dark:hover:border-white/25 hover:bg-neutral-200 dark:hover:bg-white/[0.06] text-neutral-800 dark:text-white\"\n [class.glow-red]=\"isDayActive(item)\"\n [class.border-red-500]=\"isDayActive(item)\"\n [class.bg-red-500]=\"isDayActive(item)\"\n [class.text-white]=\"isDayActive(item)\"\n [class.hover:bg-red-600]=\"isDayActive(item)\"\n [class.dark:hover:text-white]=\"isDayActive(item)\"\n >\n <span\n class=\"text-[10px] font-semibold tracking-widest text-neutral-500 dark:text-white/80\"\n [class.text-white]=\"isDayActive(item)\"\n >\n {{ item.date | date: 'EEE' | uppercase }}\n </span>\n <span class=\"my-0.5 text-2xl font-extrabold leading-none\">\n {{ item.date | date: 'dd' }}\n </span>\n <span\n class=\"text-[10px] font-medium tracking-widest text-neutral-500 dark:text-white/80\"\n [class.text-white]=\"isDayActive(item)\"\n >\n {{ item.date | date: 'MMM' }}\n </span>\n <span\n class=\"mt-2 rounded-full bg-neutral-200 dark:bg-black/25 px-1.5 py-px text-[9px] font-semibold\"\n [class.text-red-500]=\"isDayActive(item)\"\n [class.dark:text-white]=\"isDayActive(item)\"\n >\n {{ item.count | number: '1.0-2' }}\n </span>\n </button>\n }\n </div>\n <button\n type=\"button\"\n (click)=\"scrollCarousel(1)\"\n class=\"absolute right-0 top-1/2 -translate-y-1/2 z-10 flex items-center justify-center w-8 h-8 rounded-full bg-white dark:bg-neutral-800 border border-neutral-200 dark:border-white/10 shadow-sm hover:bg-neutral-100 dark:hover:bg-neutral-700 transition cursor-pointer\"\n aria-label=\"Siguiente\"\n >\n <i class=\"ri-arrow-right-s-line text-lg\"></i>\n </button>\n </div>\n} @else {\n <div class=\"mt-3 grid grid-cols-4 gap-2 sm:grid-cols-10\">\n @for (item of days(); track $index) {\n <button\n (click)=\"onToggle(item)\"\n class=\"flex flex-col items-center cursor-pointer rounded-xl border border-neutral-200 dark:border-white/10 bg-neutral-50 dark:bg-white/[0.03] px-2 py-3 transition hover:border-neutral-300 dark:hover:border-white/25 hover:bg-neutral-200 dark:hover:bg-white/[0.06] text-neutral-800 dark:text-white\"\n [class.glow-red]=\"isDayActive(item)\"\n [class.border-red-500]=\"isDayActive(item)\"\n [class.bg-red-500]=\"isDayActive(item)\"\n [class.text-white]=\"isDayActive(item)\"\n [class.hover:bg-red-600]=\"isDayActive(item)\"\n [class.dark:hover:text-white]=\"isDayActive(item)\"\n >\n <span\n class=\"text-[10px] font-semibold tracking-widest text-neutral-500 dark:text-white/80\"\n [class.text-white]=\"isDayActive(item)\"\n >\n {{ item.date | date: 'EEE' | uppercase }}\n </span>\n <span class=\"my-0.5 text-2xl font-extrabold leading-none\">\n {{ item.date | date: 'dd' }}\n </span>\n <span\n class=\"text-[10px] font-medium tracking-widest text-neutral-500 dark:text-white/80\"\n [class.text-white]=\"isDayActive(item)\"\n >\n {{ item.date | date: 'MMM' }}\n </span>\n <span\n class=\"mt-2 rounded-full bg-neutral-200 dark:bg-black/25 px-1.5 py-px text-[9px] font-semibold\"\n [class.text-red-500]=\"isDayActive(item)\"\n [class.dark:text-white]=\"isDayActive(item)\"\n >\n {{ item.count | number: '1.0-2' }}\n </span>\n </button>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppAlertComponent, selector: "app-alert", inputs: ["type", "text", "closeable", "size"] }, { kind: "pipe", type: i2$1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i2$1.DecimalPipe, name: "number" }, { kind: "pipe", type: i2$1.DatePipe, name: "date" }] });
4640
+ }
4641
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DaySelectorGridComponent, decorators: [{
4642
+ type: Component,
4643
+ args: [{ selector: 'day-selector-grid', standalone: true, imports: [CommonModule, AppAlertComponent], template: "@if (loadingData()) {\n <div class=\"mt-3 grid grid-cols-4 gap-2 sm:grid-cols-10\">\n @for (i of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; track $index) {\n <div\n class=\"h-26 border border-neutral-200 dark:border-white/10 bg-neutral-100 dark:bg-white/[0.03] rounded-xl animate-pulse w-full\"\n ></div>\n }\n </div>\n}\n\n@if (!loadingData() && days().length < 1) {\n <app-alert\n type=\"error\"\n text=\"No se encontraron funciones disponibles\"\n size=\"md\"\n [closeable]=\"false\"\n />\n}\n\n@if (days().length > 0) {\n <p class=\"text-[11px] font-semibold tracking-[0.25em] text-neutral-500 uppercase\">\n Selecciona un d\u00EDa\n </p>\n}\n\n@if (displayMode === 'carousel' && days().length > 0) {\n <div class=\"relative mt-3\">\n <button\n type=\"button\"\n (click)=\"scrollCarousel(-1)\"\n class=\"absolute left-0 top-1/2 -translate-y-1/2 z-10 flex items-center justify-center w-8 h-8 rounded-full bg-white dark:bg-neutral-800 border border-neutral-200 dark:border-white/10 shadow-sm hover:bg-neutral-100 dark:hover:bg-neutral-700 transition cursor-pointer\"\n aria-label=\"Anterior\"\n >\n <i class=\"ri-arrow-left-s-line text-lg\"></i>\n </button>\n <div\n #carouselTrack\n class=\"flex overflow-x-auto snap-x snap-mandatory gap-2 px-10 py-1 scroll-smooth [&::-webkit-scrollbar]:hidden\"\n >\n @for (item of days(); track $index) {\n <button\n (click)=\"onToggle(item)\"\n class=\"snap-start flex-shrink-0 w-28 flex flex-col items-center cursor-pointer rounded-xl border border-neutral-200 dark:border-white/10 bg-neutral-50 dark:bg-white/[0.03] px-2 py-3 transition hover:border-neutral-300 dark:hover:border-white/25 hover:bg-neutral-200 dark:hover:bg-white/[0.06] text-neutral-800 dark:text-white\"\n [class.glow-red]=\"isDayActive(item)\"\n [class.border-red-500]=\"isDayActive(item)\"\n [class.bg-red-500]=\"isDayActive(item)\"\n [class.text-white]=\"isDayActive(item)\"\n [class.hover:bg-red-600]=\"isDayActive(item)\"\n [class.dark:hover:text-white]=\"isDayActive(item)\"\n >\n <span\n class=\"text-[10px] font-semibold tracking-widest text-neutral-500 dark:text-white/80\"\n [class.text-white]=\"isDayActive(item)\"\n >\n {{ item.date | date: 'EEE' | uppercase }}\n </span>\n <span class=\"my-0.5 text-2xl font-extrabold leading-none\">\n {{ item.date | date: 'dd' }}\n </span>\n <span\n class=\"text-[10px] font-medium tracking-widest text-neutral-500 dark:text-white/80\"\n [class.text-white]=\"isDayActive(item)\"\n >\n {{ item.date | date: 'MMM' }}\n </span>\n <span\n class=\"mt-2 rounded-full bg-neutral-200 dark:bg-black/25 px-1.5 py-px text-[9px] font-semibold\"\n [class.text-red-500]=\"isDayActive(item)\"\n [class.dark:text-white]=\"isDayActive(item)\"\n >\n {{ item.count | number: '1.0-2' }}\n </span>\n </button>\n }\n </div>\n <button\n type=\"button\"\n (click)=\"scrollCarousel(1)\"\n class=\"absolute right-0 top-1/2 -translate-y-1/2 z-10 flex items-center justify-center w-8 h-8 rounded-full bg-white dark:bg-neutral-800 border border-neutral-200 dark:border-white/10 shadow-sm hover:bg-neutral-100 dark:hover:bg-neutral-700 transition cursor-pointer\"\n aria-label=\"Siguiente\"\n >\n <i class=\"ri-arrow-right-s-line text-lg\"></i>\n </button>\n </div>\n} @else {\n <div class=\"mt-3 grid grid-cols-4 gap-2 sm:grid-cols-10\">\n @for (item of days(); track $index) {\n <button\n (click)=\"onToggle(item)\"\n class=\"flex flex-col items-center cursor-pointer rounded-xl border border-neutral-200 dark:border-white/10 bg-neutral-50 dark:bg-white/[0.03] px-2 py-3 transition hover:border-neutral-300 dark:hover:border-white/25 hover:bg-neutral-200 dark:hover:bg-white/[0.06] text-neutral-800 dark:text-white\"\n [class.glow-red]=\"isDayActive(item)\"\n [class.border-red-500]=\"isDayActive(item)\"\n [class.bg-red-500]=\"isDayActive(item)\"\n [class.text-white]=\"isDayActive(item)\"\n [class.hover:bg-red-600]=\"isDayActive(item)\"\n [class.dark:hover:text-white]=\"isDayActive(item)\"\n >\n <span\n class=\"text-[10px] font-semibold tracking-widest text-neutral-500 dark:text-white/80\"\n [class.text-white]=\"isDayActive(item)\"\n >\n {{ item.date | date: 'EEE' | uppercase }}\n </span>\n <span class=\"my-0.5 text-2xl font-extrabold leading-none\">\n {{ item.date | date: 'dd' }}\n </span>\n <span\n class=\"text-[10px] font-medium tracking-widest text-neutral-500 dark:text-white/80\"\n [class.text-white]=\"isDayActive(item)\"\n >\n {{ item.date | date: 'MMM' }}\n </span>\n <span\n class=\"mt-2 rounded-full bg-neutral-200 dark:bg-black/25 px-1.5 py-px text-[9px] font-semibold\"\n [class.text-red-500]=\"isDayActive(item)\"\n [class.dark:text-white]=\"isDayActive(item)\"\n >\n {{ item.count | number: '1.0-2' }}\n </span>\n </button>\n }\n </div>\n}\n" }]
4644
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
4645
+ type: Inject,
4646
+ args: [PLATFORM_ID]
4647
+ }] }, { type: PerformanceService }, { type: PerformancesListEventsService }, { type: ToastService }], propDecorators: { displayMode: [{
4648
+ type: Input
4649
+ }], carouselTrack: [{
4650
+ type: ViewChild,
4651
+ args: ['carouselTrack']
4652
+ }] } });
4653
+
4654
+ class PerformanceCardComponent {
4655
+ listEventService;
4656
+ card;
4657
+ constructor(listEventService) {
4658
+ this.listEventService = listEventService;
4659
+ }
4660
+ onSelect() {
4661
+ this.listEventService.setSelectedPerformance(this.card);
4662
+ }
4663
+ isSelected() {
4664
+ return this.listEventService.selectedPerformance()?.id === this.card.id;
4665
+ }
4666
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceCardComponent, deps: [{ token: PerformancesListEventsService }], target: i0.ɵɵFactoryTarget.Component });
4667
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: PerformanceCardComponent, isStandalone: true, selector: "performance-card", inputs: { card: "card" }, ngImport: i0, template: "<div\n class=\"flex flex-col sm:flex-row items-center justify-between gap-4 rounded-2xl border px-5 py-4 transition\"\n [class.border-neutral-200]=\"!isSelected()\"\n [class.dark:border-neutral-700]=\"!isSelected()\"\n [class.bg-neutral-50]=\"!isSelected()\"\n [class.dark:bg-neutral-900]=\"!isSelected()\"\n [class.hover:border-neutral-300]=\"!isSelected()\"\n [class.dark:hover:border-neutral-600]=\"!isSelected()\"\n [class.border-brand]=\"isSelected()\"\n [class.bg-red-500/[0.08]]=\"isSelected()\"\n [class.glow-red]=\"isSelected()\"\n>\n <div class=\"flex rounded-sm overflow-hidden w-full h-auto min-h-20 sm:h-20 sm:w-20\">\n @if (card.show.images && card.show.images.length > 0) {\n <img\n [src]=\"card.show.images[0].full_url\"\n class=\"object-contain object-center max-h-full max-w-full mx-auto\"\n />\n } @else {\n <span class=\"flex bg-gray-200 h-20 w-full animate-pulse\"></span>\n }\n </div>\n\n <div class=\"flex flex-col flex-1 w-full\">\n <div\n class=\"text-2xl font-extrabold leading-none\"\n [class.text-neutral-800]=\"!isSelected()\"\n [class.dark:text-neutral-200]=\"!isSelected()\"\n [class.text-neutral-900]=\"isSelected()\"\n [class.dark:text-neutral-100]=\"isSelected()\"\n >\n {{ card.show.title }}\n </div>\n\n <div class=\"leading-none\">\n <span class=\"text-sm text-neutral-500 dark:text-neutral-400\">\n {{ card.start_time | date: `EEEE` | titlecase }}\n {{ card.start_time | date: `dd 'de' MMMM,` }}\n </span>\n\n <span class=\"font-extrabold text-lg text-neutral-800 dark:text-neutral-200\">\n {{ card.start_time | date: `hh:mm` }}\n </span>\n\n <span\n class=\"font-extrabold text-sm\"\n [class.text-neutral-800]=\"!isSelected()\"\n [class.dark:text-white]=\"!isSelected()\"\n [class.text-red-500]=\"isSelected()\"\n >\n {{ card.start_time | date: 'a' }}\n </span>\n </div>\n\n <div class=\"text-sm text-neutral-500 dark:text-neutral-400 leading-none\">\n Desde\n <span class=\"text-neutral-600 dark:text-neutral-300 font-semibold\">\n ${{ card.zone_price_cheapest | number: '1.0-2' }}\n </span>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2 w-full sm:w-[200px]\">\n <app-link-button\n [route]=\"`/admin/performances/${card.id}/reservation`\"\n text=\"Comprar entradas\"\n icon=\"ri-coupon-line\"\n variant=\"primary\"\n size=\"xs\"\n />\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppLinkButtonComponent, selector: "app-link-button", inputs: ["disabled", "loading", "target", "text", "icon", "loadingText", "route", "queryParams", "size", "variant"] }, { kind: "pipe", type: i2$1.DecimalPipe, name: "number" }, { kind: "pipe", type: i2$1.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i2$1.DatePipe, name: "date" }] });
4668
+ }
4669
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceCardComponent, decorators: [{
4670
+ type: Component,
4671
+ args: [{ selector: 'performance-card', standalone: true, imports: [CommonModule, AppLinkButtonComponent], template: "<div\n class=\"flex flex-col sm:flex-row items-center justify-between gap-4 rounded-2xl border px-5 py-4 transition\"\n [class.border-neutral-200]=\"!isSelected()\"\n [class.dark:border-neutral-700]=\"!isSelected()\"\n [class.bg-neutral-50]=\"!isSelected()\"\n [class.dark:bg-neutral-900]=\"!isSelected()\"\n [class.hover:border-neutral-300]=\"!isSelected()\"\n [class.dark:hover:border-neutral-600]=\"!isSelected()\"\n [class.border-brand]=\"isSelected()\"\n [class.bg-red-500/[0.08]]=\"isSelected()\"\n [class.glow-red]=\"isSelected()\"\n>\n <div class=\"flex rounded-sm overflow-hidden w-full h-auto min-h-20 sm:h-20 sm:w-20\">\n @if (card.show.images && card.show.images.length > 0) {\n <img\n [src]=\"card.show.images[0].full_url\"\n class=\"object-contain object-center max-h-full max-w-full mx-auto\"\n />\n } @else {\n <span class=\"flex bg-gray-200 h-20 w-full animate-pulse\"></span>\n }\n </div>\n\n <div class=\"flex flex-col flex-1 w-full\">\n <div\n class=\"text-2xl font-extrabold leading-none\"\n [class.text-neutral-800]=\"!isSelected()\"\n [class.dark:text-neutral-200]=\"!isSelected()\"\n [class.text-neutral-900]=\"isSelected()\"\n [class.dark:text-neutral-100]=\"isSelected()\"\n >\n {{ card.show.title }}\n </div>\n\n <div class=\"leading-none\">\n <span class=\"text-sm text-neutral-500 dark:text-neutral-400\">\n {{ card.start_time | date: `EEEE` | titlecase }}\n {{ card.start_time | date: `dd 'de' MMMM,` }}\n </span>\n\n <span class=\"font-extrabold text-lg text-neutral-800 dark:text-neutral-200\">\n {{ card.start_time | date: `hh:mm` }}\n </span>\n\n <span\n class=\"font-extrabold text-sm\"\n [class.text-neutral-800]=\"!isSelected()\"\n [class.dark:text-white]=\"!isSelected()\"\n [class.text-red-500]=\"isSelected()\"\n >\n {{ card.start_time | date: 'a' }}\n </span>\n </div>\n\n <div class=\"text-sm text-neutral-500 dark:text-neutral-400 leading-none\">\n Desde\n <span class=\"text-neutral-600 dark:text-neutral-300 font-semibold\">\n ${{ card.zone_price_cheapest | number: '1.0-2' }}\n </span>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2 w-full sm:w-[200px]\">\n <app-link-button\n [route]=\"`/admin/performances/${card.id}/reservation`\"\n text=\"Comprar entradas\"\n icon=\"ri-coupon-line\"\n variant=\"primary\"\n size=\"xs\"\n />\n </div>\n</div>\n" }]
4672
+ }], ctorParameters: () => [{ type: PerformancesListEventsService }], propDecorators: { card: [{
4673
+ type: Input,
4674
+ args: [{ required: true }]
4675
+ }] } });
4676
+
4677
+ class PerformanceCardListComponent {
4678
+ platformId;
4679
+ performanceService;
4680
+ listEventService;
4681
+ toastService;
4682
+ loadingData = signal(true, ...(ngDevMode ? [{ debugName: "loadingData" }] : []));
4683
+ performances = signal([], ...(ngDevMode ? [{ debugName: "performances" }] : []));
4684
+ constructor(platformId, performanceService, listEventService, toastService) {
4685
+ this.platformId = platformId;
4686
+ this.performanceService = performanceService;
4687
+ this.listEventService = listEventService;
4688
+ this.toastService = toastService;
4689
+ effect(() => {
4690
+ const date = this.listEventService.selectedDayDate();
4691
+ if (date) {
4692
+ this.loadData();
4693
+ }
4694
+ });
4695
+ effect(() => {
4696
+ this.listEventService.filteredShowId();
4697
+ this.performances.set([]);
4698
+ const date = this.listEventService.selectedDayDate();
4699
+ if (date) {
4700
+ this.loadData();
4701
+ }
4702
+ });
4703
+ }
4704
+ ngOnInit() {
4705
+ if (isPlatformBrowser(this.platformId)) {
4706
+ this.loadData();
4707
+ }
4708
+ }
4709
+ loadData() {
4710
+ this.loadingData.set(true);
4711
+ const date = this.listEventService.selectedDayDate();
4712
+ const showId = this.listEventService.filteredShowId() ?? undefined;
4713
+ if (!date) {
4714
+ this.loadingData.set(false);
4715
+ return;
4716
+ }
4717
+ this.performanceService.fetchDailyPerformances({ date, show_id: showId }).subscribe({
4718
+ next: (response) => {
4719
+ this.performances.set(response?.data?.performances ?? []);
4720
+ this.loadingData.set(false);
4721
+ },
4722
+ error: () => {
4723
+ this.toastService.show('Error al cargar los datos de la función.', 'error');
4724
+ this.loadingData.set(false);
4725
+ },
4726
+ });
4727
+ }
4728
+ get selectedDayDate() {
4729
+ return this.listEventService.selectedDay()?.date ?? null;
4730
+ }
4731
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceCardListComponent, deps: [{ token: PLATFORM_ID }, { token: PerformanceService }, { token: PerformancesListEventsService }, { token: ToastService }], target: i0.ɵɵFactoryTarget.Component });
4732
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: PerformanceCardListComponent, isStandalone: true, selector: "performance-card-list", ngImport: i0, template: "@if (selectedDayDate) {\n <p class=\"text-[11px] font-bold tracking-[0.25em] text-neutral-500 uppercase\">\n <span>Funciones disponibles:</span>\n <span class=\"text-neutral-500 dark:text-neutral-400\">\n el {{ selectedDayDate | date: \"EEEE d 'de' MMMM\" }}\n </span>\n </p>\n}\n\n<div class=\"mt-4 flex flex-col gap-2 w-full\">\n @if (loadingData()) {\n @for (i of [1, 2]; track $index) {\n <div\n class=\"h-40 border border-neutral-200 dark:border-white/10 bg-neutral-100 dark:bg-white/[0.03] rounded-xl animate-pulse w-full\"\n ></div>\n }\n }\n\n @for (card of performances(); track $index) {\n <performance-card [card]=\"card\" />\n }\n</div>\n", dependencies: [{ kind: "component", type: PerformanceCardComponent, selector: "performance-card", inputs: ["card"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2$1.DatePipe, name: "date" }] });
4733
+ }
4734
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceCardListComponent, decorators: [{
4735
+ type: Component,
4736
+ args: [{ selector: 'performance-card-list', standalone: true, imports: [PerformanceCardComponent, CommonModule], template: "@if (selectedDayDate) {\n <p class=\"text-[11px] font-bold tracking-[0.25em] text-neutral-500 uppercase\">\n <span>Funciones disponibles:</span>\n <span class=\"text-neutral-500 dark:text-neutral-400\">\n el {{ selectedDayDate | date: \"EEEE d 'de' MMMM\" }}\n </span>\n </p>\n}\n\n<div class=\"mt-4 flex flex-col gap-2 w-full\">\n @if (loadingData()) {\n @for (i of [1, 2]; track $index) {\n <div\n class=\"h-40 border border-neutral-200 dark:border-white/10 bg-neutral-100 dark:bg-white/[0.03] rounded-xl animate-pulse w-full\"\n ></div>\n }\n }\n\n @for (card of performances(); track $index) {\n <performance-card [card]=\"card\" />\n }\n</div>\n" }]
4737
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
4738
+ type: Inject,
4739
+ args: [PLATFORM_ID]
4740
+ }] }, { type: PerformanceService }, { type: PerformancesListEventsService }, { type: ToastService }] });
4741
+
4742
+ class PerformanceStepperComponent {
4743
+ stepLabel;
4744
+ title;
4745
+ highlight;
4746
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceStepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4747
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: PerformanceStepperComponent, isStandalone: true, selector: "performance-stepper", inputs: { stepLabel: "stepLabel", title: "title", highlight: "highlight" }, ngImport: i0, template: "<div class=\"flex items-center gap-2 text-[11px] font-semibold tracking-[0.25em] text-red-500\">\n <span class=\"h-px w-6 bg-red-500\"></span>\n {{ stepLabel }}\n</div>\n\n<h1 class=\"mt-3 text-5xl font-black leading-none tracking-tight sm:text-6xl\">\n <span class=\"text-neutral-800 dark:text-white\">{{ title }} </span><span class=\"text-red-500\">{{ highlight }}</span>\n</h1>\n", styles: [""] });
4748
+ }
4749
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceStepperComponent, decorators: [{
4750
+ type: Component,
4751
+ args: [{ selector: 'performance-stepper', standalone: true, template: "<div class=\"flex items-center gap-2 text-[11px] font-semibold tracking-[0.25em] text-red-500\">\n <span class=\"h-px w-6 bg-red-500\"></span>\n {{ stepLabel }}\n</div>\n\n<h1 class=\"mt-3 text-5xl font-black leading-none tracking-tight sm:text-6xl\">\n <span class=\"text-neutral-800 dark:text-white\">{{ title }} </span><span class=\"text-red-500\">{{ highlight }}</span>\n</h1>\n" }]
4752
+ }], propDecorators: { stepLabel: [{
4753
+ type: Input,
4754
+ args: [{ required: true }]
4755
+ }], title: [{
4756
+ type: Input,
4757
+ args: [{ required: true }]
4758
+ }], highlight: [{
4759
+ type: Input,
4760
+ args: [{ required: true }]
4761
+ }] } });
4762
+
4763
+ class ShowsFilterComponent {
4764
+ platformId;
4765
+ showService;
4766
+ listEventService;
4767
+ toastService;
4768
+ router;
4769
+ loadingData = signal(true, ...(ngDevMode ? [{ debugName: "loadingData" }] : []));
4770
+ shows = signal([], ...(ngDevMode ? [{ debugName: "shows" }] : []));
4771
+ constructor(platformId, showService, listEventService, toastService, router) {
4772
+ this.platformId = platformId;
4773
+ this.showService = showService;
4774
+ this.listEventService = listEventService;
4775
+ this.toastService = toastService;
4776
+ this.router = router;
4777
+ }
4778
+ ngOnInit() {
4779
+ if (isPlatformBrowser(this.platformId)) {
4780
+ this.loadData();
4781
+ }
4782
+ }
4783
+ loadData() {
4784
+ this.loadingData.set(true);
4785
+ this.showService.fetchAvailableShows({}).subscribe({
4786
+ next: (response) => {
4787
+ this.shows.set(response?.data?.shows ?? []);
4788
+ this.loadingData.set(false);
4789
+ },
4790
+ error: () => {
4791
+ this.toastService.show('Error al cargar shows del filtro.', 'error');
4792
+ this.loadingData.set(false);
4793
+ },
4794
+ });
4795
+ }
4796
+ isActive(showId) {
4797
+ return this.listEventService.filteredShowId() === showId;
4798
+ }
4799
+ onFilter(show) {
4800
+ const isCurrentlyActive = this.isActive(show.id);
4801
+ if (isCurrentlyActive) {
4802
+ this.listEventService.setFilteredShowId(null);
4803
+ this.router.navigate([], {
4804
+ queryParams: { show_id: null },
4805
+ queryParamsHandling: 'merge',
4806
+ });
4807
+ }
4808
+ else {
4809
+ this.listEventService.setFilteredShowId(show.id);
4810
+ this.router.navigate([], {
4811
+ queryParams: { show_id: show.id },
4812
+ queryParamsHandling: 'merge',
4813
+ });
4814
+ }
4815
+ this.listEventService.setSelectedDay(null);
4816
+ this.listEventService.setSelectedPerformance(null);
4817
+ }
4818
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowsFilterComponent, deps: [{ token: PLATFORM_ID }, { token: ShowService }, { token: PerformancesListEventsService }, { token: ToastService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component });
4819
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ShowsFilterComponent, isStandalone: true, selector: "shows-filter", ngImport: i0, template: "<div class=\"flex flex-col gap-2 w-full\">\n @if (shows().length > 0) {\n <p class=\"text-[11px] font-semibold tracking-[0.25em] text-neutral-500 uppercase\">\n Filtrar por evento\n </p>\n }\n\n @if (loadingData()) {\n @for (i of [1, 2, 3]; track $index) {\n <div\n class=\"h-15 border border-neutral-200 dark:border-gray-500/10 bg-neutral-100 dark:bg-gray-500/[0.03] rounded-xl animate-pulse w-full\"\n ></div>\n }\n }\n\n @for (show of shows(); track $index) {\n <div\n class=\"flex items-center justify-between border-gray-500/10 bg-gray-500/[0.02] rounded-xl border px-3 py-3 w-full\"\n [class.glow-red]=\"isActive(show.id)\"\n >\n <div class=\"flex items-center gap-3\">\n <span class=\"h-10 w-10 rounded-sm overflow-hidden\">\n @if (show.images.length > 0) {\n <img\n [src]=\"show.images[0].full_url\"\n class=\"object-contain object-center max-h-full max-w-full mx-auto\"\n />\n } @else {\n <span class=\"flex bg-gray-200 h-full w-full animate-pulse\"></span>\n }\n </span>\n\n <div>\n <div class=\"text-sm font-semibold text-gray-500\">{{ show.title }}</div>\n @if (show.performances_quantity && show.performances_quantity > 0) {\n <div class=\"text-[11px] text-neutral-500\">\n {{ show.performances_quantity }} funciones\n </div>\n }\n </div>\n </div>\n\n <div class=\"text-sm font-bold text-gray-500\">\n @if (isActive(show.id)) {\n <app-button\n variant=\"terciary\"\n icon=\"ri-close-line\"\n size=\"xs\"\n (clicked)=\"onFilter(show)\"\n />\n } @else {\n <app-button variant=\"primary\" text=\"Filtrar\" size=\"xs\" (clicked)=\"onFilter(show)\" />\n }\n </div>\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon"], outputs: ["clicked"] }, { kind: "ngmodule", type: CommonModule }] });
4820
+ }
4821
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowsFilterComponent, decorators: [{
4822
+ type: Component,
4823
+ args: [{ selector: 'shows-filter', standalone: true, imports: [AppButtonComponent, CommonModule], template: "<div class=\"flex flex-col gap-2 w-full\">\n @if (shows().length > 0) {\n <p class=\"text-[11px] font-semibold tracking-[0.25em] text-neutral-500 uppercase\">\n Filtrar por evento\n </p>\n }\n\n @if (loadingData()) {\n @for (i of [1, 2, 3]; track $index) {\n <div\n class=\"h-15 border border-neutral-200 dark:border-gray-500/10 bg-neutral-100 dark:bg-gray-500/[0.03] rounded-xl animate-pulse w-full\"\n ></div>\n }\n }\n\n @for (show of shows(); track $index) {\n <div\n class=\"flex items-center justify-between border-gray-500/10 bg-gray-500/[0.02] rounded-xl border px-3 py-3 w-full\"\n [class.glow-red]=\"isActive(show.id)\"\n >\n <div class=\"flex items-center gap-3\">\n <span class=\"h-10 w-10 rounded-sm overflow-hidden\">\n @if (show.images.length > 0) {\n <img\n [src]=\"show.images[0].full_url\"\n class=\"object-contain object-center max-h-full max-w-full mx-auto\"\n />\n } @else {\n <span class=\"flex bg-gray-200 h-full w-full animate-pulse\"></span>\n }\n </span>\n\n <div>\n <div class=\"text-sm font-semibold text-gray-500\">{{ show.title }}</div>\n @if (show.performances_quantity && show.performances_quantity > 0) {\n <div class=\"text-[11px] text-neutral-500\">\n {{ show.performances_quantity }} funciones\n </div>\n }\n </div>\n </div>\n\n <div class=\"text-sm font-bold text-gray-500\">\n @if (isActive(show.id)) {\n <app-button\n variant=\"terciary\"\n icon=\"ri-close-line\"\n size=\"xs\"\n (clicked)=\"onFilter(show)\"\n />\n } @else {\n <app-button variant=\"primary\" text=\"Filtrar\" size=\"xs\" (clicked)=\"onFilter(show)\" />\n }\n </div>\n </div>\n }\n</div>\n" }]
4824
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
4825
+ type: Inject,
4826
+ args: [PLATFORM_ID]
4827
+ }] }, { type: ShowService }, { type: PerformancesListEventsService }, { type: ToastService }, { type: i3.Router }] });
4828
+
4829
+ class ZonePriceItemComponent {
4830
+ zone;
4831
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ZonePriceItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4832
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: ZonePriceItemComponent, isStandalone: true, selector: "zone-price-item", inputs: { zone: "zone" }, ngImport: i0, template: "<div class=\"flex items-center justify-between rounded-xl border border-white/10 bg-white/[0.02] px-4 py-3\">\n <div class=\"flex items-center gap-3\">\n <span class=\"h-3 w-3 rounded-sm {{ zone.colorClass }}\"></span>\n <div>\n <div class=\"text-sm font-semibold text-white\">{{ zone.name }}</div>\n <div class=\"text-[11px] text-neutral-500\">{{ zone.seatsAvailable }} sillas disponibles</div>\n </div>\n </div>\n <div class=\"text-sm font-bold text-white\">{{ zone.price }}</div>\n</div>\n", styles: [""] });
4833
+ }
4834
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ZonePriceItemComponent, decorators: [{
4835
+ type: Component,
4836
+ args: [{ selector: 'zone-price-item', standalone: true, template: "<div class=\"flex items-center justify-between rounded-xl border border-white/10 bg-white/[0.02] px-4 py-3\">\n <div class=\"flex items-center gap-3\">\n <span class=\"h-3 w-3 rounded-sm {{ zone.colorClass }}\"></span>\n <div>\n <div class=\"text-sm font-semibold text-white\">{{ zone.name }}</div>\n <div class=\"text-[11px] text-neutral-500\">{{ zone.seatsAvailable }} sillas disponibles</div>\n </div>\n </div>\n <div class=\"text-sm font-bold text-white\">{{ zone.price }}</div>\n</div>\n" }]
4837
+ }], propDecorators: { zone: [{
4838
+ type: Input,
4839
+ args: [{ required: true }]
4840
+ }] } });
4841
+
4842
+ class ZonePriceListComponent {
4843
+ zones;
4844
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ZonePriceListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4845
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ZonePriceListComponent, isStandalone: true, selector: "zone-price-list", inputs: { zones: "zones" }, ngImport: i0, template: "<p class=\"text-[11px] font-semibold tracking-[0.25em] text-neutral-400\">ZONAS Y PRECIOS</p>\n\n<div class=\"mt-4 flex flex-col gap-2 w-full\">\n @for (zone of zones; track $index) {\n <zone-price-item [zone]=\"zone\" />\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ZonePriceItemComponent, selector: "zone-price-item", inputs: ["zone"] }] });
4846
+ }
4847
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ZonePriceListComponent, decorators: [{
4848
+ type: Component,
4849
+ args: [{ selector: 'zone-price-list', standalone: true, imports: [ZonePriceItemComponent], template: "<p class=\"text-[11px] font-semibold tracking-[0.25em] text-neutral-400\">ZONAS Y PRECIOS</p>\n\n<div class=\"mt-4 flex flex-col gap-2 w-full\">\n @for (zone of zones; track $index) {\n <zone-price-item [zone]=\"zone\" />\n }\n</div>\n" }]
4850
+ }], propDecorators: { zones: [{
4851
+ type: Input,
4852
+ args: [{ required: true }]
4853
+ }] } });
4854
+
4579
4855
  // Config
4580
4856
 
4581
4857
  /**
4582
4858
  * Generated bundle index. Do not edit.
4583
4859
  */
4584
4860
 
4585
- export { ADMIN_API_ROUTES, ALERT_BASE_CLASSES, ALERT_COLOR_CLASSES, ALERT_ICONS, ALERT_SIZE_CLASSES, AdminSelectComponent, AdminService, ApiService, AppAlertComponent, AppButtonComponent, AppLinkButtonComponent, AppModalComponent, AsyncSelectComponent, AuditInformationComponent, BASE_BUTTON_CLASSES, BASE_INPUT_CLASSES, BUTTON_SIZES_CLASSES, BUTTON_VARIANT_CLASSES, CITY_API_ENDPOINTS, COUNTRY_API_ENDPOINTS, CUSTOMERS_API_ROUTES, ChangePasswordFormComponent, ChangePasswordFormService, CitiesService, CitySelectComponent, ColorPickerComponent, CorporateBondStatus, CountrySelectComponent, CountryService, CouponApplicability, CouponDiscountType, CustomerSelectComponent, CustomerService, DateInputComponent, DateService, DeleteConfirmationComponent, DeleteConfirmationService, DynamicTableComponent, ERROR_INPUT_CLASSES, EndDateGreaterThanStartValidator, FORM_ERROR_MESSAGES, FileType, FileUploadComponent, FileUploadPreviewComponent, FormEditorComponent, FormInputComponent, FormSelectComponent, FormTextareaComponent, LanguageSwitcherComponent, LoadingModalService, LoadingmModalComponent, MinTodayValidator, MustMatchValidator, OrderItemType, OrderStatus, PERFORMANCES_API_ROUTES, PRICE_ZONES_API_ROUTES, PRODUCTS_API_ROUTES, PerformanceMultiSelectComponent, PerformanceSelectComponent, PerformanceService, PerformanceStatus, PerformanceTicketStatus, PerformancesListEventsService, PriceZoneEventService, PriceZoneFormModalService, PriceZoneSelectComponent, PriceZoneService, ProductMultiSelectComponent, ProductSelectComponent, ProductService, RoomMapElementOrientation, RoomMapElementType, SHOWS_API_ROUTES, STATE_API_ENDPOINTS, ShowMultiSelectComponent, ShowSelectComponent, ShowService, StateSelectComponent, StatesService, TICKERA_COMPONENTS_CONFIG, ToastService, ToggleSwitchComponent, VENUES_API_ROUTES, authInterceptor, formatCitiesResponseToSelect, getCustomerFullname, parseJsonToFormDataAdvanced, provideTickeraComponents, transformImageToFile };
4861
+ export { ADMIN_API_ROUTES, ALERT_BASE_CLASSES, ALERT_COLOR_CLASSES, ALERT_ICONS, ALERT_SIZE_CLASSES, AdminSelectComponent, AdminService, ApiService, AppAlertComponent, AppButtonComponent, AppLinkButtonComponent, AppModalComponent, AsyncSelectComponent, AuditInformationComponent, BASE_BUTTON_CLASSES, BASE_INPUT_CLASSES, BUTTON_SIZES_CLASSES, BUTTON_VARIANT_CLASSES, CITY_API_ENDPOINTS, COUNTRY_API_ENDPOINTS, CUSTOMERS_API_ROUTES, ChangePasswordFormComponent, ChangePasswordFormService, CitiesService, CitySelectComponent, ColorPickerComponent, CorporateBondStatus, CountrySelectComponent, CountryService, CouponApplicability, CouponDiscountType, CustomerSelectComponent, CustomerService, DateInputComponent, DateService, DaySelectorGridComponent, DeleteConfirmationComponent, DeleteConfirmationService, DynamicTableComponent, ERROR_INPUT_CLASSES, EndDateGreaterThanStartValidator, FORM_ERROR_MESSAGES, FileType, FileUploadComponent, FileUploadPreviewComponent, FormEditorComponent, FormInputComponent, FormSelectComponent, FormTextareaComponent, LanguageSwitcherComponent, LoadingModalService, LoadingmModalComponent, MinTodayValidator, MustMatchValidator, OrderItemType, OrderStatus, PERFORMANCES_API_ROUTES, PRICE_ZONES_API_ROUTES, PRODUCTS_API_ROUTES, PerformanceCardComponent, PerformanceCardListComponent, PerformanceMultiSelectComponent, PerformanceSelectComponent, PerformanceService, PerformanceStatus, PerformanceStepperComponent, PerformanceTicketStatus, PerformancesListEventsService, PriceZoneEventService, PriceZoneFormModalService, PriceZoneSelectComponent, PriceZoneService, ProductMultiSelectComponent, ProductSelectComponent, ProductService, RoomMapElementOrientation, RoomMapElementType, SHOWS_API_ROUTES, STATE_API_ENDPOINTS, ShowMultiSelectComponent, ShowSelectComponent, ShowService, ShowsFilterComponent, StateSelectComponent, StatesService, TICKERA_COMPONENTS_CONFIG, ToastService, ToggleSwitchComponent, VENUES_API_ROUTES, ZonePriceItemComponent, ZonePriceListComponent, authInterceptor, formatCitiesResponseToSelect, getCustomerFullname, parseJsonToFormDataAdvanced, provideTickeraComponents, transformImageToFile };
4586
4862
  //# sourceMappingURL=tickera-angular-components.mjs.map