tickera-angular-components 0.0.1-dev.190 → 0.0.1-dev.192

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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, makeEnvironmentProviders, PLATFORM_ID, Inject, Injectable, signal, LOCALE_ID, computed, inject, EventEmitter, Input, Output, Component, ViewEncapsulation, HostListener, Self, Optional, Injector, forwardRef, effect, untracked, ViewChild } from '@angular/core';
2
+ import { InjectionToken, makeEnvironmentProviders, PLATFORM_ID, Inject, Injectable, signal, LOCALE_ID, computed, inject, EventEmitter, Input, Output, Component, ViewEncapsulation, HostListener, Self, Optional, Injector, forwardRef, effect, untracked, ViewChild, viewChildren } from '@angular/core';
3
3
  import * as i1$3 from '@jsverse/transloco';
4
4
  import { provideTransloco, TranslocoModule, TranslocoService } from '@jsverse/transloco';
5
5
  import { from, throwError, BehaviorSubject, Subject, of, Observable, takeUntil as takeUntil$1 } from 'rxjs';
@@ -21,7 +21,7 @@ import { FormsModule, ReactiveFormsModule, Validators, NgControl, NG_VALUE_ACCES
21
21
  import * as i3 from '@ng-select/ng-select';
22
22
  import { NgSelectModule } from '@ng-select/ng-select';
23
23
  import { DEFAULT_TOOLBAR, Editor, toHTML, NgxEditorComponent, NgxEditorMenuComponent } from 'ngx-editor';
24
- import { StageComponent, CoreShapeComponent } from 'ng2-konva';
24
+ import { CoreShapeComponent, StageComponent } from 'ng2-konva';
25
25
  import QRCode from 'qrcode';
26
26
 
27
27
  var formErrors$1 = {
@@ -1174,6 +1174,11 @@ const TICKET_STATUS_LABELS = {
1174
1174
  };
1175
1175
  const TICKET_MAP_GRID_SIZE = 30;
1176
1176
  const TICKET_MAP_TITLE_HEIGHT = 30;
1177
+ // Hover por piso: al pasar el mouse sobre un elemento de un piso, los demás
1178
+ // pisos visibles se atenúan y el piso activo pasa al frente (ver
1179
+ // PerformanceBookingDataService.floorZOrder y PerformanceTicketMapComponent).
1180
+ const TICKET_MAP_FLOOR_HOVER_OPACITY = 0.25;
1181
+ const TICKET_MAP_FLOOR_HOVER_FADE_MS = 150;
1177
1182
 
1178
1183
  function drawRoundedRect(con, shape, x, y, width, height, cornerRadius) {
1179
1184
  con.beginPath();
@@ -2318,31 +2323,6 @@ const KONVA_SHAPE_MAPPINGS = {
2318
2323
  },
2319
2324
  };
2320
2325
 
2321
- const SHOW_TYPE_COLORS = {
2322
- PLAY: { bg: '#f5f3ff', text: '#5b21b6' }, // violet-50 / violet-800
2323
- MUSICAL: { bg: '#fef9c3', text: '#a16207' }, // yellow-100 / yellow-700
2324
- CONCERT: { bg: '#dbeafe', text: '#1e40af' }, // blue-100 / blue-800
2325
- DANCE: { bg: '#d1fae5', text: '#065f46' }, // emerald-100 / emerald-800
2326
- OPERA: { bg: '#fee2e2', text: '#991b1b' }, // red-100 / red-800
2327
- STAND_UP_COMEDY: { bg: '#fef3c7', text: '#92400e' }, // amber-100 / amber-800
2328
- SPORT: { bg: '#cbfec3', text: '#07a19c' }, // yellow-100 / yellow-700
2329
- OTHER: { bg: '#f5f5f5', text: '#262626' }, // neutral-100 / neutral-800
2330
- DEFAULT: { bg: '#f3f4f6', text: '#374151' }, // gray-100 / gray-700
2331
- };
2332
-
2333
- var ShowType;
2334
- (function (ShowType) {
2335
- ShowType["PLAY"] = "PLAY";
2336
- ShowType["CONCERT"] = "CONCERT";
2337
- ShowType["STAND_UP_COMEDY"] = "STAND_UP_COMEDY";
2338
- ShowType["OPERA"] = "OPERA";
2339
- ShowType["MUSICAL"] = "MUSICAL";
2340
- ShowType["DANCE"] = "DANCE";
2341
- ShowType["SPORT"] = "SPORT";
2342
- ShowType["OTHER"] = "OTHER";
2343
- ShowType["DEFAULT"] = "DEFAULT";
2344
- })(ShowType || (ShowType = {}));
2345
-
2346
2326
  var SelectedDiscountCardType;
2347
2327
  (function (SelectedDiscountCardType) {
2348
2328
  SelectedDiscountCardType["COUPON"] = "COUPON";
@@ -3620,6 +3600,7 @@ class PerformanceBookingDataService {
3620
3600
  _selectedHallFloor = signal(null, ...(ngDevMode ? [{ debugName: "_selectedHallFloor" }] : []));
3621
3601
  _allRenderData = signal([], ...(ngDevMode ? [{ debugName: "_allRenderData" }] : []));
3622
3602
  _visibleFloorIds = signal(new Set(), ...(ngDevMode ? [{ debugName: "_visibleFloorIds" }] : []));
3603
+ _hoveredFloorId = signal(null, ...(ngDevMode ? [{ debugName: "_hoveredFloorId" }] : []));
3623
3604
  _stageConfig = signal(DEFAULT_STAGE_CONFIG, ...(ngDevMode ? [{ debugName: "_stageConfig" }] : []));
3624
3605
  // Snapshot de tickets tal como llegó del último `setPerformanceBookingData`,
3625
3606
  // más los parches aplicados por `applySeatStatusUpdates` (SSE). Se guarda
@@ -3633,17 +3614,44 @@ class PerformanceBookingDataService {
3633
3614
  stageConfig = computed(() => this._stageConfig(), ...(ngDevMode ? [{ debugName: "stageConfig" }] : []));
3634
3615
  roomMap = computed(() => this._roomMap(), ...(ngDevMode ? [{ debugName: "roomMap" }] : []));
3635
3616
  visibleFloorIds = computed(() => this._visibleFloorIds(), ...(ngDevMode ? [{ debugName: "visibleFloorIds" }] : []));
3617
+ hoveredFloorId = computed(() => this._hoveredFloorId(), ...(ngDevMode ? [{ debugName: "hoveredFloorId" }] : []));
3636
3618
  availableFloors = computed(() => {
3637
3619
  const allData = this._allRenderData();
3638
3620
  const floors = this._hallFloors();
3639
3621
  const floorIdsWithElements = new Set(allData.map((el) => el.hallFloorId).filter(Boolean));
3640
3622
  return floors.filter((f) => floorIdsWithElements.has(f.id));
3641
3623
  }, ...(ngDevMode ? [{ debugName: "availableFloors" }] : []));
3624
+ // Orden de los pisos visibles de "atrás hacia adelante": el orden natural
3625
+ // es el mismo que usa el selector de pisos (availableFloors), y el piso
3626
+ // que está en hover siempre se manda al final (= arriba del todo).
3627
+ floorZOrder = computed(() => {
3628
+ const visible = this._visibleFloorIds();
3629
+ const order = this.availableFloors()
3630
+ .map((floor) => floor.id)
3631
+ .filter((id) => visible.has(id));
3632
+ const hovered = this._hoveredFloorId();
3633
+ if (hovered != null && visible.has(hovered)) {
3634
+ const withoutHovered = order.filter((id) => id !== hovered);
3635
+ withoutHovered.push(hovered);
3636
+ return withoutHovered;
3637
+ }
3638
+ return order;
3639
+ }, ...(ngDevMode ? [{ debugName: "floorZOrder" }] : []));
3640
+ // Agrupado por piso según floorZOrder, para que tanto el hit-test
3641
+ // (findElementAtPosition, que asume "último = más arriba") como el
3642
+ // render por capas (una <ko-layer> por piso) usen el mismo z-order.
3642
3643
  renderData = computed(() => {
3643
3644
  const visible = this._visibleFloorIds();
3644
- return this._allRenderData()?.filter(({ hallFloorId }) => {
3645
- return hallFloorId != null && visible.has(hallFloorId);
3646
- });
3645
+ const order = this.floorZOrder();
3646
+ const byFloor = new Map();
3647
+ for (const el of this._allRenderData()) {
3648
+ if (el.hallFloorId == null || !visible.has(el.hallFloorId))
3649
+ continue;
3650
+ const arr = byFloor.get(el.hallFloorId) ?? [];
3651
+ arr.push(el);
3652
+ byFloor.set(el.hallFloorId, arr);
3653
+ }
3654
+ return order.flatMap((floorId) => byFloor.get(floorId) ?? []);
3647
3655
  }, ...(ngDevMode ? [{ debugName: "renderData" }] : []));
3648
3656
  setPerformanceBookingData({ data }) {
3649
3657
  this._performance.set(data.performance);
@@ -3718,6 +3726,11 @@ class PerformanceBookingDataService {
3718
3726
  const hallFloor = this._hallFloors().find((hallFloor) => hallFloor.id === id);
3719
3727
  this._selectedHallFloor.set(hallFloor ?? null);
3720
3728
  }
3729
+ setHoveredFloor(floorId) {
3730
+ if (this._hoveredFloorId() === floorId)
3731
+ return;
3732
+ this._hoveredFloorId.set(floorId);
3733
+ }
3721
3734
  toggleFloorVisibility(floorId) {
3722
3735
  const current = new Set(this._visibleFloorIds());
3723
3736
  if (current.has(floorId)) {
@@ -5781,15 +5794,12 @@ class ShowTypeBadgeComponent {
5781
5794
  show;
5782
5795
  size = 'xs';
5783
5796
  transloco = inject(TranslocoService);
5784
- get showTypeColor() {
5785
- return this.show.show_type ? SHOW_TYPE_COLORS[this.show.show_type] : SHOW_TYPE_COLORS['DEFAULT'];
5786
- }
5787
5797
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowTypeBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5788
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: ShowTypeBadgeComponent, isStandalone: true, selector: "show-type-badge", inputs: { show: "show", size: "size" }, ngImport: i0, template: "<app-badge\n [text]=\"`show.showTypes.${show.show_type}` | transloco\"\n [backgroundColor]=\"this.showTypeColor.bg\"\n [textColor]=\"this.showTypeColor.text\"\n size=\"xs\"\n class=\"show-card__badge\"\n/>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }] });
5798
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ShowTypeBadgeComponent, isStandalone: true, selector: "show-type-badge", inputs: { show: "show", size: "size" }, ngImport: i0, template: "@if (show.show_type; as showType) {\n <app-badge [text]=\"showType.name\" size=\"xs\" class=\"show-card__badge\" />\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "ngmodule", type: TranslocoModule }] });
5789
5799
  }
5790
5800
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowTypeBadgeComponent, decorators: [{
5791
5801
  type: Component,
5792
- args: [{ selector: 'show-type-badge', standalone: true, imports: [CommonModule, AppBadgeComponent, TranslocoModule], template: "<app-badge\n [text]=\"`show.showTypes.${show.show_type}` | transloco\"\n [backgroundColor]=\"this.showTypeColor.bg\"\n [textColor]=\"this.showTypeColor.text\"\n size=\"xs\"\n class=\"show-card__badge\"\n/>\n" }]
5802
+ args: [{ selector: 'show-type-badge', standalone: true, imports: [CommonModule, AppBadgeComponent, TranslocoModule], template: "@if (show.show_type; as showType) {\n <app-badge [text]=\"showType.name\" size=\"xs\" class=\"show-card__badge\" />\n}\n" }]
5793
5803
  }], propDecorators: { show: [{
5794
5804
  type: Input,
5795
5805
  args: [{ required: true }]
@@ -5804,9 +5814,6 @@ class ShowCardComponent {
5804
5814
  linkQueryParams;
5805
5815
  transloco = inject(TranslocoService);
5806
5816
  dateService = inject(DateService);
5807
- get showTypeColor() {
5808
- return this.show.show_type ? SHOW_TYPE_COLORS[this.show.show_type] : SHOW_TYPE_COLORS['DEFAULT'];
5809
- }
5810
5817
  formatTimeDate(date) {
5811
5818
  return new Date(date);
5812
5819
  }
@@ -9808,6 +9815,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
9808
9815
  args: [{ selector: 'ticket-map-floor-selector', standalone: true, imports: [CommonModule], template: "@if (availableFloors().length > 1) {\n <div class=\"ticket-map-floor-selector\">\n @for (floor of availableFloors(); track floor.id) {\n <button\n class=\"floor-button\"\n [class.floor-button-active]=\"isFloorVisible(floor.id)\"\n [class.floor-button-locked]=\"isFloorVisible(floor.id) && !canToggleOff(floor.id)\"\n [disabled]=\"isFloorVisible(floor.id) && !canToggleOff(floor.id)\"\n (click)=\"toggleFloor(floor.id)\"\n [title]=\"floor.name\"\n >\n {{ floor.name }}\n </button>\n }\n </div>\n}\n", styles: [".ticket-map-floor-selector{display:flex;flex-direction:row;align-items:center;gap:.25rem;font-size:.75rem}.ticket-map-floor-selector .floor-button{align-items:center;background-color:#f3f4f6;border:1px solid #e5e7eb;border-radius:.375rem;color:#4b5563;cursor:pointer;display:flex;font-size:.75rem;font-weight:500;height:2rem;justify-content:center;padding-left:.75rem;padding-right:.75rem;transition:all .2s;white-space:nowrap}.ticket-map-floor-selector .floor-button:hover{background-color:#e5e7eb;color:#1f2937}.ticket-map-floor-selector .floor-button.floor-button-active{background-color:#4f46e5;border-color:#4f46e5;color:#fff}.ticket-map-floor-selector .floor-button.floor-button-active:hover{background-color:#4338ca}.ticket-map-floor-selector .floor-button.floor-button-active.floor-button-locked{opacity:.7;cursor:not-allowed}.ticket-map-floor-selector .floor-button.floor-button-active.floor-button-locked:hover{background-color:#4f46e5}\n"] }]
9809
9816
  }], ctorParameters: () => [{ type: PerformanceBookingDataService }] });
9810
9817
 
9818
+ const FLOOR_LAYER_NAME_PREFIX = 'ticket-map-floor-layer-';
9811
9819
  class PerformanceTicketMapComponent {
9812
9820
  platformId;
9813
9821
  bookingDataService;
@@ -9850,6 +9858,29 @@ class PerformanceTicketMapComponent {
9850
9858
  stageReady = signal(false, ...(ngDevMode ? [{ debugName: "stageReady" }] : []));
9851
9859
  autoFitDone = false;
9852
9860
  resizeObserver;
9861
+ // Una <ko-layer #floorLayer> por piso (ver template). No asumimos que su
9862
+ // orden coincida con floorGroups(); cada capa se identifica por su `name`
9863
+ // de Konva (ver FLOOR_LAYER_NAME_PREFIX).
9864
+ floorLayerRefs = viewChildren('floorLayer', ...(ngDevMode ? [{ debugName: "floorLayerRefs", read: CoreShapeComponent }] : [{ read: CoreShapeComponent }]));
9865
+ floorLayerName(floorId) {
9866
+ return `${FLOOR_LAYER_NAME_PREFIX}${floorId}`;
9867
+ }
9868
+ floorGroups = computed(() => {
9869
+ const order = this.bookingDataService.floorZOrder();
9870
+ const elements = this.renderData();
9871
+ const byFloor = new Map();
9872
+ for (const el of elements) {
9873
+ if (el.hallFloorId == null)
9874
+ continue;
9875
+ const arr = byFloor.get(el.hallFloorId) ?? [];
9876
+ arr.push(el);
9877
+ byFloor.set(el.hallFloorId, arr);
9878
+ }
9879
+ return order.map((floorId) => ({
9880
+ floorId,
9881
+ elements: byFloor.get(floorId) ?? [],
9882
+ }));
9883
+ }, ...(ngDevMode ? [{ debugName: "floorGroups" }] : []));
9853
9884
  constructor(platformId, bookingDataService, feedbackModalService, selectionService, zoomService) {
9854
9885
  this.platformId = platformId;
9855
9886
  this.bookingDataService = bookingDataService;
@@ -9864,6 +9895,47 @@ class PerformanceTicketMapComponent {
9864
9895
  this.zoomService.fitToContainer();
9865
9896
  }
9866
9897
  });
9898
+ // Trae al frente y atenúa/resalta cada capa (piso) según el hover.
9899
+ // Todo esto se hace de forma 100% imperativa sobre el nodo Konva real
9900
+ // (moveToTop + .to() para el fade), en vez de reordenar el @for y
9901
+ // esperar a que el MutationObserver de ng2-konva sincronice el zIndex:
9902
+ // ese camino depende de que Angular vuelva a renderizar la plantilla.
9903
+ // Así el cambio es instantáneo pase lo que pase con el ciclo de detección
9904
+ // de cambios.
9905
+ effect(() => {
9906
+ const hoveredFloorId = this.bookingDataService.hoveredFloorId();
9907
+ const order = this.bookingDataService.floorZOrder();
9908
+ const layerRefs = this.floorLayerRefs();
9909
+ const layerNodeByFloorId = new Map();
9910
+ for (const layerComponent of layerRefs) {
9911
+ const layerNode = layerComponent.getStage();
9912
+ const name = layerNode?.name?.() ?? '';
9913
+ if (!name.startsWith(FLOOR_LAYER_NAME_PREFIX))
9914
+ continue;
9915
+ const floorId = Number(name.slice(FLOOR_LAYER_NAME_PREFIX.length));
9916
+ if (Number.isFinite(floorId)) {
9917
+ layerNodeByFloorId.set(floorId, layerNode);
9918
+ }
9919
+ }
9920
+ let needsRedraw = false;
9921
+ for (const floorId of order) {
9922
+ const layerNode = layerNodeByFloorId.get(floorId);
9923
+ if (!layerNode)
9924
+ continue;
9925
+ layerNode.moveToTop();
9926
+ needsRedraw = true;
9927
+ const targetOpacity = hoveredFloorId == null || hoveredFloorId === floorId ? 1 : TICKET_MAP_FLOOR_HOVER_OPACITY;
9928
+ if (layerNode.opacity() !== targetOpacity) {
9929
+ layerNode.to({
9930
+ opacity: targetOpacity,
9931
+ duration: TICKET_MAP_FLOOR_HOVER_FADE_MS / 1000,
9932
+ });
9933
+ }
9934
+ }
9935
+ if (needsRedraw) {
9936
+ this.stageComponent?.getStage()?.batchDraw();
9937
+ }
9938
+ });
9867
9939
  }
9868
9940
  get isBrowser() {
9869
9941
  return isPlatformBrowser(this.platformId);
@@ -9970,6 +10042,7 @@ class PerformanceTicketMapComponent {
9970
10042
  return;
9971
10043
  const internalPos = this.getInternalPointer(stage);
9972
10044
  const hit = findElementAtPosition(this.bookingDataService.renderData(), internalPos.x, internalPos.y);
10045
+ this.bookingDataService.setHoveredFloor(hit?.element.hallFloorId ?? null);
9973
10046
  if (!hit) {
9974
10047
  this.tooltipData.set(null);
9975
10048
  return;
@@ -9996,6 +10069,7 @@ class PerformanceTicketMapComponent {
9996
10069
  }
9997
10070
  handleStageMouseLeave() {
9998
10071
  this.tooltipData.set(null);
10072
+ this.bookingDataService.setHoveredFloor(null);
9999
10073
  }
10000
10074
  handleWheel(konvaEvent) {
10001
10075
  const nativeEvent = konvaEvent.event?.evt;
@@ -10011,11 +10085,11 @@ class PerformanceTicketMapComponent {
10011
10085
  return floor;
10012
10086
  }
10013
10087
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceTicketMapComponent, deps: [{ token: PLATFORM_ID }, { token: PerformanceBookingDataService }, { token: FeedbackModalService }, { token: TicketSelectionService }, { token: TicketMapZoomService }], target: i0.ɵɵFactoryTarget.Component });
10014
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: PerformanceTicketMapComponent, isStandalone: true, selector: "performance-ticket-map", inputs: { readOnly: "readOnly", needsLogin: "needsLogin", isLoggedIn: "isLoggedIn" }, outputs: { selectionChange: "selectionChange", needsLoginError: "needsLoginError" }, viewQueries: [{ propertyName: "stageComponent", first: true, predicate: StageComponent, descendants: true }], ngImport: i0, template: "<div class=\"ticket-map-canvas-container\">\n @if (isBrowser) {\n <ko-stage\n [config]=\"bookingDataService.stageConfig()\"\n (click)=\"handleStageClick($event)\"\n (mousemove)=\"handleStageMouseMove($event)\"\n (mouseleave)=\"handleStageMouseLeave()\"\n (wheel)=\"handleWheel($event)\"\n >\n <ko-layer>\n @for (element of renderData(); track trackByElementId($index, element)) {\n <ko-shape [config]=\"element.shapeConfig\" />\n }\n </ko-layer>\n </ko-stage>\n\n @if (tooltipData(); as tooltip) {\n <div class=\"ticket-tooltip\" [style.left.px]=\"tooltip.x\" [style.top.px]=\"tooltip.y\">\n <div class=\"tooltip-header\">{{ tooltip.elementName }}</div>\n @if (tooltip.seatLabel) {\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Asiento:</span>\n <span class=\"tooltip-value\">{{ tooltip.seatLabel }}</span>\n </div>\n }\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Precio:</span>\n <span class=\"tooltip-value\">${{ tooltip.price | number: '1.0-0' }}</span>\n </div>\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Estado:</span>\n <span class=\"tooltip-status\">\n <span class=\"status-dot\" [style.background]=\"tooltip.statusColor\"></span>\n {{ tooltip.statusLabel }}\n </span>\n </div>\n @if (tooltip.isSelected) {\n <div class=\"tooltip-selected-badge\">Seleccionado</div>\n }\n </div>\n }\n }\n</div>\n", styles: [".ticket-map-canvas-container{min-height:500px;overflow:hidden;position:relative;touch-action:pan-x pan-y;width:100%}.ticket-tooltip{position:absolute;z-index:100;background:#1f2937;color:#f9fafb;border-radius:8px;padding:10px 14px;font-size:12px;line-height:1.5;pointer-events:none;min-width:160px;box-shadow:0 4px 12px #00000040}.tooltip-header{font-weight:600;font-size:13px;margin-bottom:6px;padding-bottom:6px;border-bottom:1px solid #374151}.tooltip-row{display:flex;justify-content:space-between;gap:12px}.tooltip-label{color:#9ca3af}.tooltip-value{color:#f9fafb;font-weight:500}.tooltip-status{display:flex;align-items:center;gap:6px;color:#f9fafb;font-weight:500}.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%}.tooltip-selected-badge{margin-top:6px;padding-top:6px;border-top:1px solid #374151;color:#34d399;font-weight:500;font-size:11px}.zoom-controls{position:absolute;bottom:16px;right:16px;display:flex;align-items:center;gap:8px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:4px 8px;box-shadow:0 1px 3px #0000001a}.zoom-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid #d1d5db;background:#f9fafb;border-radius:6px;cursor:pointer;font-size:16px;font-weight:600;color:#374151;line-height:1}.zoom-btn:hover{background:#e5e7eb}.zoom-level{font-size:12px;color:#6b7280;min-width:40px;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: StageComponent, selector: "ko-stage", inputs: ["config"], outputs: ["mouseover", "mousemove", "mouseout", "mouseenter", "mouseleave", "mousedown", "mouseup", "wheel", "contextmenu", "click", "dblclick", "touchstart", "touchmove", "touchend", "tap", "dbltap", "dragstart", "dragmove", "dragend", "transformstart", "transform", "transformend"] }, { kind: "component", type: CoreShapeComponent, selector: "ko-shape, ko-layer, ko-circle, ko-fastlayer, ko-group, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer", inputs: ["config"], outputs: ["configChange", "mouseover", "mousemove", "mouseout", "mouseenter", "mouseleave", "mousedown", "mouseup", "wheel", "contextmenu", "click", "dblclick", "touchstart", "touchmove", "touchend", "tap", "dbltap", "dragstart", "dragmove", "dragend", "transformstart", "transform", "transformend"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }] });
10088
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: PerformanceTicketMapComponent, isStandalone: true, selector: "performance-ticket-map", inputs: { readOnly: "readOnly", needsLogin: "needsLogin", isLoggedIn: "isLoggedIn" }, outputs: { selectionChange: "selectionChange", needsLoginError: "needsLoginError" }, viewQueries: [{ propertyName: "floorLayerRefs", predicate: ["floorLayer"], descendants: true, read: CoreShapeComponent, isSignal: true }, { propertyName: "stageComponent", first: true, predicate: StageComponent, descendants: true }], ngImport: i0, template: "<div class=\"ticket-map-canvas-container\">\n @if (isBrowser) {\n <ko-stage\n [config]=\"bookingDataService.stageConfig()\"\n (click)=\"handleStageClick($event)\"\n (mousemove)=\"handleStageMouseMove($event)\"\n (mouseleave)=\"handleStageMouseLeave()\"\n (wheel)=\"handleWheel($event)\"\n >\n @for (group of floorGroups(); track group.floorId) {\n <ko-layer #floorLayer [config]=\"{ name: floorLayerName(group.floorId) }\">\n @for (element of group.elements; track trackByElementId($index, element)) {\n <ko-shape [config]=\"element.shapeConfig\" />\n }\n </ko-layer>\n }\n </ko-stage>\n\n @if (tooltipData(); as tooltip) {\n <div class=\"ticket-tooltip\" [style.left.px]=\"tooltip.x\" [style.top.px]=\"tooltip.y\">\n <div class=\"tooltip-header\">{{ tooltip.elementName }}</div>\n @if (tooltip.seatLabel) {\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Asiento:</span>\n <span class=\"tooltip-value\">{{ tooltip.seatLabel }}</span>\n </div>\n }\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Precio:</span>\n <span class=\"tooltip-value\">${{ tooltip.price | number: '1.0-0' }}</span>\n </div>\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Estado:</span>\n <span class=\"tooltip-status\">\n <span class=\"status-dot\" [style.background]=\"tooltip.statusColor\"></span>\n {{ tooltip.statusLabel }}\n </span>\n </div>\n @if (tooltip.isSelected) {\n <div class=\"tooltip-selected-badge\">Seleccionado</div>\n }\n </div>\n }\n }\n</div>\n", styles: [".ticket-map-canvas-container{min-height:500px;overflow:hidden;position:relative;touch-action:pan-x pan-y;width:100%}.ticket-tooltip{position:absolute;z-index:100;background:#1f2937;color:#f9fafb;border-radius:8px;padding:10px 14px;font-size:12px;line-height:1.5;pointer-events:none;min-width:160px;box-shadow:0 4px 12px #00000040}.tooltip-header{font-weight:600;font-size:13px;margin-bottom:6px;padding-bottom:6px;border-bottom:1px solid #374151}.tooltip-row{display:flex;justify-content:space-between;gap:12px}.tooltip-label{color:#9ca3af}.tooltip-value{color:#f9fafb;font-weight:500}.tooltip-status{display:flex;align-items:center;gap:6px;color:#f9fafb;font-weight:500}.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%}.tooltip-selected-badge{margin-top:6px;padding-top:6px;border-top:1px solid #374151;color:#34d399;font-weight:500;font-size:11px}.zoom-controls{position:absolute;bottom:16px;right:16px;display:flex;align-items:center;gap:8px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:4px 8px;box-shadow:0 1px 3px #0000001a}.zoom-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid #d1d5db;background:#f9fafb;border-radius:6px;cursor:pointer;font-size:16px;font-weight:600;color:#374151;line-height:1}.zoom-btn:hover{background:#e5e7eb}.zoom-level{font-size:12px;color:#6b7280;min-width:40px;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: StageComponent, selector: "ko-stage", inputs: ["config"], outputs: ["mouseover", "mousemove", "mouseout", "mouseenter", "mouseleave", "mousedown", "mouseup", "wheel", "contextmenu", "click", "dblclick", "touchstart", "touchmove", "touchend", "tap", "dbltap", "dragstart", "dragmove", "dragend", "transformstart", "transform", "transformend"] }, { kind: "component", type: CoreShapeComponent, selector: "ko-shape, ko-layer, ko-circle, ko-fastlayer, ko-group, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer", inputs: ["config"], outputs: ["configChange", "mouseover", "mousemove", "mouseout", "mouseenter", "mouseleave", "mousedown", "mouseup", "wheel", "contextmenu", "click", "dblclick", "touchstart", "touchmove", "touchend", "tap", "dbltap", "dragstart", "dragmove", "dragend", "transformstart", "transform", "transformend"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }] });
10015
10089
  }
10016
10090
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceTicketMapComponent, decorators: [{
10017
10091
  type: Component,
10018
- args: [{ selector: 'performance-ticket-map', standalone: true, imports: [CommonModule, StageComponent, CoreShapeComponent], template: "<div class=\"ticket-map-canvas-container\">\n @if (isBrowser) {\n <ko-stage\n [config]=\"bookingDataService.stageConfig()\"\n (click)=\"handleStageClick($event)\"\n (mousemove)=\"handleStageMouseMove($event)\"\n (mouseleave)=\"handleStageMouseLeave()\"\n (wheel)=\"handleWheel($event)\"\n >\n <ko-layer>\n @for (element of renderData(); track trackByElementId($index, element)) {\n <ko-shape [config]=\"element.shapeConfig\" />\n }\n </ko-layer>\n </ko-stage>\n\n @if (tooltipData(); as tooltip) {\n <div class=\"ticket-tooltip\" [style.left.px]=\"tooltip.x\" [style.top.px]=\"tooltip.y\">\n <div class=\"tooltip-header\">{{ tooltip.elementName }}</div>\n @if (tooltip.seatLabel) {\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Asiento:</span>\n <span class=\"tooltip-value\">{{ tooltip.seatLabel }}</span>\n </div>\n }\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Precio:</span>\n <span class=\"tooltip-value\">${{ tooltip.price | number: '1.0-0' }}</span>\n </div>\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Estado:</span>\n <span class=\"tooltip-status\">\n <span class=\"status-dot\" [style.background]=\"tooltip.statusColor\"></span>\n {{ tooltip.statusLabel }}\n </span>\n </div>\n @if (tooltip.isSelected) {\n <div class=\"tooltip-selected-badge\">Seleccionado</div>\n }\n </div>\n }\n }\n</div>\n", styles: [".ticket-map-canvas-container{min-height:500px;overflow:hidden;position:relative;touch-action:pan-x pan-y;width:100%}.ticket-tooltip{position:absolute;z-index:100;background:#1f2937;color:#f9fafb;border-radius:8px;padding:10px 14px;font-size:12px;line-height:1.5;pointer-events:none;min-width:160px;box-shadow:0 4px 12px #00000040}.tooltip-header{font-weight:600;font-size:13px;margin-bottom:6px;padding-bottom:6px;border-bottom:1px solid #374151}.tooltip-row{display:flex;justify-content:space-between;gap:12px}.tooltip-label{color:#9ca3af}.tooltip-value{color:#f9fafb;font-weight:500}.tooltip-status{display:flex;align-items:center;gap:6px;color:#f9fafb;font-weight:500}.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%}.tooltip-selected-badge{margin-top:6px;padding-top:6px;border-top:1px solid #374151;color:#34d399;font-weight:500;font-size:11px}.zoom-controls{position:absolute;bottom:16px;right:16px;display:flex;align-items:center;gap:8px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:4px 8px;box-shadow:0 1px 3px #0000001a}.zoom-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid #d1d5db;background:#f9fafb;border-radius:6px;cursor:pointer;font-size:16px;font-weight:600;color:#374151;line-height:1}.zoom-btn:hover{background:#e5e7eb}.zoom-level{font-size:12px;color:#6b7280;min-width:40px;text-align:center}\n"] }]
10092
+ args: [{ selector: 'performance-ticket-map', standalone: true, imports: [CommonModule, StageComponent, CoreShapeComponent], template: "<div class=\"ticket-map-canvas-container\">\n @if (isBrowser) {\n <ko-stage\n [config]=\"bookingDataService.stageConfig()\"\n (click)=\"handleStageClick($event)\"\n (mousemove)=\"handleStageMouseMove($event)\"\n (mouseleave)=\"handleStageMouseLeave()\"\n (wheel)=\"handleWheel($event)\"\n >\n @for (group of floorGroups(); track group.floorId) {\n <ko-layer #floorLayer [config]=\"{ name: floorLayerName(group.floorId) }\">\n @for (element of group.elements; track trackByElementId($index, element)) {\n <ko-shape [config]=\"element.shapeConfig\" />\n }\n </ko-layer>\n }\n </ko-stage>\n\n @if (tooltipData(); as tooltip) {\n <div class=\"ticket-tooltip\" [style.left.px]=\"tooltip.x\" [style.top.px]=\"tooltip.y\">\n <div class=\"tooltip-header\">{{ tooltip.elementName }}</div>\n @if (tooltip.seatLabel) {\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Asiento:</span>\n <span class=\"tooltip-value\">{{ tooltip.seatLabel }}</span>\n </div>\n }\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Precio:</span>\n <span class=\"tooltip-value\">${{ tooltip.price | number: '1.0-0' }}</span>\n </div>\n <div class=\"tooltip-row\">\n <span class=\"tooltip-label\">Estado:</span>\n <span class=\"tooltip-status\">\n <span class=\"status-dot\" [style.background]=\"tooltip.statusColor\"></span>\n {{ tooltip.statusLabel }}\n </span>\n </div>\n @if (tooltip.isSelected) {\n <div class=\"tooltip-selected-badge\">Seleccionado</div>\n }\n </div>\n }\n }\n</div>\n", styles: [".ticket-map-canvas-container{min-height:500px;overflow:hidden;position:relative;touch-action:pan-x pan-y;width:100%}.ticket-tooltip{position:absolute;z-index:100;background:#1f2937;color:#f9fafb;border-radius:8px;padding:10px 14px;font-size:12px;line-height:1.5;pointer-events:none;min-width:160px;box-shadow:0 4px 12px #00000040}.tooltip-header{font-weight:600;font-size:13px;margin-bottom:6px;padding-bottom:6px;border-bottom:1px solid #374151}.tooltip-row{display:flex;justify-content:space-between;gap:12px}.tooltip-label{color:#9ca3af}.tooltip-value{color:#f9fafb;font-weight:500}.tooltip-status{display:flex;align-items:center;gap:6px;color:#f9fafb;font-weight:500}.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%}.tooltip-selected-badge{margin-top:6px;padding-top:6px;border-top:1px solid #374151;color:#34d399;font-weight:500;font-size:11px}.zoom-controls{position:absolute;bottom:16px;right:16px;display:flex;align-items:center;gap:8px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:4px 8px;box-shadow:0 1px 3px #0000001a}.zoom-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid #d1d5db;background:#f9fafb;border-radius:6px;cursor:pointer;font-size:16px;font-weight:600;color:#374151;line-height:1}.zoom-btn:hover{background:#e5e7eb}.zoom-level{font-size:12px;color:#6b7280;min-width:40px;text-align:center}\n"] }]
10019
10093
  }], ctorParameters: () => [{ type: undefined, decorators: [{
10020
10094
  type: Inject,
10021
10095
  args: [PLATFORM_ID]
@@ -10032,7 +10106,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
10032
10106
  }], stageComponent: [{
10033
10107
  type: ViewChild,
10034
10108
  args: [StageComponent]
10035
- }] } });
10109
+ }], floorLayerRefs: [{ type: i0.ViewChildren, args: ['floorLayer', { ...{ read: CoreShapeComponent }, isSignal: true }] }] } });
10036
10110
 
10037
10111
  class TicketMapPriceZonesComponent {
10038
10112
  title = 'Precios por zona';
@@ -11150,5 +11224,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
11150
11224
  * Generated bundle index. Do not edit.
11151
11225
  */
11152
11226
 
11153
- export { ADMIN_API_ROUTES, ADMISSION_API_ROUTES, ALERT_ICONS, AdminSelectComponent, AdminService, AdmissionQueueService, ApiService, AppAlertComponent, AppBadgeComponent, AppBreadcumbComponent, AppButtonComponent, AppLinkButtonComponent, AppModalComponent, AsyncSelectComponent, AuditInformationComponent, BASE_BUTTON_CLASSES, BASE_INPUT_CLASSES, BUTTON_SIZES_CLASSES, BUTTON_VARIANT_CLASSES, BaseModalService, BrowserZoomLockService, BulkSaveBarComponent, CITY_API_ENDPOINTS, COUNTRY_API_ENDPOINTS, CUSTOMERS_API_ROUTES, ChangePasswordFormComponent, ChangePasswordFormService, CitiesService, CitySelectComponent, ColorPickerComponent, ConfirmationOrderModalComponent, ConfirmationOrderModalService, CorporateBondStatus, CountrySelectComponent, CountryService, CouponApplicability, CouponDiscountType, CouponStatus, CreatorType, CustomerSelectComponent, CustomerService, DEFAULT_STAGE_CONFIG, DOCUMENT_TYPES_OPTIONS, DateInputComponent, DateService, DaySelectorGridComponent, DeleteConfirmationComponent, DeleteConfirmationService, DynamicTableComponent, ERROR_INPUT_CLASSES, EndDateGreaterThanStartValidator, FORM_ERROR_MESSAGES, FeedbackModalComponent, FeedbackModalService, FileType, FileUploadComponent, FileUploadPreviewComponent, FormEditorComponent, FormInputComponent, FormSelectComponent, FormTextareaComponent, GiftBondPurchaseStatus, GiftBondStatus, IdentityDocumentInputComponent, KONVA_SHAPE_MAPPINGS, LanguageSwitcherComponent, MembershipStatus, MinTodayValidator, MustMatchValidator, NumberInputComponent, ORDER_DISCOUNT_COLORS, ORDER_ITEM_TYPES_COLORS, ORDER_STATUS_COLORS, OrderBillingInfoComponent, OrderDiscountAppliedComponent, OrderInformationComponent, OrderItemType, OrderItemTypeBadgeComponent, OrderItemsComponent, OrderStatus, OrderStatusBadgeComponent, OrderTransactionDetailsModalComponent, OrderTransactionDetailsModalService, OrderTransactionsComponent, PAYMENT_METHODS_OPTIONS, PERFORMANCES_API_ROUTES, PERFORMANCE_STATUS_COLORS, PERFORMANCE_TICKET_STATUS_COLORS, PHONE_COUNTRIES, PRICE_ZONES_API_ROUTES, PRODUCTS_API_ROUTES, PRODUCT_CATEGORIES_API_ROUTES, PRODUCT_TAGS_API_ROUTES, PRODUCT_TYPES_API_ROUTES, PaymentMethod, PendingChangesService, PerformanceBookingDataService, PerformanceCardComponent, PerformanceCardListComponent, PerformanceMultiSelectComponent, PerformanceSelectComponent, PerformanceService, PerformanceStatus, PerformanceStatusBadgeComponent, PerformanceStepperComponent, PerformanceTicketMapComponent, PerformanceTicketStatus, PerformanceTicketStatusBadgeComponent, PerformancesListEventsService, PhoneInputComponent, PriceZoneEventService, PriceZoneFormModalService, PriceZoneSelectComponent, PriceZoneService, ProductCategoryService, ProductMultiSelectComponent, ProductSelectComponent, ProductService, ProductTagService, ProductTypeService, PurchaseLimitService, QuickStatusEditComponent, RoomMapElementOrientation, RoomMapElementType, SHOWS_API_ROUTES, SHOW_TYPE_COLORS, STATE_API_ENDPOINTS, SeatAvailabilitySseService, SeatSelectionEmptySummaryComponent, SeatSelectionSummaryComponent, SeatSelectionSummaryItemComponent, SelectedDiscountCardType, ShowCardComponent, ShowCardSkeletonComponent, ShowMultiSelectComponent, ShowSelectComponent, ShowService, ShowType, ShowTypeBadgeComponent, ShowsFilterComponent, StateSelectComponent, StatesService, TICKERA_COMPONENTS_CONFIG, TICKET_ELEMENT_TYPES, TICKET_MAP_GRID_SIZE, TICKET_MAP_LAST_TICKETS_LIMIT, TICKET_MAP_TITLE_HEIGHT, TICKET_STATUS_COLORS, TICKET_STATUS_FILLS, TICKET_STATUS_LABELS, TIcketMapProductSelectionComponent, TRANSACTION_STATUS_COLORS, TextExpandableComponent, TickeraTranslocoLoader, TicketMapFloorSelectorComponent, TicketMapPriceZonesComponent, TicketMapProductSelectionItemComponent, TicketMapTotalsComponent, TicketMapWidgetComponent, TicketMapWidgetHeaderComponent, TicketMapWrapperComponent, TicketMapZoomControlsComponent, TicketMapZoomService, TicketQrComponent, TicketQrModalComponent, TicketQrModalService, TicketQrService, TicketSelectionDetailsService, TicketSelectionDiscountService, TicketSelectionService, TicketSelectionTotalsService, ToastService, ToggleSwitchComponent, TransactionStatus, VENUES_API_ROUTES, VIP_CARDS_API_ROUTES, VipBalanceCardComponent, VipCardService, VipCardStatus, VipCardStatusBadgeComponent, VipRechargeModalComponent, VipTransactionType, VipTransactionsTableComponent, ZonePriceItemComponent, ZonePriceListComponent, authInterceptor, drawChairIcon$1 as drawChairIcon, drawHappyFace, drawRoundedRect, drawWheelchairIcon, emailValidator, findElementAtPosition, findTicketAtPosition, formatCitiesResponseToSelect, generateExitScene, generateHallwayScene, generateProductionAreaScene, generateSeatBlockScene, generateSeatBlockTicketScene, generateStageScene, generateStairScene, generateTableScene, generateTableTicketScene, generateUnavailableSpaceScene, generateZoneScene, getBrowserLanguage, getCustomerFullname, getItemTypeIcon, getOrderDiscount, getStoredLanguage, numberToLetter$1 as numberToLetter, parseJsonToFormDataAdvanced, phoneCountryFlag, processElementsToRenderData, provideTickeraComponents, resolveLanguage, setStoredLanguage, ticketCanOpenQr, tintColor, transformImageToFile, transformUrlParams };
11227
+ export { ADMIN_API_ROUTES, ADMISSION_API_ROUTES, ALERT_ICONS, AdminSelectComponent, AdminService, AdmissionQueueService, ApiService, AppAlertComponent, AppBadgeComponent, AppBreadcumbComponent, AppButtonComponent, AppLinkButtonComponent, AppModalComponent, AsyncSelectComponent, AuditInformationComponent, BASE_BUTTON_CLASSES, BASE_INPUT_CLASSES, BUTTON_SIZES_CLASSES, BUTTON_VARIANT_CLASSES, BaseModalService, BrowserZoomLockService, BulkSaveBarComponent, CITY_API_ENDPOINTS, COUNTRY_API_ENDPOINTS, CUSTOMERS_API_ROUTES, ChangePasswordFormComponent, ChangePasswordFormService, CitiesService, CitySelectComponent, ColorPickerComponent, ConfirmationOrderModalComponent, ConfirmationOrderModalService, CorporateBondStatus, CountrySelectComponent, CountryService, CouponApplicability, CouponDiscountType, CouponStatus, CreatorType, CustomerSelectComponent, CustomerService, DEFAULT_STAGE_CONFIG, DOCUMENT_TYPES_OPTIONS, DateInputComponent, DateService, DaySelectorGridComponent, DeleteConfirmationComponent, DeleteConfirmationService, DynamicTableComponent, ERROR_INPUT_CLASSES, EndDateGreaterThanStartValidator, FORM_ERROR_MESSAGES, FeedbackModalComponent, FeedbackModalService, FileType, FileUploadComponent, FileUploadPreviewComponent, FormEditorComponent, FormInputComponent, FormSelectComponent, FormTextareaComponent, GiftBondPurchaseStatus, GiftBondStatus, IdentityDocumentInputComponent, KONVA_SHAPE_MAPPINGS, LanguageSwitcherComponent, MembershipStatus, MinTodayValidator, MustMatchValidator, NumberInputComponent, ORDER_DISCOUNT_COLORS, ORDER_ITEM_TYPES_COLORS, ORDER_STATUS_COLORS, OrderBillingInfoComponent, OrderDiscountAppliedComponent, OrderInformationComponent, OrderItemType, OrderItemTypeBadgeComponent, OrderItemsComponent, OrderStatus, OrderStatusBadgeComponent, OrderTransactionDetailsModalComponent, OrderTransactionDetailsModalService, OrderTransactionsComponent, PAYMENT_METHODS_OPTIONS, PERFORMANCES_API_ROUTES, PERFORMANCE_STATUS_COLORS, PERFORMANCE_TICKET_STATUS_COLORS, PHONE_COUNTRIES, PRICE_ZONES_API_ROUTES, PRODUCTS_API_ROUTES, PRODUCT_CATEGORIES_API_ROUTES, PRODUCT_TAGS_API_ROUTES, PRODUCT_TYPES_API_ROUTES, PaymentMethod, PendingChangesService, PerformanceBookingDataService, PerformanceCardComponent, PerformanceCardListComponent, PerformanceMultiSelectComponent, PerformanceSelectComponent, PerformanceService, PerformanceStatus, PerformanceStatusBadgeComponent, PerformanceStepperComponent, PerformanceTicketMapComponent, PerformanceTicketStatus, PerformanceTicketStatusBadgeComponent, PerformancesListEventsService, PhoneInputComponent, PriceZoneEventService, PriceZoneFormModalService, PriceZoneSelectComponent, PriceZoneService, ProductCategoryService, ProductMultiSelectComponent, ProductSelectComponent, ProductService, ProductTagService, ProductTypeService, PurchaseLimitService, QuickStatusEditComponent, RoomMapElementOrientation, RoomMapElementType, SHOWS_API_ROUTES, STATE_API_ENDPOINTS, SeatAvailabilitySseService, SeatSelectionEmptySummaryComponent, SeatSelectionSummaryComponent, SeatSelectionSummaryItemComponent, SelectedDiscountCardType, ShowCardComponent, ShowCardSkeletonComponent, ShowMultiSelectComponent, ShowSelectComponent, ShowService, ShowTypeBadgeComponent, ShowsFilterComponent, StateSelectComponent, StatesService, TICKERA_COMPONENTS_CONFIG, TICKET_ELEMENT_TYPES, TICKET_MAP_FLOOR_HOVER_FADE_MS, TICKET_MAP_FLOOR_HOVER_OPACITY, TICKET_MAP_GRID_SIZE, TICKET_MAP_LAST_TICKETS_LIMIT, TICKET_MAP_TITLE_HEIGHT, TICKET_STATUS_COLORS, TICKET_STATUS_FILLS, TICKET_STATUS_LABELS, TIcketMapProductSelectionComponent, TRANSACTION_STATUS_COLORS, TextExpandableComponent, TickeraTranslocoLoader, TicketMapFloorSelectorComponent, TicketMapPriceZonesComponent, TicketMapProductSelectionItemComponent, TicketMapTotalsComponent, TicketMapWidgetComponent, TicketMapWidgetHeaderComponent, TicketMapWrapperComponent, TicketMapZoomControlsComponent, TicketMapZoomService, TicketQrComponent, TicketQrModalComponent, TicketQrModalService, TicketQrService, TicketSelectionDetailsService, TicketSelectionDiscountService, TicketSelectionService, TicketSelectionTotalsService, ToastService, ToggleSwitchComponent, TransactionStatus, VENUES_API_ROUTES, VIP_CARDS_API_ROUTES, VipBalanceCardComponent, VipCardService, VipCardStatus, VipCardStatusBadgeComponent, VipRechargeModalComponent, VipTransactionType, VipTransactionsTableComponent, ZonePriceItemComponent, ZonePriceListComponent, authInterceptor, drawChairIcon$1 as drawChairIcon, drawHappyFace, drawRoundedRect, drawWheelchairIcon, emailValidator, findElementAtPosition, findTicketAtPosition, formatCitiesResponseToSelect, generateExitScene, generateHallwayScene, generateProductionAreaScene, generateSeatBlockScene, generateSeatBlockTicketScene, generateStageScene, generateStairScene, generateTableScene, generateTableTicketScene, generateUnavailableSpaceScene, generateZoneScene, getBrowserLanguage, getCustomerFullname, getItemTypeIcon, getOrderDiscount, getStoredLanguage, numberToLetter$1 as numberToLetter, parseJsonToFormDataAdvanced, phoneCountryFlag, processElementsToRenderData, provideTickeraComponents, resolveLanguage, setStoredLanguage, ticketCanOpenQr, tintColor, transformImageToFile, transformUrlParams };
11154
11228
  //# sourceMappingURL=tickera-angular-components.mjs.map