tickera-angular-components 0.0.1-dev.21 → 0.0.1-dev.212

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.
package/index.d.ts CHANGED
@@ -1,12 +1,19 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, EnvironmentProviders, WritableSignal, EventEmitter, Injector, Type, OnInit, OnDestroy, ElementRef, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { InjectionToken, EnvironmentProviders, WritableSignal, Signal, EventEmitter, OnChanges, OnDestroy, SimpleChanges, Injector, Type, OnInit, ElementRef, AfterViewInit } from '@angular/core';
3
+ export { TippyDirective } from '@ngneat/helipopper';
4
+ export * from '@ngneat/helipopper/config';
3
5
  import { TranslocoLoader, TranslocoService } from '@jsverse/transloco';
4
6
  import * as rxjs from 'rxjs';
5
7
  import { Observable, Subject } from 'rxjs';
6
- import { ValidatorFn, FormGroup, FormBuilder, ControlValueAccessor, NgControl, Validator, AbstractControl, FormControl } from '@angular/forms';
7
- import { HttpClient, HttpInterceptorFn } from '@angular/common/http';
8
+ import { ShapeConfig, Shape } from 'konva/lib/Shape';
9
+ import { Context } from 'konva/lib/Context';
10
+ import { ValidatorFn, FormGroup, FormBuilder, ControlValueAccessor, NgControl, Validator, AbstractControl, ValidationErrors, FormControl } from '@angular/forms';
11
+ import { HttpClient, HttpErrorResponse, HttpInterceptorFn } from '@angular/common/http';
12
+ import { Stage } from 'konva/lib/Stage';
13
+ import { Router, ActivatedRoute } from '@angular/router';
14
+ import * as tickera_angular_components from 'tickera-angular-components';
8
15
  import { Toolbar, Editor } from 'ngx-editor';
9
- import { Router } from '@angular/router';
16
+ import { StageComponent, CoreShapeComponent } from 'ng2-konva';
10
17
 
11
18
  interface TickeraComponentsConfig {
12
19
  apiUrl: string;
@@ -14,6 +21,7 @@ interface TickeraComponentsConfig {
14
21
  defaultLang?: string;
15
22
  availableLangs?: string[];
16
23
  }
24
+
17
25
  declare const TICKERA_COMPONENTS_CONFIG: InjectionToken<TickeraComponentsConfig>;
18
26
  declare function provideTickeraComponents(config: TickeraComponentsConfig): EnvironmentProviders;
19
27
 
@@ -33,22 +41,21 @@ declare const ALERT_ICONS: {
33
41
  info: string;
34
42
  };
35
43
 
36
- declare const BUTTON_VARIANT_CLASSES: Record<string, string>;
37
- declare const BASE_BUTTON_CLASSES = "btn";
38
- declare const BUTTON_SIZES_CLASSES: Record<string, string>;
39
-
40
- declare const FORM_ERROR_MESSAGES: Record<string, string>;
41
-
42
- declare const BASE_INPUT_CLASSES: string;
43
- declare const ERROR_INPUT_CLASSES: string;
44
-
45
44
  declare const ADMIN_API_ROUTES: {
46
45
  FIND_ALL: string;
47
46
  CREATE: string;
47
+ findOne: (id: number) => string;
48
48
  updateOne: (id: number) => string;
49
49
  deleteOne: (id: number) => string;
50
50
  };
51
51
 
52
+ declare const ADMISSION_API_ROUTES: {
53
+ join: (performanceId: number) => string;
54
+ leave: (performanceId: number) => string;
55
+ status: (performanceId: number) => string;
56
+ events: (performanceId: number) => string;
57
+ };
58
+
52
59
  declare const CITY_API_ENDPOINTS: {
53
60
  findAll: string;
54
61
  create: string;
@@ -79,15 +86,28 @@ declare const PERFORMANCES_API_ROUTES: {
79
86
  createBulk: string;
80
87
  findOneById: (id: number) => string;
81
88
  findOneBookingData: (id: number) => string;
89
+ findOneBookingDataAdmin: (id: number) => string;
82
90
  update: (id: number) => string;
83
91
  delete: (id: number) => string;
84
92
  deleteMany: string;
93
+ bulkPublished: string;
85
94
  cancel: (id: number) => string;
86
95
  publishInventory: (id: number) => string;
87
96
  reserve: (id: number) => string;
88
97
  ticketQrToken: (uuid: string) => string;
89
98
  getAvailableDays: string;
99
+ getAvailableDaysAdmin: string;
90
100
  publicAvailablePerformances: string;
101
+ dailyPerformancesAdmin: string;
102
+ pedagogicList: string;
103
+ pedagogicAvailability: (id: number) => string;
104
+ createPedagogicOrder: (id: number) => string;
105
+ seatEventsTicket: (id: number) => string;
106
+ seatEventsTicketAdmin: (id: number) => string;
107
+ seatEvents: (id: number) => string;
108
+ myQrToken: (ticketUuid: string) => string;
109
+ ticketPdf: (ticketUuid: string) => string;
110
+ myTicketPdf: (ticketUuid: string) => string;
91
111
  };
92
112
 
93
113
  declare const PRICE_ZONES_API_ROUTES: {
@@ -166,172 +186,36 @@ declare const VENUES_API_ROUTES: {
166
186
  deleteOneImage: (venueId: number, imageId: number) => string;
167
187
  };
168
188
 
169
- declare enum FileType {
170
- IMAGE = "image",
171
- PDF = "pdf",
172
- EXCEL = "excel",
173
- WORD = "word",
174
- TEXT = "text",
175
- DEFAULT = "default"
176
- }
177
-
178
- declare enum CouponApplicability {
179
- GENERAL = "GENERAL",
180
- CUSTOMER_EMAIL = "CUSTOMER_EMAIL",
181
- MEMBERSHIP_TYPE = "MEMBERSHIP_TYPE",
182
- SHOWS = "SHOWS",
183
- PERFORMANCES = "PERFORMANCES"
184
- }
185
-
186
- declare enum CouponDiscountType {
187
- PERCENTAGE = "PERCENTAGE",
188
- FIXED = "FIXED"
189
- }
190
-
191
- declare enum CouponStatus {
192
- ACTIVE = "ACTIVE",
193
- INACTIVE = "INACTIVE",
194
- EXPIRED = "EXPIRED",
195
- CONSUMED = "CONSUMED"
196
- }
197
-
198
- declare enum CorporateBondStatus {
199
- ACTIVE = "ACTIVE",
200
- INACTIVE = "INACTIVE",
201
- EXPIRED = "EXPIRED",
202
- CONSUMED = "CONSUMED"
203
- }
204
-
205
- declare enum PerformanceStatus {
206
- ACTIVE = "active",
207
- CANCELLED = "cancelled",
208
- FINISHED = "finished",
209
- POSTPONED = "postponed"
210
- }
211
-
212
- declare enum PerformanceTicketStatus {
213
- AVAILABLE = "available",
214
- RESERVED = "reserved",
215
- SOLD = "sold",
216
- BLOCKED = "blocked"
217
- }
218
-
219
- declare enum RoomMapElementOrientation {
220
- TOP = "top",
221
- RIGHT = "right",
222
- BOTTOM = "bottom",
223
- LEFT = "left",
224
- CENTER = "center"
225
- }
226
-
227
- declare enum RoomMapElementType {
228
- SEAT_BLOCK = "seat_block",
229
- TABLE = "table",
230
- ZONE = "zone",
231
- EXIT = "exit",
232
- STAGE = "stage",
233
- PRODUCTION_AREA = "production_area",
234
- UNAVAILABLE_SPACE = "unavailable_space",
235
- STAIR = "stair",
236
- HALLWAY = "hallway"
237
- }
238
-
239
- declare enum GiftBondStatus {
240
- ACTIVE = "ACTIVE",
241
- INACTIVE = "INACTIVE",
242
- EXPIRED = "EXPIRED",
243
- CONSUMED = "CONSUMED"
244
- }
245
-
246
- declare enum OrderItemType {
247
- TICKET = "TICKET",
248
- PRODUCT = "PRODUCT"
249
- }
250
-
251
- declare enum OrderStatus {
252
- ON_HOLD = "on-hold",
253
- PENDING_PAYMENT = "pending-payment",
254
- PROCESSING = "processing",
255
- COMPLETED = "completed",
256
- FAILED = "failed",
257
- CANCELLED = "cancelled",
258
- REFUNDED = "refunded"
259
- }
260
-
261
- interface RoomMapPosition {
262
- x: number;
263
- y: number;
264
- }
265
-
266
- interface RoomMapSize {
267
- width: number;
268
- height: number;
269
- }
270
-
271
- interface RoomMapBaseElement {
272
- id: string;
273
- type: RoomMapElementType;
274
- position: RoomMapPosition;
275
- size: RoomMapSize;
276
- rotation: number;
277
- name?: string;
278
- isLocked: boolean;
279
- isVisible: boolean;
280
- zIndex: number;
281
- }
282
-
283
- interface RoomMapExitElement extends RoomMapBaseElement {
284
- type: RoomMapElementType.EXIT;
285
- exitName?: string;
286
- exitType: 'emergency' | 'regular';
287
- width: number;
288
- }
289
-
290
- interface RoomMapProductionAreaElement extends RoomMapBaseElement {
291
- type: RoomMapElementType.PRODUCTION_AREA;
292
- areaName?: string;
293
- areaType: 'lighting' | 'sound' | 'backstage' | 'orchestra' | 'custom';
294
- }
295
-
296
- interface RoomMapSeatElement extends RoomMapBaseElement {
297
- type: RoomMapElementType.SEAT_BLOCK;
298
- seatNumber?: string;
299
- isAvailable: boolean;
300
- priceCategory?: string;
301
- }
189
+ declare const VIP_CARDS_API_ROUTES: {
190
+ findAll: string;
191
+ findOne: (id: number) => string;
192
+ activateAdmin: string;
193
+ rechargeAdmin: (id: number) => string;
194
+ updateStatus: (id: number) => string;
195
+ updateTerms: (id: number) => string;
196
+ transactions: (id: number) => string;
197
+ findMy: string;
198
+ activate: string;
199
+ recharge: string;
200
+ };
302
201
 
303
- interface RoomMapStageElement extends RoomMapBaseElement {
304
- type: RoomMapElementType.STAGE;
305
- stageName?: string;
306
- orientation: RoomMapElementOrientation;
307
- isMainStage: boolean;
308
- }
202
+ declare const BUTTON_VARIANT_CLASSES: Record<string, string>;
203
+ declare const BASE_BUTTON_CLASSES = "btn";
204
+ declare const BUTTON_SIZES_CLASSES: Record<string, string>;
309
205
 
310
- interface RoomMapTableElement extends RoomMapBaseElement {
311
- type: RoomMapElementType.TABLE;
312
- tableNumber?: string;
313
- capacity: number;
314
- shape: 'round' | 'rectangular' | 'square';
315
- }
206
+ declare const FORM_ERROR_MESSAGES: Record<string, string>;
316
207
 
317
- interface RoomMapUnavailableElement extends RoomMapBaseElement {
318
- type: RoomMapElementType.UNAVAILABLE_SPACE;
319
- reason?: string;
320
- }
208
+ declare const BASE_INPUT_CLASSES: string;
209
+ declare const ERROR_INPUT_CLASSES: string;
321
210
 
322
- interface RoomMapZoneElement extends RoomMapBaseElement {
323
- type: RoomMapElementType.ZONE;
324
- zoneName: string;
325
- zoneType: 'vip' | 'general' | 'premium' | 'balcony' | 'custom';
326
- color: string;
327
- capacity?: number;
211
+ interface PhoneCountry {
212
+ name: string;
213
+ isoCode: string;
214
+ dialCode: string;
328
215
  }
329
216
 
330
- type RoomMapCanvasElement = RoomMapSeatElement | RoomMapTableElement | RoomMapZoneElement | RoomMapExitElement | RoomMapStageElement | RoomMapProductionAreaElement | RoomMapUnavailableElement;
331
-
332
- type RoomMapSeatDisplayState = 'normal' | 'accessible' | 'non_existent';
333
-
334
- type ShowType = 'play' | 'musical' | 'concert' | 'dance' | 'opera' | 'comedy' | 'other';
217
+ declare function phoneCountryFlag(isoCode: string): string;
218
+ declare const PHONE_COUNTRIES: PhoneCountry[];
335
219
 
336
220
  interface SelectOption {
337
221
  value: any;
@@ -339,7 +223,7 @@ interface SelectOption {
339
223
  disabled?: boolean;
340
224
  }
341
225
 
342
- interface Admin {
226
+ interface Admin extends Auditable {
343
227
  id: number;
344
228
  username: string;
345
229
  email: string;
@@ -355,16 +239,17 @@ interface Admin {
355
239
  reset_password_expires: Date;
356
240
  email_verified_at: Date;
357
241
  last_login: Date;
358
- created_at: Date;
359
- updated_at: Date;
360
- deleted_at: Date;
361
242
  }
362
243
 
363
244
  interface Auditable {
364
245
  created_at: Date;
365
246
  updated_at: Date;
247
+ deleted_at?: Date | null;
366
248
  is_published?: boolean;
367
249
  published_at?: Date;
250
+ published_by?: number;
251
+ deleted_by?: number;
252
+ deleted_by_admin?: Admin;
368
253
  created_by_admin?: Admin;
369
254
  updated_by_admin?: Admin;
370
255
  published_by_admin?: Admin;
@@ -397,30 +282,21 @@ interface DeleteConfirmationOpen {
397
282
  confirmationText: string;
398
283
  }
399
284
 
400
- interface AdminsResponse {
401
- statusCode: number;
402
- data: {
403
- admins: Admin[];
404
- total: number;
405
- };
406
- message: string;
407
- }
408
-
409
285
  interface Country {
410
- id: string;
286
+ id: number;
411
287
  name: string;
412
288
  iso2: string;
413
289
  }
414
290
 
415
291
  interface State {
416
- id: string;
292
+ id: number;
417
293
  name: string;
418
294
  country_id: number;
419
295
  country?: Country;
420
296
  }
421
297
 
422
298
  interface City {
423
- id: string;
299
+ id: number;
424
300
  name: string;
425
301
  search_text: string | null;
426
302
  state_id: number;
@@ -459,33 +335,48 @@ interface Venue extends Auditable {
459
335
  images: VenueImage[];
460
336
  }
461
337
 
462
- interface HallFloor {
338
+ interface HallFloor extends Auditable {
463
339
  id: number;
464
340
  name: string;
465
341
  level: number;
466
342
  max_capacity: number;
467
343
  description: string;
468
344
  hall_id: number;
469
- created_at: Date;
470
- updated_at: Date;
471
- deleted_at: Date | null;
472
345
  }
473
346
 
474
- interface Hall {
347
+ interface Hall extends Auditable {
475
348
  id: number;
476
349
  name: string;
477
350
  venue_id: number;
478
351
  venue?: Venue;
479
352
  hall_floors?: HallFloor[];
480
- created_at: Date;
481
- updated_at: Date;
482
- deleted_at: Date | null;
483
353
  }
484
354
 
485
- interface CountryResponse {
486
- data: Country;
487
- message: string;
488
- status: string;
355
+ interface BreadcrumbStep {
356
+ label: string;
357
+ href?: string;
358
+ icon?: string;
359
+ }
360
+
361
+ interface CommonFetchAllParams {
362
+ id?: number;
363
+ page?: number;
364
+ limit?: number;
365
+ search?: string;
366
+ sort_by?: string;
367
+ sort_order?: 'ASC' | 'DESC';
368
+ is_published?: boolean;
369
+ ids_in?: number[];
370
+ ids_not_in?: number[];
371
+ }
372
+
373
+ interface SidebarMenuItem {
374
+ labelKey: string;
375
+ icon: string;
376
+ path?: string;
377
+ role?: string[];
378
+ isOpen?: boolean;
379
+ submenu?: SidebarMenuItem[];
489
380
  }
490
381
 
491
382
  interface CountriesResponse {
@@ -497,6 +388,21 @@ interface CountriesResponse {
497
388
  status: string;
498
389
  }
499
390
 
391
+ interface CountryResponse {
392
+ data: Country;
393
+ message: string;
394
+ status: string;
395
+ }
396
+
397
+ interface FetchCountriesParams extends CommonFetchAllParams {
398
+ sort_by?: 'country.id' | 'country.name' | 'country.iso2' | 'country.created_at' | 'country.updated_at';
399
+ }
400
+
401
+ interface FetchStatesParams extends CommonFetchAllParams {
402
+ country_id?: number;
403
+ sort_by?: 'state.id' | 'state.name' | 'state.country_id' | 'state.search_text' | 'state.created_at' | 'state.updated_at';
404
+ }
405
+
500
406
  interface StateResponse {
501
407
  data: State;
502
408
  message: string;
@@ -512,28 +418,40 @@ interface StatesResponse {
512
418
  statusCode: number;
513
419
  }
514
420
 
421
+ interface CitiesResponse {
422
+ data: {
423
+ cities: City[];
424
+ total: number;
425
+ };
426
+ message: string;
427
+ status: string;
428
+ }
429
+
515
430
  interface CityResponse {
516
431
  data: City;
517
432
  message: string;
518
433
  status: string;
519
434
  }
520
435
 
521
- interface CitiesResponse {
436
+ interface FetchCitiesParams extends CommonFetchAllParams {
437
+ state_id?: number;
438
+ sort_by?: 'city.id' | 'city.name' | 'city.state_id' | 'city.search_text' | 'city.created_at' | 'city.updated_at';
439
+ }
440
+
441
+ interface AdminsResponse {
442
+ statusCode: number;
522
443
  data: {
523
- cities: City[];
444
+ admins: Admin[];
524
445
  total: number;
525
446
  };
526
447
  message: string;
527
- status: string;
528
448
  }
529
449
 
530
- interface FetchCitiesParams {
531
- stateId?: number;
532
- page?: number;
533
- search?: string;
450
+ interface FetchAdminsParams extends CommonFetchAllParams {
451
+ sort_by?: 'admin.id' | 'admin.username' | 'admin.email' | 'admin.mobile' | 'admin.first_name' | 'admin.last_name' | 'admin.full_name' | 'admin.principal_role' | 'admin.email_verified_at' | 'admin.last_login' | 'admin.created_at' | 'admin.updated_at';
534
452
  }
535
453
 
536
- interface Customer {
454
+ interface Customer extends Auditable {
537
455
  username: string;
538
456
  email: string;
539
457
  mobile: string;
@@ -564,9 +482,6 @@ interface Customer {
564
482
  membership_expires_at: Date | null;
565
483
  id: number;
566
484
  is_active: boolean;
567
- created_at: Date;
568
- updated_at: Date;
569
- deleted_at: Date | null;
570
485
  }
571
486
 
572
487
  interface CustomerResponse {
@@ -584,128 +499,277 @@ interface CustomersResponse {
584
499
  message: string;
585
500
  }
586
501
 
587
- interface FetchShowsParams {
588
- page?: number;
589
- limit?: number;
590
- search?: string;
591
- date?: string;
502
+ interface FetchCustomersParams extends CommonFetchAllParams {
503
+ first_name?: string;
504
+ last_name?: string;
505
+ email?: string;
506
+ username?: string;
507
+ mobile?: string;
508
+ document_type?: Customer['document_type'];
509
+ document_number?: string;
510
+ address?: string;
511
+ sort_by?: 'customer.id' | 'customer.email' | 'customer.mobile' | 'customer.first_name' | 'customer.last_name' | 'customer.birthday_date' | 'customer.document_type' | 'customer.document_number' | 'customer.address' | 'customer.postal_code' | 'customer.country_id' | 'customer.city_id' | 'customer.state_id' | 'customer.phone' | 'customer.created_at';
592
512
  }
593
513
 
594
- interface ShowImage {
595
- id: number;
596
- path: string;
597
- full_url: string;
598
- original_name: string;
599
- extension: string;
600
- size: number;
601
- mime_type: string;
514
+ declare enum OrderItemType {
515
+ TICKET = "TICKET",
516
+ PRODUCT = "PRODUCT",
517
+ GIFT_BOND = "GIFT_BOND",
518
+ CORPORATE_BOND = "CORPORATE_BOND",
519
+ VIP_RECHARGE = "VIP_RECHARGE",
520
+ SUBSCRIPTION_ACTIVATION = "SUBSCRIPTION_ACTIVATION"
521
+ }
522
+
523
+ declare enum OrderStatus {
524
+ ON_HOLD = "on-hold",
525
+ PENDING_PAYMENT = "pending-payment",
526
+ PROCESSING = "processing",
527
+ COMPLETED = "completed",
528
+ FAILED = "failed",
529
+ CANCELLED = "cancelled",
530
+ REFUNDED = "refunded"
531
+ }
532
+
533
+ declare enum CreatorType {
534
+ ADMIN = "admin",
535
+ CUSTOMER = "customer"
536
+ }
537
+
538
+ declare enum PaymentMethod {
539
+ PAYROLL = "payroll",
540
+ CASH = "cash",
541
+ DATAFONO = "datafono",
542
+ INTERNAL_EXCHANGE = "internal_exchange",
543
+ CLIENT_EXCHANGE = "client_exchange",
544
+ MERCADO_PAGO = "mercado_pago",
545
+ COURTESY = "courtesy"
546
+ }
547
+
548
+ declare enum RoomMapElementType {
549
+ SEAT_BLOCK = "seat_block",
550
+ TABLE = "table",
551
+ ZONE = "zone",
552
+ EXIT = "exit",
553
+ STAGE = "stage",
554
+ PRODUCTION_AREA = "production_area",
555
+ UNAVAILABLE_SPACE = "unavailable_space",
556
+ STAIR = "stair",
557
+ HALLWAY = "hallway"
558
+ }
559
+
560
+ interface RoomMapPosition {
561
+ x: number;
562
+ y: number;
563
+ }
564
+
565
+ interface RoomMapSize {
602
566
  width: number;
603
567
  height: number;
604
- show_id: number;
605
- created_at: Date;
606
568
  }
607
569
 
608
- interface Show extends Auditable {
609
- id: number;
610
- title: string;
611
- slug: string;
612
- description: string;
613
- duration_minutes: number | null;
614
- type_of_costs: string | null;
615
- service_fee: number | null;
616
- show_type: ShowType | null;
617
- pulep: string | null;
618
- minimum_age: number | null;
619
- show_category_id: number | null;
620
- default_room_map_id: number | null;
621
- published_at?: Date;
622
- is_published: boolean;
623
- images: ShowImage[];
624
- terms_and_conditions: string;
625
- performances_quantity?: number;
570
+ interface RoomMapBaseElement {
571
+ id: string;
572
+ type: RoomMapElementType;
573
+ position: RoomMapPosition;
574
+ size: RoomMapSize;
575
+ rotation: number;
576
+ name?: string;
577
+ isLocked: boolean;
578
+ isVisible: boolean;
579
+ zIndex: number;
626
580
  }
627
581
 
628
- interface ShowResponse {
629
- statusCode: number;
630
- data: Show;
631
- message: string;
582
+ interface RoomMapExitElement extends RoomMapBaseElement {
583
+ type: RoomMapElementType.EXIT;
584
+ exitName?: string;
585
+ exitType: 'emergency' | 'regular';
586
+ width: number;
632
587
  }
633
588
 
634
- interface ShowsResponseInterface {
635
- statusCode: number;
636
- data: {
637
- shows: Show[];
638
- total: number;
639
- };
640
- message: string;
589
+ interface RoomMapProductionAreaElement extends RoomMapBaseElement {
590
+ type: RoomMapElementType.PRODUCTION_AREA;
591
+ areaName?: string;
592
+ areaType: 'lighting' | 'sound' | 'backstage' | 'orchestra' | 'custom';
641
593
  }
642
594
 
643
- interface ShowCategory extends Auditable {
595
+ interface RoomMapSeatElement extends RoomMapBaseElement {
596
+ type: RoomMapElementType.SEAT_BLOCK;
597
+ seatNumber?: string;
598
+ isAvailable: boolean;
599
+ priceCategory?: string;
600
+ }
601
+
602
+ declare enum RoomMapElementOrientation {
603
+ TOP = "top",
604
+ RIGHT = "right",
605
+ BOTTOM = "bottom",
606
+ LEFT = "left",
607
+ CENTER = "center"
608
+ }
609
+
610
+ interface RoomMapStageElement extends RoomMapBaseElement {
611
+ type: RoomMapElementType.STAGE;
612
+ stageName?: string;
613
+ orientation: RoomMapElementOrientation;
614
+ isMainStage: boolean;
615
+ }
616
+
617
+ interface RoomMapTableElement extends RoomMapBaseElement {
618
+ type: RoomMapElementType.TABLE;
619
+ tableNumber?: string;
620
+ capacity: number;
621
+ shape: 'round' | 'rectangular' | 'square';
622
+ }
623
+
624
+ interface RoomMapUnavailableElement extends RoomMapBaseElement {
625
+ type: RoomMapElementType.UNAVAILABLE_SPACE;
626
+ reason?: string;
627
+ }
628
+
629
+ interface RoomMapZoneElement extends RoomMapBaseElement {
630
+ type: RoomMapElementType.ZONE;
631
+ zoneName: string;
632
+ zoneType: 'vip' | 'general' | 'premium' | 'balcony' | 'custom';
633
+ color: string;
634
+ capacity?: number;
635
+ }
636
+
637
+ type RoomMapCanvasElement = RoomMapSeatElement | RoomMapTableElement | RoomMapZoneElement | RoomMapExitElement | RoomMapStageElement | RoomMapProductionAreaElement | RoomMapUnavailableElement;
638
+
639
+ type RoomMapSeatDisplayState = 'normal' | 'accessible' | 'non_existent';
640
+
641
+ type ModalSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';
642
+
643
+ type FeedbackModalType = 'loading' | 'success' | 'info' | 'warning' | 'error';
644
+
645
+ type BadgeSize = 'xs' | 'sm' | 'md' | 'lg';
646
+
647
+ type BadgeColor = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';
648
+
649
+ type BreadcrumbTheme = 'light' | 'dark';
650
+
651
+ type TextFontSize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl';
652
+
653
+ interface FeedbackModalElement {
644
654
  id: string;
645
- name: string;
646
- slug: string;
655
+ type: FeedbackModalType;
656
+ title: string;
657
+ isOpen: WritableSignal<boolean>;
658
+ message?: string;
659
+ showHeader?: boolean;
660
+ showCloseButton?: boolean;
661
+ showTitle?: boolean;
662
+ closeModal?: void;
647
663
  }
648
664
 
649
- interface ShowCategoriesResponse {
650
- statusCode: number;
651
- data: {
652
- categories: ShowCategory[];
653
- total: number;
654
- };
655
- message: string;
665
+ declare enum FileType {
666
+ IMAGE = "image",
667
+ PDF = "pdf",
668
+ EXCEL = "excel",
669
+ WORD = "word",
670
+ TEXT = "text",
671
+ DEFAULT = "default"
656
672
  }
657
673
 
658
- interface ShowCategoryResponse {
659
- statusCode: number;
660
- data: ShowCategory;
661
- message: string;
674
+ declare enum CouponApplicability {
675
+ GENERAL = "GENERAL",
676
+ CUSTOMER_EMAIL = "CUSTOMER_EMAIL",
677
+ MEMBERSHIP_TYPE = "MEMBERSHIP_TYPE",
678
+ SHOWS = "SHOWS",
679
+ PERFORMANCES = "PERFORMANCES"
662
680
  }
663
681
 
664
- interface ShowGender extends Auditable {
665
- id: number;
666
- name: string;
667
- slug: string;
682
+ declare enum CouponDiscountType {
683
+ PERCENTAGE = "PERCENTAGE",
684
+ FIXED = "FIXED"
668
685
  }
669
686
 
670
- interface ShowGenderResponse {
671
- statusCode: number;
672
- data: ShowGender;
673
- message: string;
687
+ declare enum CouponStatus {
688
+ ACTIVE = "ACTIVE",
689
+ INACTIVE = "INACTIVE",
690
+ EXPIRED = "EXPIRED",
691
+ CONSUMED = "CONSUMED"
674
692
  }
675
693
 
676
- interface ShowGendersResponse {
677
- statusCode: number;
678
- data: {
679
- genders: ShowGender[];
680
- total: number;
681
- };
682
- message: string;
694
+ declare enum CorporateBondStatus {
695
+ ACTIVE = "ACTIVE",
696
+ INACTIVE = "INACTIVE",
697
+ PENDING = "PENDING",
698
+ PAYMENT_FAILED = "PAYMENT_FAILED",
699
+ EXPIRED = "EXPIRED",
700
+ CONSUMED = "CONSUMED"
683
701
  }
684
702
 
685
- interface PriceZone {
686
- id: number;
687
- name: string;
688
- color: string;
689
- normal_price: number | null;
690
- is_active: boolean;
691
- elements: any[];
692
- room_map_id: number | null;
693
- created_at: Date;
694
- updated_at: Date;
695
- created_by: number;
696
- updated_by: number;
703
+ declare enum PerformanceStatus {
704
+ SCHEDULED = "scheduled",
705
+ OPEN = "open",
706
+ CLOSED = "closed",
707
+ CANCELLED = "cancelled",
708
+ COMPLETED = "completed",
709
+ POSTPONED = "postponed"
710
+ }
711
+
712
+ declare enum PerformanceTicketStatus {
713
+ AVAILABLE = "available",
714
+ RESERVED = "reserved",
715
+ SOLD = "sold",
716
+ BLOCKED = "blocked"
717
+ }
718
+
719
+ /**
720
+ * How a Performance is exposed for booking/browsing.
721
+ * Mirrors `PerformanceVisibilityType` in tickera-backend.
722
+ */
723
+ declare enum PerformanceVisibilityType {
724
+ PUBLIC = "public",
725
+ PRIVATE = "private",
726
+ PEDAGOGIC = "pedagogic"
727
+ }
728
+
729
+ declare enum GiftBondStatus {
730
+ ACTIVE = "ACTIVE",
731
+ INACTIVE = "INACTIVE"
732
+ }
733
+
734
+ declare enum GiftBondPurchaseStatus {
735
+ AVAILABLE = "AVAILABLE",
736
+ REDEEMED = "REDEEMED",
737
+ EXPIRED = "EXPIRED",
738
+ CANCELLED = "CANCELLED"
739
+ }
740
+
741
+ declare enum TransactionStatus {
742
+ PENDING = "PENDING",
743
+ APPROVED = "APPROVED",
744
+ REJECTED = "REJECTED",
745
+ ERROR = "ERROR"
746
+ }
747
+
748
+ declare enum VipCardStatus {
749
+ ACTIVE = "ACTIVE",
750
+ INACTIVE = "INACTIVE",
751
+ EXPIRED = "EXPIRED"
752
+ }
753
+
754
+ declare enum VipTransactionType {
755
+ INITIAL_RECHARGE = "INITIAL_RECHARGE",
756
+ RECHARGE = "RECHARGE",
757
+ PURCHASE_PAYMENT = "PURCHASE_PAYMENT"
758
+ }
759
+
760
+ declare enum MembershipStatus {
761
+ ACTIVE = "ACTIVE",
762
+ INACTIVE = "INACTIVE"
697
763
  }
698
764
 
699
- interface FetchProductCategoriesParams {
765
+ interface FetchProductCategoriesParams extends CommonFetchAllParams {
700
766
  name?: string;
701
767
  slug?: string;
702
- page?: number;
703
- limit?: number;
704
- search?: string;
768
+ sort_by?: 'category.id' | 'category.name' | 'category.slug' | 'category.created_at';
705
769
  }
706
770
 
707
771
  interface ProductCategory extends Auditable {
708
- id: string;
772
+ id: number;
709
773
  name: string;
710
774
  slug: string;
711
775
  }
@@ -725,16 +789,14 @@ interface ProductCategoryResponse {
725
789
  message: string;
726
790
  }
727
791
 
728
- interface FetchProductTagsParams {
792
+ interface FetchProductTagsParams extends CommonFetchAllParams {
729
793
  name?: string;
730
794
  slug?: string;
731
- page?: number;
732
- limit?: number;
733
- search?: string;
795
+ sort_by?: 'tag.id' | 'tag.name' | 'tag.slug' | 'tag.created_at';
734
796
  }
735
797
 
736
798
  interface ProductTag extends Auditable {
737
- id: string;
799
+ id: number;
738
800
  name: string;
739
801
  slug: string;
740
802
  }
@@ -754,16 +816,14 @@ interface ProductTagsResponse {
754
816
  message: string;
755
817
  }
756
818
 
757
- interface FetchProductTypesParams {
819
+ interface FetchProductTypesParams extends CommonFetchAllParams {
758
820
  name?: string;
759
821
  slug?: string;
760
- page?: number;
761
- limit?: number;
762
- search?: string;
822
+ sort_by?: 'type.id' | 'type.name' | 'type.slug' | 'type.created_at';
763
823
  }
764
824
 
765
825
  interface ProductType extends Auditable {
766
- id: string;
826
+ id: number;
767
827
  name: string;
768
828
  slug: string;
769
829
  }
@@ -808,7 +868,6 @@ interface Product extends Auditable {
808
868
  slug: string;
809
869
  sku?: string;
810
870
  is_limited_edition: boolean;
811
- is_active: boolean;
812
871
  deleted_at: Date | null;
813
872
  categories?: ProductCategory[];
814
873
  tags?: ProductTag[];
@@ -816,6 +875,31 @@ interface Product extends Auditable {
816
875
  images?: ProductImage[];
817
876
  }
818
877
 
878
+ interface ShowImage {
879
+ id: number;
880
+ path: string;
881
+ full_url: string;
882
+ original_name: string;
883
+ extension: string;
884
+ size: number;
885
+ mime_type: string;
886
+ width: number;
887
+ height: number;
888
+ show_id: number;
889
+ created_at: Date;
890
+ }
891
+
892
+ interface PriceZone extends Auditable {
893
+ id: number;
894
+ name: string;
895
+ color: string;
896
+ normal_price: number | null;
897
+ is_active: boolean;
898
+ elements: any[];
899
+ room_map_id: number | null;
900
+ room_map?: RoomMap;
901
+ }
902
+
819
903
  interface NumerationConfig {
820
904
  start_row_letter: string;
821
905
  row_order: 'TOP_TO_BOTTOM' | 'BOTTOM_TO_TOP';
@@ -851,7 +935,7 @@ interface RoomMapElementTemplate {
851
935
  price_zone?: PriceZone;
852
936
  }
853
937
 
854
- interface RoomMap {
938
+ interface RoomMap extends Auditable {
855
939
  id: number;
856
940
  name: string;
857
941
  canvas_settings: {
@@ -867,8 +951,6 @@ interface RoomMap {
867
951
  related_product_ids: number[];
868
952
  products?: Product[];
869
953
  venue_name?: string;
870
- created_at: Date;
871
- updated_at: Date;
872
954
  }
873
955
 
874
956
  interface RoomMapCanvasConfiguration {
@@ -910,18 +992,153 @@ interface ElementPropertiesTab {
910
992
  elements_access: string[];
911
993
  }
912
994
 
913
- interface Performance {
995
+ interface Performance extends Auditable {
914
996
  id: number;
915
997
  start_time: Date | string;
916
998
  end_time: Date | string;
917
999
  status: PerformanceStatus;
918
1000
  published: boolean;
1001
+ visibility_type?: PerformanceVisibilityType;
1002
+ private_audience_label?: string | null;
1003
+ pedagogic_ticket_price?: number | null;
919
1004
  show_id: number;
920
1005
  show?: Show;
921
1006
  room_map: RoomMap;
922
1007
  room_map_id: number;
923
- created_at: Date;
924
- updated_at: Date;
1008
+ performance_tickets?: PerformanceTicket[];
1009
+ can_delete?: boolean;
1010
+ can_cancel?: boolean;
1011
+ can_modify?: boolean;
1012
+ can_reserve?: boolean;
1013
+ }
1014
+
1015
+ interface FetchShowCategoriesParams extends CommonFetchAllParams {
1016
+ name?: string;
1017
+ slug?: string;
1018
+ sort_by?: 'category.id' | 'category.name' | 'category.slug' | 'category.created_at';
1019
+ }
1020
+
1021
+ interface ShowCategory extends Auditable {
1022
+ id: number;
1023
+ name: string;
1024
+ slug: string;
1025
+ }
1026
+
1027
+ interface ShowCategoriesResponse {
1028
+ statusCode: number;
1029
+ data: {
1030
+ categories: ShowCategory[];
1031
+ total: number;
1032
+ };
1033
+ message: string;
1034
+ }
1035
+
1036
+ interface ShowCategoryResponse {
1037
+ statusCode: number;
1038
+ data: ShowCategory;
1039
+ message: string;
1040
+ }
1041
+
1042
+ interface FetchShowGendersParams extends CommonFetchAllParams {
1043
+ name?: string;
1044
+ slug?: string;
1045
+ sort_by?: 'gender.id' | 'gender.name' | 'gender.slug' | 'gender.created_at';
1046
+ }
1047
+
1048
+ interface ShowGender extends Auditable {
1049
+ id: number;
1050
+ name: string;
1051
+ slug: string;
1052
+ }
1053
+
1054
+ interface ShowGenderResponse {
1055
+ statusCode: number;
1056
+ data: ShowGender;
1057
+ message: string;
1058
+ }
1059
+
1060
+ interface ShowGendersResponse {
1061
+ statusCode: number;
1062
+ data: {
1063
+ genders: ShowGender[];
1064
+ total: number;
1065
+ };
1066
+ message: string;
1067
+ }
1068
+
1069
+ interface FetchShowTypesParams extends CommonFetchAllParams {
1070
+ name?: string;
1071
+ slug?: string;
1072
+ sort_by?: 'type.id' | 'type.name' | 'type.slug' | 'type.created_at';
1073
+ }
1074
+
1075
+ interface ShowType extends Auditable {
1076
+ id: number;
1077
+ name: string;
1078
+ slug: string;
1079
+ }
1080
+
1081
+ interface ShowTypesResponse {
1082
+ statusCode: number;
1083
+ data: {
1084
+ types: ShowType[];
1085
+ total: number;
1086
+ };
1087
+ message: string;
1088
+ }
1089
+
1090
+ interface ShowTypeResponse {
1091
+ statusCode: number;
1092
+ data: ShowType;
1093
+ message: string;
1094
+ }
1095
+
1096
+ interface Show extends Auditable {
1097
+ id: number;
1098
+ title: string;
1099
+ slug: string;
1100
+ description: string;
1101
+ duration_minutes: number | null;
1102
+ type_of_costs: string | null;
1103
+ service_fee: number | null;
1104
+ show_type_id?: number | null;
1105
+ show_type?: ShowType | null;
1106
+ pulep: string | null;
1107
+ minimum_age: number | null;
1108
+ show_gender?: ShowGender | null;
1109
+ show_gender_id: number | null;
1110
+ show_category?: ShowCategory | null;
1111
+ show_category_id: number | null;
1112
+ default_room_map?: RoomMap | null;
1113
+ default_room_map_id: number | null;
1114
+ is_published: boolean;
1115
+ images: ShowImage[];
1116
+ terms_and_conditions: string | null;
1117
+ performances_quantity?: number;
1118
+ performances?: Performance[];
1119
+ next_performance?: Performance;
1120
+ days_of_week?: number[];
1121
+ unique_start_times?: string[];
1122
+ }
1123
+
1124
+ interface FindAllPerformancesParams {
1125
+ roomMapId?: number;
1126
+ showId?: number;
1127
+ hallId?: number;
1128
+ page?: number;
1129
+ search?: string;
1130
+ limit?: number;
1131
+ }
1132
+
1133
+ interface PerformanceBookingDataResponse {
1134
+ statusCode: number;
1135
+ data: {
1136
+ performance: Performance;
1137
+ room_map: RoomMap;
1138
+ show: Show;
1139
+ tickets: PerformanceTicket[];
1140
+ };
1141
+ message: string;
925
1142
  }
926
1143
 
927
1144
  interface PerformanceResponse {
@@ -930,6 +1147,18 @@ interface PerformanceResponse {
930
1147
  message: string;
931
1148
  }
932
1149
 
1150
+ interface PerformanceAvailableDay {
1151
+ date: string;
1152
+ count: number;
1153
+ }
1154
+ interface PerformancesAvailableDaysResponse {
1155
+ statusCode: number;
1156
+ data: {
1157
+ days: PerformanceAvailableDay[];
1158
+ };
1159
+ message: string;
1160
+ }
1161
+
933
1162
  interface PerformancesResponseInterface {
934
1163
  statusCode: number;
935
1164
  data: {
@@ -939,7 +1168,26 @@ interface PerformancesResponseInterface {
939
1168
  message: string;
940
1169
  }
941
1170
 
942
- interface OrderItem {
1171
+ interface PedagogicZoneAvailability {
1172
+ price_zone_id: number | null;
1173
+ price_zone_name: string | null;
1174
+ available: number;
1175
+ occupied: number;
1176
+ }
1177
+ interface PedagogicAvailabilityResponse {
1178
+ data: {
1179
+ zones: PedagogicZoneAvailability[];
1180
+ total_available: number;
1181
+ total_occupied: number;
1182
+ };
1183
+ }
1184
+
1185
+ interface CreatePedagogicOrderPayload {
1186
+ quantity: number;
1187
+ courtesy_beneficiary: string;
1188
+ }
1189
+
1190
+ interface OrderItem extends Auditable {
943
1191
  id: number;
944
1192
  order: Order;
945
1193
  item_type: OrderItemType;
@@ -948,14 +1196,11 @@ interface OrderItem {
948
1196
  quantity: number;
949
1197
  unit_price: number;
950
1198
  normal_price: number;
951
- discounted_price: number;
1199
+ discounted_price: number | null;
952
1200
  ticket_id?: number;
953
1201
  ticket_uuid?: string;
1202
+ ticket?: PerformanceTicket;
954
1203
  item: Show | Product;
955
- created_at: Date;
956
- updated_at: Date;
957
- created_by: number;
958
- updated_by: number;
959
1204
  }
960
1205
 
961
1206
  interface Coupon extends Auditable {
@@ -982,7 +1227,7 @@ interface Coupon extends Auditable {
982
1227
  customers?: Customer[];
983
1228
  }
984
1229
 
985
- interface CorporateBond {
1230
+ interface CorporateBond extends Auditable {
986
1231
  id: number;
987
1232
  name: string;
988
1233
  description?: string;
@@ -992,11 +1237,13 @@ interface CorporateBond {
992
1237
  quantity: number;
993
1238
  status: CorporateBondStatus;
994
1239
  value: number;
1240
+ purchase_value: number;
1241
+ buyer_customer_id: number | null;
1242
+ buyer: Customer | null;
1243
+ order_id: number | null;
1244
+ order: Order | null;
1245
+ payment_method?: PaymentMethod;
995
1246
  codes: CorporateBondCode[];
996
- created_at: Date;
997
- updated_at: Date;
998
- created_by: number;
999
- updated_by: number;
1000
1247
  }
1001
1248
 
1002
1249
  interface CorporateBondCode {
@@ -1005,59 +1252,219 @@ interface CorporateBondCode {
1005
1252
  corporate_bond_id: number;
1006
1253
  code: string;
1007
1254
  is_used: boolean;
1255
+ status: CorporateBondStatus;
1008
1256
  used_at: Date | null;
1009
1257
  created_at: Date;
1010
1258
  }
1011
1259
 
1012
- interface CorporateBondResponse {
1013
- statusCode: number;
1014
- data: CorporateBond;
1015
- message: string;
1260
+ interface CorporateBondResponse {
1261
+ statusCode: number;
1262
+ data: CorporateBond;
1263
+ message: string;
1264
+ }
1265
+
1266
+ interface ValidateCorporateBondResponse {
1267
+ data: {
1268
+ valid: boolean;
1269
+ message: string;
1270
+ code: string;
1271
+ bond?: CorporateBond;
1272
+ };
1273
+ message: string;
1274
+ statusCode: number;
1275
+ }
1276
+
1277
+ interface GiftBondImage {
1278
+ id: number;
1279
+ path: string;
1280
+ full_url: string;
1281
+ original_name: string;
1282
+ extension: string;
1283
+ size: number;
1284
+ mime_type: string;
1285
+ width: number;
1286
+ height: number;
1287
+ is_featured: boolean;
1288
+ gift_bond_id: number;
1289
+ gift_bond: GiftBond;
1290
+ created_at: Date;
1291
+ }
1292
+
1293
+ interface GiftBond extends Auditable {
1294
+ id: number;
1295
+ name: string;
1296
+ description?: string;
1297
+ slug?: string;
1298
+ status: GiftBondStatus;
1299
+ value: number;
1300
+ duration_days: number;
1301
+ page_content?: string;
1302
+ purchases_total?: number;
1303
+ purchases_redeemed?: number;
1304
+ images?: GiftBondImage[];
1305
+ }
1306
+
1307
+ interface GiftBondResponse {
1308
+ statusCode: number;
1309
+ data: GiftBond;
1310
+ message: string;
1311
+ }
1312
+
1313
+ interface GiftBondsResponse {
1314
+ statusCode: number;
1315
+ data: {
1316
+ gift_bonds: GiftBond[];
1317
+ total: number;
1318
+ };
1319
+ message: string;
1320
+ }
1321
+
1322
+ interface GiftBondPurchase extends Auditable {
1323
+ id: number;
1324
+ code: string;
1325
+ original_value: number;
1326
+ used_value: number | null;
1327
+ lost_value: number | null;
1328
+ beneficiary_email: string;
1329
+ beneficiary: Customer | null;
1330
+ personalized_message: string | null;
1331
+ status: GiftBondPurchaseStatus;
1332
+ purchased_at: string;
1333
+ expires_at: string;
1334
+ redeemed_at: string | null;
1335
+ gift_bond?: GiftBond;
1336
+ gift_bond_id: number;
1337
+ buyer_customer_id: number;
1338
+ buyer: Customer;
1339
+ order: Order | null;
1340
+ order_id: number;
1341
+ redemption_order_id: number | null;
1342
+ redemption_order: Order | null;
1016
1343
  }
1017
1344
 
1018
- interface ValidateCorporateBondResponse {
1345
+ interface ValidateGiftBondResponse {
1019
1346
  data: {
1020
1347
  valid: boolean;
1021
1348
  message: string;
1022
1349
  code: string;
1023
- bond?: CorporateBond;
1350
+ bond?: GiftBondPurchase;
1024
1351
  };
1352
+ statusCode: number;
1353
+ message: string;
1354
+ }
1355
+
1356
+ interface GiftBondPurchaseResponse {
1357
+ statusCode: number;
1358
+ data: GiftBondPurchase;
1025
1359
  message: string;
1360
+ }
1361
+
1362
+ interface GiftBondPurchasesResponse {
1026
1363
  statusCode: number;
1364
+ data: {
1365
+ items: GiftBondPurchase[];
1366
+ total: number;
1367
+ };
1368
+ message: string;
1369
+ }
1370
+
1371
+ interface Transaction extends Auditable {
1372
+ id: number;
1373
+ status: TransactionStatus;
1374
+ amount: number;
1375
+ currency: string;
1376
+ payment_gateway: string;
1377
+ gateway_transaction_id: string;
1378
+ gateway_response: any;
1379
+ order: Order;
1380
+ }
1381
+
1382
+ interface OrderBillingInfo {
1383
+ first_name: string;
1384
+ last_name: string;
1385
+ email: string;
1386
+ mobile: string;
1387
+ document_type: string;
1388
+ document_number: string;
1389
+ address: string;
1390
+ city_id: number;
1391
+ postal_code?: string;
1392
+ address_notes?: string;
1393
+ payment_method: PaymentMethod;
1394
+ terms_accepted: boolean;
1395
+ data_processing_accepted: boolean;
1396
+ comments?: string;
1397
+ products?: Array<{
1398
+ id: number;
1399
+ quantity: number;
1400
+ }>;
1401
+ }
1402
+
1403
+ interface OrderShowSnapshot {
1404
+ id: number;
1405
+ title: string;
1406
+ description: string | null;
1407
+ service_fee: number | null;
1408
+ }
1409
+
1410
+ interface OrderPerformanceSnapshot {
1411
+ id: number;
1412
+ start_time: Performance['start_time'];
1413
+ end_time: Performance['end_time'];
1414
+ published: boolean;
1415
+ status: PerformanceStatus;
1027
1416
  }
1028
1417
 
1029
- interface Order {
1418
+ interface Order extends Auditable {
1030
1419
  id: number;
1031
1420
  uuid: string;
1032
- customer: Customer;
1421
+ customer_id: number | null;
1422
+ customer: Customer | null;
1033
1423
  customer_name?: string;
1034
1424
  customer_email?: string;
1035
1425
  order_items: OrderItem[];
1036
1426
  order_items_quantity?: number;
1037
- discount_amount: number;
1427
+ transactions: Transaction[];
1428
+ sub_total: number;
1429
+ discount_amount: number | null;
1038
1430
  total: number;
1431
+ sub_total_discounted: number | null;
1039
1432
  total_discounted: number;
1040
- sub_total: number;
1041
- sub_total_discounted: number;
1042
- service_fee: number;
1043
- service_fee_discounted: number;
1044
- coupon: Coupon;
1045
- coupon_snapshot: Record<string, any>;
1046
- corporate_bond_code: CorporateBondCode;
1047
- corporate_bond_code_snapshot: Record<string, any>;
1433
+ service_fee: number | null;
1434
+ service_fee_discounted: number | null;
1435
+ coupon: Coupon | null;
1436
+ coupon_snapshot: Record<string, any> | null;
1048
1437
  status: OrderStatus;
1049
- show_snapshot: Record<string, any>;
1050
- performance_snapshot: Record<string, any>;
1051
- created_at: Date;
1052
- updated_at: Date;
1053
- payment_method: string;
1438
+ show_snapshot: OrderShowSnapshot | null;
1439
+ performance_snapshot: OrderPerformanceSnapshot | null;
1440
+ is_courtesy: boolean;
1441
+ courtesy_beneficiary: string | null;
1442
+ performance_visibility_snapshot: string | null;
1443
+ payment_method: PaymentMethod | null;
1054
1444
  terms_accepted: boolean;
1055
1445
  data_processing_accepted: boolean;
1056
- billing_info: Partial<Customer>;
1057
- comments: string;
1058
- address_notes: string;
1446
+ billing_info: OrderBillingInfo | null;
1447
+ corporate_bond_code_snapshot: Record<string, any> | null;
1448
+ gift_bond_snapshot: Record<string, any> | null;
1449
+ corporate_bond_code: CorporateBondCode | null;
1450
+ corporate_bond_code_id: number | null;
1451
+ gift_bond: GiftBond | null;
1452
+ gift_bond_id: number | null;
1453
+ vip_snapshot: Record<string, any> | null;
1454
+ vip_card_id: number | null;
1455
+ subscription_snapshot: Record<string, any> | null;
1456
+ subscription_id: number | null;
1457
+ subscription_redeemed_tickets_count?: number | null;
1458
+ comments: string | null;
1459
+ address_notes: string | null;
1460
+ mercado_pago_preference_id: string;
1059
1461
  created_by: number;
1462
+ created_by_type: CreatorType;
1060
1463
  updated_by: number;
1464
+ updated_by_type: CreatorType;
1465
+ replacement_order_id?: number | null;
1466
+ replacement_order?: Order | null;
1467
+ replaced_order?: Order | null;
1061
1468
  }
1062
1469
 
1063
1470
  interface OrderResponse {
@@ -1075,7 +1482,15 @@ interface OrdersResponse {
1075
1482
  message: string;
1076
1483
  }
1077
1484
 
1078
- interface PerformanceTicket {
1485
+ interface MercadoPagoPreference {
1486
+ data: {
1487
+ id: string;
1488
+ init_point: string;
1489
+ sandbox_init_point: string;
1490
+ };
1491
+ }
1492
+
1493
+ interface PerformanceTicket extends Auditable {
1079
1494
  id: number;
1080
1495
  uuid: string;
1081
1496
  is_accessible: boolean;
@@ -1089,35 +1504,182 @@ interface PerformanceTicket {
1089
1504
  presale_price: number | null;
1090
1505
  status: PerformanceTicketStatus;
1091
1506
  reserved_until: Date | null;
1507
+ reserved_by_type: CreatorType | null;
1508
+ reserved_by: number | null;
1509
+ reserved_by_admin: Admin | null;
1510
+ reserved_by_customer: number | null;
1511
+ reserved_customer: Customer | null;
1512
+ order: Order | null;
1092
1513
  order_id: number | null;
1093
1514
  customer_id: number | null;
1094
1515
  checked_in: boolean;
1095
1516
  checked_in_at: Date | null;
1517
+ checked_in_by: number | null;
1518
+ checked_in_by_admin: Admin | null;
1096
1519
  order_items: OrderItem[];
1097
1520
  element_qty?: number;
1098
- created_at: Date;
1099
- updated_at: Date;
1521
+ blocked_at: Date | null;
1522
+ blocked_by: number | null;
1523
+ blocked_by_admin: Admin | null;
1100
1524
  }
1101
1525
 
1102
- interface PerformanceBookingDataResponse {
1103
- statusCode: number;
1104
- data: {
1105
- performance: Performance;
1106
- room_map: RoomMap;
1107
- show: Show;
1108
- tickets: PerformanceTicket[];
1526
+ interface TicketMapSeatPosition {
1527
+ rowIndex: number;
1528
+ colIndex: number;
1529
+ seatLabel: string;
1530
+ }
1531
+
1532
+ interface TicketMapTableChairPosition {
1533
+ index: number;
1534
+ angle: number;
1535
+ x: number;
1536
+ y: number;
1537
+ }
1538
+
1539
+ interface ElementRenderData {
1540
+ elementId: number;
1541
+ hallFloorId: number | null;
1542
+ priceZoneId: number | null;
1543
+ type: RoomMapElementType;
1544
+ shapeConfig: Record<string, any>;
1545
+ tickets: PerformanceTicket[];
1546
+ ticketByNumeration: Map<string, PerformanceTicket>;
1547
+ elementName: string;
1548
+ seatPositions?: TicketMapSeatPosition[][];
1549
+ chairPositions?: TicketMapTableChairPosition[];
1550
+ zoneCapacity?: number;
1551
+ }
1552
+
1553
+ interface TicketMapTooltipData {
1554
+ x: number;
1555
+ y: number;
1556
+ elementName: string;
1557
+ seatLabel: string | null;
1558
+ price: number;
1559
+ status: PerformanceTicketStatus;
1560
+ statusLabel: string;
1561
+ statusColor: string;
1562
+ isSelected: boolean;
1563
+ ticketId: number;
1564
+ }
1565
+
1566
+ interface TicketMapZoneQuantityState {
1567
+ elementId: number;
1568
+ selectedCount: number;
1569
+ maxCapacity: number;
1570
+ }
1571
+
1572
+ interface ReservePerformanceDto {
1573
+ ticket_ids: number[];
1574
+ products?: {
1575
+ id: number;
1576
+ quantity: number;
1577
+ }[];
1578
+ coupon_code?: string;
1579
+ gift_bond_code?: string;
1580
+ corporate_bond_code?: string;
1581
+ payment_method?: string;
1582
+ billing?: {
1583
+ first_name: string;
1584
+ last_name: string;
1585
+ email: string;
1586
+ mobile: string;
1587
+ document_type: string;
1588
+ document_number: string;
1589
+ address: string;
1590
+ city_id: number;
1591
+ postal_code?: string;
1592
+ address_notes?: string;
1593
+ terms_accepted: boolean;
1594
+ data_processing_accepted: boolean;
1595
+ comments?: string;
1109
1596
  };
1110
- message: string;
1111
1597
  }
1112
1598
 
1113
- interface PerformanceAvailableDay {
1114
- date: string;
1115
- count: number;
1599
+ interface TicketMapZoomConfig {
1600
+ minZoom: number;
1601
+ maxZoom: number;
1602
+ zoomStep: number;
1603
+ scaleBy: number;
1116
1604
  }
1117
- interface PerformancesAvailableDaysResponse {
1605
+
1606
+ interface HallFloorOption {
1607
+ id: number | null;
1608
+ name: string;
1609
+ }
1610
+
1611
+ declare enum SelectedDiscountCardType {
1612
+ COUPON = "COUPON",
1613
+ CORPORATE_BOND = "CORPORATE_BOND",
1614
+ GIFT_BOND = "GIFT_BOND",
1615
+ VIP = "VIP",
1616
+ SUBSCRIPTION = "SUBSCRIPTION"
1617
+ }
1618
+
1619
+ interface SelectedDiscountCard {
1620
+ name: string;
1621
+ type: SelectedDiscountCardType;
1622
+ value: number;
1623
+ discountType: 'percentage' | 'fixed';
1624
+ /**
1625
+ * Si el descuento seleccionado exonera la tarifa de servicio (Tarjeta
1626
+ * VIP o Abono, según su `service_fee_exempt`).
1627
+ */
1628
+ serviceFeeExempt?: boolean;
1629
+ }
1630
+
1631
+ /** Forma compacta de un ticket recibida por SSE (ver
1632
+ * SeatAvailabilitySseService) — sin relaciones, solo lo necesario para
1633
+ * repintar el mapa y validar disponibilidad en el cliente. */
1634
+ interface SeatStatusUpdate {
1635
+ id: number;
1636
+ status: PerformanceTicketStatus;
1637
+ room_map_element_id: number;
1638
+ reserved_until: Date | null;
1639
+ }
1640
+ type SeatEventMessage = {
1641
+ type: 'snapshot';
1642
+ performance_id: number;
1643
+ tickets: SeatStatusUpdate[];
1644
+ ts: number;
1645
+ } | {
1646
+ type: 'heartbeat';
1647
+ ts: number;
1648
+ };
1649
+
1650
+ interface AdmissionStatus {
1651
+ active: boolean;
1652
+ position: number | null;
1653
+ }
1654
+ interface AdmissionJoinResponse extends AdmissionStatus {
1655
+ ticket: string;
1656
+ expires_in: number;
1657
+ }
1658
+ type AdmissionEventMessage = ({
1659
+ type: 'status';
1660
+ } & AdmissionStatus & {
1661
+ ts: number;
1662
+ }) | {
1663
+ type: 'heartbeat';
1664
+ ts: number;
1665
+ };
1666
+
1667
+ interface FetchShowsParams extends CommonFetchAllParams {
1668
+ date?: string;
1669
+ sort_by?: 'show.id' | 'show.created_at' | 'show.title' | 'show.slug' | 'show.type_of_costs' | 'show.pulep' | 'show_category.name' | 'show_gender.name';
1670
+ }
1671
+
1672
+ interface ShowResponse {
1673
+ statusCode: number;
1674
+ data: Show;
1675
+ message: string;
1676
+ }
1677
+
1678
+ interface ShowsResponseInterface {
1118
1679
  statusCode: number;
1119
1680
  data: {
1120
- days: PerformanceAvailableDay[];
1681
+ shows: Show[];
1682
+ total: number;
1121
1683
  };
1122
1684
  message: string;
1123
1685
  }
@@ -1155,6 +1717,8 @@ interface DailyPerformanceItem {
1155
1717
  venue: DailyPerformanceVenue;
1156
1718
  price_zones: DailyPerformancePriceZone[];
1157
1719
  zone_price_cheapest: number | null;
1720
+ visibility_type: PerformanceVisibilityType;
1721
+ private_audience_label: string | null;
1158
1722
  }
1159
1723
 
1160
1724
  interface DailyPerformancesResponse {
@@ -1174,14 +1738,26 @@ interface FetchDailyPerformancesParams {
1174
1738
  limit?: number;
1175
1739
  }
1176
1740
 
1741
+ interface FetchProductsParams extends CommonFetchAllParams {
1742
+ name?: string;
1743
+ category_id?: number;
1744
+ tag_id?: number;
1745
+ type_id?: number;
1746
+ min_price?: number;
1747
+ max_price?: number;
1748
+ min_stock?: number;
1749
+ max_stock?: number;
1750
+ sort_by?: 'product.id' | 'product.name' | 'product.price' | 'product.stock_quantity' | 'product.slug' | 'product.sku' | 'product.created_at' | 'category.name' | 'tag.name' | 'type.name';
1751
+ }
1752
+
1177
1753
  interface ProductResponse {
1178
1754
  statusCode: number;
1179
1755
  data: Product;
1180
1756
  message: string;
1181
1757
  }
1182
1758
 
1183
- interface ProductTaxonomy {
1184
- id: string;
1759
+ interface ProductTaxonomy extends Auditable {
1760
+ id: number;
1185
1761
  name: string;
1186
1762
  slug: string;
1187
1763
  selected?: boolean;
@@ -1221,51 +1797,110 @@ interface PriceZonesResponseInterface {
1221
1797
  }
1222
1798
 
1223
1799
  interface FindAllPriceZoneParams {
1224
- roomMapId?: number;
1800
+ room_map_id?: number;
1801
+ show_ids?: number[];
1225
1802
  page?: number;
1226
1803
  search?: string;
1227
1804
  limit?: number;
1228
1805
  }
1229
1806
 
1230
- interface GiftBond {
1807
+ interface CustomerBenefitApplicableShow {
1808
+ id: number;
1809
+ title: string;
1810
+ }
1811
+
1812
+ interface CustomerBenefitVenueChain {
1813
+ price_zone_id: number;
1814
+ price_zone_name: string;
1815
+ room_map_id: number | null;
1816
+ room_map_name: string | null;
1817
+ hall_id: number | null;
1818
+ hall_name: string | null;
1819
+ venue_id: number | null;
1820
+ venue_name: string | null;
1821
+ }
1822
+
1823
+ interface CustomerBenefitSubscription {
1231
1824
  id: number;
1232
1825
  uuid: string;
1826
+ shows_count: number;
1827
+ shows_redeemed: number;
1828
+ shows_remaining: number;
1829
+ valid_until: string;
1830
+ discount_percentage: number | null;
1831
+ service_fee_exempt: boolean;
1832
+ venue: CustomerBenefitVenueChain;
1833
+ applies_to_all_shows: boolean;
1834
+ applicable_shows: CustomerBenefitApplicableShow[];
1835
+ }
1836
+
1837
+ interface VipCategorySnapshot {
1838
+ membership_id: number;
1233
1839
  name: string;
1234
- description?: string;
1235
- status: GiftBondStatus;
1236
- value: number;
1840
+ discount_percentage: number;
1841
+ service_fee_exempt: boolean;
1842
+ applicable_show_ids: number[] | null;
1843
+ excluded_show_ids: number[] | null;
1844
+ duration_days: number;
1845
+ }
1846
+
1847
+ interface VipCard extends Auditable {
1848
+ id: number;
1849
+ uuid: string;
1237
1850
  customer: Customer;
1238
1851
  customer_id: number;
1239
- created_at: Date;
1240
- updated_at: Date;
1241
- created_by: number;
1242
- updated_by: number;
1852
+ membership: {
1853
+ id: number;
1854
+ name: string;
1855
+ } | null;
1856
+ membership_id: number;
1857
+ category_snapshot: VipCategorySnapshot;
1858
+ balance: number;
1859
+ status: VipCardStatus;
1860
+ activated_at: string | null;
1861
+ last_activity_at: string | null;
1862
+ expires_at: string | null;
1863
+ last_low_balance_alert_at: string | null;
1864
+ last_expiry_alert_at: string | null;
1865
+ }
1866
+
1867
+ interface VipTransaction {
1868
+ id: number;
1869
+ uuid: string;
1870
+ vip_card_id: number;
1871
+ type: VipTransactionType;
1872
+ amount: number;
1873
+ balance_before: number;
1874
+ balance_after: number;
1875
+ order: Order | null;
1876
+ order_id: number | null;
1877
+ description: string | null;
1878
+ created_at: string;
1243
1879
  }
1244
1880
 
1245
- interface GiftBondResponse {
1246
- statusCode: number;
1247
- data: GiftBond;
1248
- message: string;
1881
+ interface VipCardResponse {
1882
+ data: VipCard;
1249
1883
  }
1250
-
1251
- interface GiftBondsResponse {
1252
- statusCode: number;
1884
+ interface VipCardsResponse {
1253
1885
  data: {
1254
- gift_bonds: GiftBond[];
1886
+ vip_cards: VipCard[];
1255
1887
  total: number;
1256
1888
  };
1257
- message: string;
1258
1889
  }
1259
-
1260
- interface ValidateGiftBondResponse {
1890
+ interface VipTransactionsResponse {
1261
1891
  data: {
1262
- valid: boolean;
1263
- message: string;
1264
- code: string;
1265
- bond?: GiftBond;
1892
+ transactions: VipTransaction[];
1893
+ total: number;
1266
1894
  };
1267
- statusCode: number;
1268
- message: string;
1895
+ }
1896
+ interface VipOrderResponse {
1897
+ data: Order;
1898
+ }
1899
+
1900
+ interface CustomerBenefits {
1901
+ subscription: CustomerBenefitSubscription | null;
1902
+ vip_card: VipCard | null;
1903
+ gift_bonds: GiftBondPurchase[];
1269
1904
  }
1270
1905
 
1271
1906
  interface CouponResponse {
@@ -1281,22 +1916,224 @@ interface ValidateCouponResponse {
1281
1916
  };
1282
1917
  }
1283
1918
 
1919
+ interface RecentOrder {
1920
+ id: number;
1921
+ customer_name: string;
1922
+ event: string;
1923
+ total: number;
1924
+ status: string;
1925
+ uuid: string;
1926
+ }
1927
+
1928
+ interface RecentRoomMap {
1929
+ id: number;
1930
+ name: string;
1931
+ capacity: number;
1932
+ created_at: Date;
1933
+ updated_at: Date;
1934
+ }
1935
+
1936
+ interface QrTokenData {
1937
+ token: string;
1938
+ expires_at: string;
1939
+ refresh_in: number;
1940
+ }
1941
+
1942
+ interface QrTokenResponse {
1943
+ statusCode: number;
1944
+ data: QrTokenData;
1945
+ message: string;
1946
+ }
1947
+
1948
+ interface Membership extends Auditable {
1949
+ id: number;
1950
+ name: string;
1951
+ description: string;
1952
+ benefits: string[] | null;
1953
+ price: number;
1954
+ duration_days: number;
1955
+ min_recharge: number;
1956
+ status: MembershipStatus;
1957
+ discount_percentage: number;
1958
+ service_fee_exempt: boolean;
1959
+ applicable_show_ids: number[] | null;
1960
+ excluded_show_ids: number[] | null;
1961
+ }
1962
+
1963
+ interface FetchVipCardsParams extends CommonFetchAllParams {
1964
+ status?: VipCardStatus;
1965
+ membership_id?: number;
1966
+ customer_id?: number;
1967
+ sort_by?: 'vip_card.id' | 'vip_card.uuid' | 'vip_card.customer_id' | 'vip_card.membership_id' | 'vip_card.balance' | 'vip_card.status' | 'vip_card.activated_at' | 'vip_card.last_activity_at' | 'vip_card.expires_at' | 'vip_card.last_low_balance_alert_at' | 'vip_card.last_expiry_alert_at' | 'vip_card.created_at' | 'vip_card.updated_at';
1968
+ }
1969
+
1970
+ interface ActivateVipCardParams {
1971
+ customer_id: number;
1972
+ membership_id: number;
1973
+ amount: number;
1974
+ payment_method?: string | null;
1975
+ terms_accepted: boolean;
1976
+ data_processing_accepted: boolean;
1977
+ }
1978
+
1979
+ interface VipRechargeConfirmPayload {
1980
+ amount: number;
1981
+ payment_method: string;
1982
+ terms_accepted: boolean;
1983
+ data_processing_accepted: boolean;
1984
+ }
1985
+
1986
+ declare const DOCUMENT_TYPES_OPTIONS: SelectOption[];
1987
+
1988
+ declare const PAYMENT_METHODS_OPTIONS: SelectOption[];
1989
+ declare const ORDER_STATUS_COLORS: Record<OrderStatus, {
1990
+ text: string;
1991
+ bg: string;
1992
+ }>;
1993
+ declare const ORDER_ITEM_TYPES_COLORS: Record<OrderItemType, {
1994
+ text: string;
1995
+ bg: string;
1996
+ }>;
1997
+ declare const ORDER_DISCOUNT_COLORS: Record<string, {
1998
+ text: string;
1999
+ bg: string;
2000
+ }>;
2001
+ declare const TRANSACTION_STATUS_COLORS: Record<TransactionStatus, {
2002
+ text: string;
2003
+ bg: string;
2004
+ }>;
2005
+
2006
+ declare const PERFORMANCE_TICKET_STATUS_COLORS: Record<PerformanceTicketStatus, {
2007
+ text: string;
2008
+ bg: string;
2009
+ }>;
2010
+ declare const PERFORMANCE_STATUS_COLORS: Record<PerformanceStatus, {
2011
+ text: string;
2012
+ bg: string;
2013
+ }>;
2014
+
2015
+ declare const TICKET_MAP_LAST_TICKETS_LIMIT = 10;
2016
+ declare const TICKET_ELEMENT_TYPES: RoomMapElementType[];
2017
+ declare const DEFAULT_STAGE_CONFIG: {
2018
+ [x: string]: any;
2019
+ };
2020
+ declare const TICKET_STATUS_COLORS: Record<PerformanceTicketStatus, string>;
2021
+ declare const TICKET_STATUS_FILLS: Record<PerformanceTicketStatus, string>;
2022
+ declare const TICKET_STATUS_LABELS: Record<PerformanceTicketStatus, string>;
2023
+ declare const TICKET_MAP_GRID_SIZE = 30;
2024
+ declare const TICKET_MAP_TITLE_HEIGHT = 30;
2025
+ declare const TICKET_MAP_FLOOR_HOVER_OPACITY = 0.25;
2026
+ declare const TICKET_MAP_FLOOR_HOVER_FADE_MS = 150;
2027
+ declare const TICKET_MAP_PRICE_ZONE_FILTER_OPACITY = 0.25;
2028
+
2029
+ interface KonvaShapeConfig {
2030
+ config: ShapeConfig;
2031
+ layer: 'background' | 'elements' | 'foreground' | 'overlay';
2032
+ }
2033
+
2034
+ declare function drawRoundedRect(con: Context, shape: Shape, x: number, y: number, width: number, height: number, cornerRadius: number): void;
2035
+
2036
+ declare const generateExitScene: (con: Context, shape: Shape) => void;
2037
+
2038
+ declare const generateHallwayScene: (con: Context, shape: Shape) => void;
2039
+
2040
+ declare const generateProductionAreaScene: (con: Context, shape: Shape) => void;
2041
+
2042
+ declare const generateSeatBlockScene: (con: Context, shape: Shape, numerationConfig?: {
2043
+ start_row_letter: string;
2044
+ row_order: "TOP_TO_BOTTOM" | "BOTTOM_TO_TOP";
2045
+ start_column_number: number;
2046
+ column_order: "LEFT_TO_RIGHT" | "RIGHT_TO_LEFT";
2047
+ }) => void;
2048
+
2049
+ declare const generateStageScene: (con: Context, shape: Shape) => void;
2050
+
2051
+ declare const generateStairScene: (con: Context, shape: Shape) => void;
2052
+
2053
+ declare const generateTableScene: (con: Context, shape: Shape) => void;
2054
+
2055
+ declare const generateUnavailableSpaceScene: (con: Context, shape: Shape) => void;
2056
+
2057
+ declare const generateZoneScene: (con: Context, shape: Shape) => void;
2058
+
2059
+ declare const KONVA_SHAPE_MAPPINGS: Record<RoomMapElementType, KonvaShapeConfig>;
2060
+
1284
2061
  declare const getCustomerFullname: (customer: Customer) => string;
1285
2062
 
2063
+ declare const getAdminFullname: (admin: Admin) => string;
2064
+
2065
+ type OrderDiscountType = 'coupon' | 'corporate_bond' | 'gift_bond' | 'vip' | 'subscription';
2066
+ interface OrderDiscountInfo {
2067
+ type: OrderDiscountType | null;
2068
+ code: string | null;
2069
+ name: string | null;
2070
+ value: number;
2071
+ discountType: 'percentage' | 'fixed' | null;
2072
+ icon: string;
2073
+ redeemedTicketsCount?: number | null;
2074
+ serviceFeeExempt: boolean;
2075
+ }
2076
+ declare function getOrderDiscount(order: Order): OrderDiscountInfo;
2077
+
2078
+ interface BenefitToastMessage {
2079
+ title: string;
2080
+ description: string;
2081
+ }
2082
+ type CustomerBenefitsPerspective = 'customer' | 'staff';
2083
+ declare function getCustomerBenefitToasts(benefits: CustomerBenefits, perspective?: CustomerBenefitsPerspective): BenefitToastMessage[];
2084
+
1286
2085
  declare function parseJsonToFormDataAdvanced(imageGallery: any[]): FormData;
1287
2086
 
1288
2087
  declare const transformImageToFile: (image: ShowImage | VenueImage) => UploadedFile;
1289
2088
 
2089
+ declare const transformUrlParams: (params: any) => URLSearchParams;
2090
+
1290
2091
  declare const formatCitiesResponseToSelect: (res: CitiesResponse) => {
1291
- value: string;
2092
+ value: number;
1292
2093
  label: string;
1293
2094
  }[];
1294
2095
 
2096
+ declare function tintColor(hex: string, amount?: number): string;
2097
+
2098
+ declare const drawChairIcon: (con: Context, cx: number, cy: number, size: number) => void;
2099
+
2100
+ declare const drawHappyFace: (con: Context, cx: number, cy: number, size: number) => void;
2101
+
2102
+ declare const drawWheelchairIcon: (con: Context, shape: Shape, cx: number, cy: number, size: number, fillColor?: string, strokeColor?: string) => void;
2103
+
2104
+ declare const numberToLetter: (num: number) => string;
2105
+
2106
+ declare const getItemTypeIcon: (ticket: PerformanceTicket) => string;
2107
+
2108
+ declare const generateSeatBlockTicketScene: (con: Context, shape: Shape, numerationConfig?: {
2109
+ start_row_letter: string;
2110
+ row_order: "TOP_TO_BOTTOM" | "BOTTOM_TO_TOP";
2111
+ start_column_number: number;
2112
+ column_order: "LEFT_TO_RIGHT" | "RIGHT_TO_LEFT";
2113
+ }, ticketStatusMap?: Map<string, PerformanceTicketStatus>) => void;
2114
+
2115
+ declare const generateTableTicketScene: (con: Context, shape: Shape, chairTicketStatuses?: PerformanceTicketStatus[], tableSeats?: RoomMapSeatState[][]) => void;
2116
+
2117
+ declare function processElementsToRenderData(elements: RoomMapElementTemplate[], tickets: PerformanceTicket[], priceZones?: {
2118
+ id: number;
2119
+ color: string;
2120
+ }[]): ElementRenderData[];
2121
+ declare function findTicketAtPosition(renderData: ElementRenderData, relX: number, relY: number): PerformanceTicket | null;
2122
+ declare function findElementAtPosition(renderDataList: ElementRenderData[], stageX: number, stageY: number): {
2123
+ element: ElementRenderData;
2124
+ relX: number;
2125
+ relY: number;
2126
+ } | null;
2127
+
2128
+ declare const ticketCanOpenQr: (order: Order, ticket: PerformanceTicket) => boolean;
2129
+
1295
2130
  declare function MinTodayValidator(controlName: string): ValidatorFn;
1296
2131
  declare function EndDateGreaterThanStartValidator(startDateControlName: string, endDateControlName: string): ValidatorFn;
1297
2132
 
1298
2133
  declare function MustMatchValidator(controlName: string, matchingControlName: string): ValidatorFn;
1299
2134
 
2135
+ declare function emailValidator(): ValidatorFn;
2136
+
1300
2137
  declare class ApiService {
1301
2138
  private http;
1302
2139
  private platformId;
@@ -1307,6 +2144,7 @@ declare class ApiService {
1307
2144
  private validateContentType;
1308
2145
  private handleError;
1309
2146
  get<T>(path: string): Observable<T>;
2147
+ getBlob(path: string): Observable<Blob>;
1310
2148
  post<T>(path: string, body: any): Observable<T>;
1311
2149
  patch<T>(path: string, body: any): Observable<T>;
1312
2150
  put<T>(path: string, body: any): Observable<T>;
@@ -1315,23 +2153,58 @@ declare class ApiService {
1315
2153
  static ɵprov: i0.ɵɵInjectableDeclaration<ApiService>;
1316
2154
  }
1317
2155
 
2156
+ /**
2157
+ * Shared open/close state for the mobile off-canvas sidebar.
2158
+ * On viewports >= lg the sidebar is always visible (see sidebar-menu.component.html),
2159
+ * so this state only has a visual effect below the `lg` breakpoint.
2160
+ */
2161
+ declare class SidebarStateService {
2162
+ isMobileOpen: WritableSignal<boolean>;
2163
+ open(): void;
2164
+ close(): void;
2165
+ toggle(): void;
2166
+ static ɵfac: i0.ɵɵFactoryDeclaration<SidebarStateService, never>;
2167
+ static ɵprov: i0.ɵɵInjectableDeclaration<SidebarStateService>;
2168
+ }
2169
+
2170
+ /**
2171
+ * Deshabilita el zoom del NAVEGADOR (no el zoom interno del mapa de
2172
+ * asientos, que sigue funcionando igual). Se instancia una sola vez —
2173
+ * inyectarlo en el componente raíz de la app alcanza, porque es
2174
+ * `providedIn: 'root'` — y cubre las cuatro formas en que un navegador
2175
+ * deja hacer zoom:
2176
+ *
2177
+ * - Ctrl/Cmd + rueda del mouse (desktop, todos los navegadores).
2178
+ * - Ctrl/Cmd + "+"/"-"/"0" por teclado (desktop, todos los navegadores).
2179
+ * - Gesto de pellizco en trackpad en Safari, que no dispara `wheel` sino
2180
+ * sus propios eventos `gesture*` (no estándar, solo Safari/WebKit).
2181
+ * - Pellizco con dos dedos en pantallas táctiles, como respaldo además
2182
+ * del `user-scalable=no` del viewport (que ya lo bloquea en la mayoría
2183
+ * de los navegadores, pero no en todos de forma consistente).
2184
+ *
2185
+ * No toca el zoom interno de `TicketMapZoomService` (ese es zoom propio de
2186
+ * la app sobre el SVG del mapa, con sus propios botones +/-, y debe seguir
2187
+ * funcionando tal cual).
2188
+ */
2189
+ declare class BrowserZoomLockService {
2190
+ constructor(platformId: Object);
2191
+ private onWheel;
2192
+ private onKeydown;
2193
+ private onTouchMove;
2194
+ private onGesture;
2195
+ static ɵfac: i0.ɵɵFactoryDeclaration<BrowserZoomLockService, never>;
2196
+ static ɵprov: i0.ɵɵInjectableDeclaration<BrowserZoomLockService>;
2197
+ }
2198
+
1318
2199
  type ToastType = 'success' | 'error' | 'info';
1319
2200
  declare class ToastService {
1320
- show(message: string, type?: ToastType): void;
2201
+ private platformId;
2202
+ constructor(platformId: Object);
2203
+ show(message: string, type?: ToastType, description?: string): void;
1321
2204
  static ɵfac: i0.ɵɵFactoryDeclaration<ToastService, never>;
1322
2205
  static ɵprov: i0.ɵɵInjectableDeclaration<ToastService>;
1323
2206
  }
1324
2207
 
1325
- declare class LoadingModalService {
1326
- title: WritableSignal<string>;
1327
- isOpen: WritableSignal<boolean>;
1328
- get modalIsOpen(): WritableSignal<boolean>;
1329
- open(title?: string): void;
1330
- close(): void;
1331
- static ɵfac: i0.ɵɵFactoryDeclaration<LoadingModalService, never>;
1332
- static ɵprov: i0.ɵɵInjectableDeclaration<LoadingModalService>;
1333
- }
1334
-
1335
2208
  declare class DeleteConfirmationService {
1336
2209
  title: WritableSignal<string>;
1337
2210
  resourceName: WritableSignal<string>;
@@ -1372,12 +2245,19 @@ declare class DateService {
1372
2245
  static ɵprov: i0.ɵɵInjectableDeclaration<DateService>;
1373
2246
  }
1374
2247
 
2248
+ interface AdminResponse {
2249
+ statusCode: number;
2250
+ data: Admin;
2251
+ message: string;
2252
+ }
2253
+
1375
2254
  declare class AdminService {
1376
2255
  private apiService;
1377
2256
  constructor(apiService: ApiService);
1378
- fetchAdmins(page?: number, search?: string, limit?: number): Observable<AdminsResponse>;
2257
+ fetchAdmins(params: FetchAdminsParams): Observable<AdminsResponse>;
2258
+ fetchOneById(id: number): Observable<AdminResponse>;
1379
2259
  deleteOne(id: number): Observable<any>;
1380
- createOne(data: any): Observable<any>;
2260
+ createOne(data: any): Observable<AdminResponse>;
1381
2261
  updateOne(id: number, data: any): Observable<any>;
1382
2262
  static ɵfac: i0.ɵɵFactoryDeclaration<AdminService, never>;
1383
2263
  static ɵprov: i0.ɵɵInjectableDeclaration<AdminService>;
@@ -1386,7 +2266,7 @@ declare class AdminService {
1386
2266
  declare class CitiesService {
1387
2267
  private apiService;
1388
2268
  constructor(apiService: ApiService);
1389
- fetchCities({ page, search, stateId }: FetchCitiesParams): Observable<CitiesResponse>;
2269
+ fetchCities(params: FetchCitiesParams): Observable<CitiesResponse>;
1390
2270
  createOne(data: City): Observable<CityResponse>;
1391
2271
  updateOne(id: number, data: City): Observable<CityResponse>;
1392
2272
  deleteOne(id: number): Observable<any>;
@@ -1397,7 +2277,7 @@ declare class CitiesService {
1397
2277
  declare class CountryService {
1398
2278
  private apiService;
1399
2279
  constructor(apiService: ApiService);
1400
- fetchCountries(page?: number, search?: string): Observable<CountriesResponse>;
2280
+ fetchCountries(params: FetchCountriesParams): Observable<CountriesResponse>;
1401
2281
  createOne(data: Country): Observable<CountryResponse>;
1402
2282
  updateOne(id: number, data: Country): Observable<CountryResponse>;
1403
2283
  deleteOne(id: number): Observable<any>;
@@ -1408,7 +2288,7 @@ declare class CountryService {
1408
2288
  declare class StatesService {
1409
2289
  private apiService;
1410
2290
  constructor(apiService: ApiService);
1411
- fetchStates(page?: number, search?: string, countryId?: number): Observable<StatesResponse>;
2291
+ fetchStates(params: FetchStatesParams): Observable<StatesResponse>;
1412
2292
  fetchStatesByCountryId(countryId: number): Observable<StatesResponse>;
1413
2293
  createOne(data: State): Observable<StateResponse>;
1414
2294
  updateOne(id: number, data: State): Observable<StateResponse>;
@@ -1422,23 +2302,36 @@ declare class PerformanceService {
1422
2302
  private performancesSubject;
1423
2303
  performances$: Observable<Performance[]>;
1424
2304
  constructor(apiService: ApiService);
1425
- fetchPerformances(showId?: number, search?: string): Observable<PerformancesResponseInterface>;
1426
- fetchDailyPerformances({ show_id, search, limit, date, }: FetchDailyPerformancesParams): Observable<DailyPerformancesResponse>;
2305
+ fetchPerformances({ showId, roomMapId, hallId, search, page, limit, }: FindAllPerformancesParams): Observable<PerformancesResponseInterface>;
2306
+ fetchDailyPerformances({ show_id, search, limit, date }: FetchDailyPerformancesParams, isAdmin?: boolean): Observable<DailyPerformancesResponse>;
1427
2307
  loadPerformances({ showId, search }?: {
1428
2308
  showId?: number;
1429
2309
  search?: string;
1430
2310
  }): void;
1431
2311
  getCurrentPerformances(): Performance[];
1432
2312
  fetchOneById(id: number): Observable<PerformanceResponse>;
1433
- fetchOneBookingData(id: number): Observable<PerformanceBookingDataResponse>;
2313
+ fetchOneBookingData(id: number, isAdmin?: boolean): Observable<PerformanceBookingDataResponse>;
1434
2314
  fetchAvailableDays(params?: {
1435
2315
  show_id?: number;
1436
- }): Observable<PerformancesAvailableDaysResponse>;
2316
+ }, isAdmin?: boolean): Observable<PerformancesAvailableDaysResponse>;
1437
2317
  createOne(data: Performance): Observable<any>;
1438
2318
  createMany(data: Partial<Performance>[]): Observable<any>;
1439
2319
  updateOne(id: number, data: any): Observable<PerformanceResponse>;
1440
2320
  deleteOne(id: number): Observable<any>;
1441
2321
  deleteMany(ids: number[]): Observable<any>;
2322
+ fetchPedagogicPerformances(params?: {
2323
+ page?: number;
2324
+ limit?: number;
2325
+ }): Observable<PerformancesResponseInterface>;
2326
+ fetchPedagogicAvailability(id: number): Observable<PedagogicAvailabilityResponse>;
2327
+ createPedagogicOrder(id: number, payload: CreatePedagogicOrderPayload): Observable<any>;
2328
+ updatePublishedBulk(ids: number[], published: boolean): Observable<{
2329
+ statusCode: number;
2330
+ data: {
2331
+ updated: number[];
2332
+ };
2333
+ message: string;
2334
+ }>;
1442
2335
  cancelPerformance(id: number, notifyUsers: boolean): Observable<any>;
1443
2336
  publishInvenotry(id: number): Observable<any>;
1444
2337
  static ɵfac: i0.ɵɵFactoryDeclaration<PerformanceService, never>;
@@ -1467,7 +2360,7 @@ declare class ShowService {
1467
2360
  constructor(apiService: ApiService);
1468
2361
  loadShows({ page, search }?: FetchShowsParams): void;
1469
2362
  getCurrentShows(): Show[];
1470
- fetchShows({ limit, page, search }: FetchShowsParams): Observable<ShowsResponseInterface>;
2363
+ fetchShows(params: FetchShowsParams): Observable<ShowsResponseInterface>;
1471
2364
  fetchAvailableShows({ date, limit, page, search, }: FetchShowsParams): Observable<ShowsResponseInterface>;
1472
2365
  fetchOneById(id: number): Observable<ShowResponse>;
1473
2366
  createOne(data: Show): Observable<ShowResponse>;
@@ -1488,7 +2381,7 @@ declare class CustomerService {
1488
2381
  private apiService;
1489
2382
  constructor(apiService: ApiService);
1490
2383
  createOne(data: Customer): Observable<CustomerResponse>;
1491
- fetchCustomers(page: number, search: string, limit?: number): Observable<CustomersResponse>;
2384
+ fetchCustomers(params: FetchCustomersParams): Observable<CustomersResponse>;
1492
2385
  fetchOneById(id: number): Observable<CustomerResponse>;
1493
2386
  updateOne(id: number, data: any): Observable<CustomerResponse>;
1494
2387
  deleteOne(id: number): Observable<any>;
@@ -1501,8 +2394,8 @@ declare class PriceZoneService {
1501
2394
  private priceZonesSubject;
1502
2395
  priceZones$: Observable<PriceZone[]>;
1503
2396
  constructor(apiService: ApiService);
1504
- fetchPriceZones({ roomMapId, page, search, limit, }?: FindAllPriceZoneParams): Observable<PriceZonesResponseInterface>;
1505
- loadPriceZones({ roomMapId, page, search, limit }?: FindAllPriceZoneParams): void;
2397
+ fetchPriceZones(params?: FindAllPriceZoneParams): Observable<PriceZonesResponseInterface>;
2398
+ loadPriceZones(params?: FindAllPriceZoneParams): void;
1506
2399
  getCurrentPriceZones(): PriceZone[];
1507
2400
  fetchOneById(id: number): Observable<PriceZoneResponse>;
1508
2401
  createOne(data: PriceZone): Observable<any>;
@@ -1543,7 +2436,7 @@ declare class PriceZoneFormModalService {
1543
2436
  declare class ProductCategoryService {
1544
2437
  private apiService;
1545
2438
  constructor(apiService: ApiService);
1546
- fetchCategories({ page, search, limit, }: FetchProductCategoriesParams): Observable<ProductCategoriesResponse>;
2439
+ fetchCategories(params: FetchProductCategoriesParams): Observable<ProductCategoriesResponse>;
1547
2440
  fetchOneById(id: number): Observable<ProductCategoryResponse>;
1548
2441
  createOne(data: ProductCategory): Observable<any>;
1549
2442
  updateOne(id: number, data: ProductCategory): Observable<ProductCategoryResponse>;
@@ -1555,7 +2448,7 @@ declare class ProductCategoryService {
1555
2448
  declare class ProductTagService {
1556
2449
  private apiService;
1557
2450
  constructor(apiService: ApiService);
1558
- fetchTags({ page, search, limit }: FetchProductTagsParams): Observable<ProductTagsResponse>;
2451
+ fetchTags(params: FetchProductTagsParams): Observable<ProductTagsResponse>;
1559
2452
  fetchOneById(id: number): Observable<ProductTagResponse>;
1560
2453
  createOne(data: ProductTag): Observable<any>;
1561
2454
  updateOne(id: number, data: ProductTag): Observable<ProductTagResponse>;
@@ -1567,7 +2460,7 @@ declare class ProductTagService {
1567
2460
  declare class ProductTypeService {
1568
2461
  private apiService;
1569
2462
  constructor(apiService: ApiService);
1570
- fetchTypes({ page, search, limit }: FetchProductTypesParams): Observable<ProductTypesResponse>;
2463
+ fetchTypes(params: FetchProductTypesParams): Observable<ProductTypesResponse>;
1571
2464
  fetchOneById(id: number): Observable<ProductTypeResponse>;
1572
2465
  createOne(data: ProductType): Observable<any>;
1573
2466
  updateOne(id: number, data: ProductType): Observable<ProductTypeResponse>;
@@ -1576,18 +2469,12 @@ declare class ProductTypeService {
1576
2469
  static ɵprov: i0.ɵɵInjectableDeclaration<ProductTypeService>;
1577
2470
  }
1578
2471
 
1579
- interface FetchProductsParams {
1580
- page?: number;
1581
- limit?: number;
1582
- search?: string;
1583
- }
1584
-
1585
2472
  declare class ProductService {
1586
2473
  private apiService;
1587
2474
  private productsSubject;
1588
2475
  products$: Observable<Product[]>;
1589
2476
  constructor(apiService: ApiService);
1590
- fetchProducts({ page, search, limit, }: FetchProductsParams): Observable<ProductsResponseInterface>;
2477
+ fetchProducts(params: FetchProductsParams): Observable<ProductsResponseInterface>;
1591
2478
  loadProducts(params: FetchProductsParams): void;
1592
2479
  getCurrentProducts(): Product[];
1593
2480
  fetchOneById(id: number): Observable<ProductResponse>;
@@ -1605,6 +2492,514 @@ declare class ProductService {
1605
2492
  static ɵprov: i0.ɵɵInjectableDeclaration<ProductService>;
1606
2493
  }
1607
2494
 
2495
+ declare class BaseModalService {
2496
+ readonly isOpen: WritableSignal<boolean>;
2497
+ get modalIsOpen(): WritableSignal<boolean>;
2498
+ open(): void;
2499
+ close(): void;
2500
+ }
2501
+
2502
+ declare class FeedbackModalService {
2503
+ private _modals;
2504
+ readonly modals: i0.Signal<FeedbackModalElement[]>;
2505
+ addModal(modal: FeedbackModalElement): void;
2506
+ removeModal(id: string): void;
2507
+ removeAllModals(): void;
2508
+ static ɵfac: i0.ɵɵFactoryDeclaration<FeedbackModalService, never>;
2509
+ static ɵprov: i0.ɵɵInjectableDeclaration<FeedbackModalService>;
2510
+ }
2511
+
2512
+ /**
2513
+ * Tope de entradas por selección/compra. Por defecto es `null` (sin límite),
2514
+ * que es lo que necesita el backoffice (admin puede seleccionar todo).
2515
+ * El ecommerce, que sí debe limitar, llama a `load()` una vez al iniciar la
2516
+ * app para traer el valor configurado en el formulario de personalización.
2517
+ */
2518
+ declare class PurchaseLimitService {
2519
+ private apiService;
2520
+ private _maxTicketsPerSelection;
2521
+ readonly maxTicketsPerSelection: i0.Signal<number | null>;
2522
+ constructor(apiService: ApiService);
2523
+ setMaxTicketsPerSelection(max: number | null): void;
2524
+ load(): Observable<number | null>;
2525
+ static ɵfac: i0.ɵɵFactoryDeclaration<PurchaseLimitService, never>;
2526
+ static ɵprov: i0.ɵɵInjectableDeclaration<PurchaseLimitService>;
2527
+ }
2528
+
2529
+ declare class OrderTransactionDetailsModalService {
2530
+ readonly isOpen: WritableSignal<boolean>;
2531
+ transaction: WritableSignal<Transaction | null>;
2532
+ get modalIsOpen(): WritableSignal<boolean>;
2533
+ open(transaction: Transaction): void;
2534
+ close(): void;
2535
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrderTransactionDetailsModalService, never>;
2536
+ static ɵprov: i0.ɵɵInjectableDeclaration<OrderTransactionDetailsModalService>;
2537
+ }
2538
+
2539
+ declare class PerformanceBookingDataService {
2540
+ private _show;
2541
+ private _performance;
2542
+ private _roomMap;
2543
+ private _hallFloors;
2544
+ private _selectedHallFloor;
2545
+ private _allRenderData;
2546
+ private _visibleFloorIds;
2547
+ private _hoveredFloorId;
2548
+ private _filteredPriceZoneIds;
2549
+ private _stageConfig;
2550
+ private _lastTickets;
2551
+ readonly show: i0.Signal<Show | null>;
2552
+ readonly hallFloors: i0.Signal<HallFloor[]>;
2553
+ readonly selectedHallFloor: i0.Signal<HallFloor | null>;
2554
+ readonly performance: i0.Signal<Performance | null>;
2555
+ readonly stageConfig: i0.Signal<{
2556
+ [x: string]: any;
2557
+ }>;
2558
+ readonly roomMap: i0.Signal<RoomMap | null>;
2559
+ readonly visibleFloorIds: i0.Signal<Set<number>>;
2560
+ readonly hoveredFloorId: i0.Signal<number | null>;
2561
+ readonly filteredPriceZoneIds: i0.Signal<Set<number>>;
2562
+ readonly priceZoneTicketCounts: i0.Signal<Map<number, {
2563
+ available: number;
2564
+ total: number;
2565
+ }>>;
2566
+ readonly availableFloors: i0.Signal<HallFloor[]>;
2567
+ readonly floorZOrder: i0.Signal<number[]>;
2568
+ readonly renderData: i0.Signal<ElementRenderData[]>;
2569
+ setPerformanceBookingData({ data }: PerformanceBookingDataResponse): void;
2570
+ /** Aplica actualizaciones de estado de tickets recibidas por SSE (ver
2571
+ * SeatAvailabilitySseService) sin volver a pedir todo el booking-data:
2572
+ * parcha `_lastTickets` y vuelve a calcular el render data del mapa con
2573
+ * los mismos `elements`/`price_zones` (que no cambian en vivo). */
2574
+ applySeatStatusUpdates(updates: SeatStatusUpdate[]): void;
2575
+ setRoomMap(roomMap: RoomMap | null): void;
2576
+ setAllRenderData(data: ElementRenderData[]): void;
2577
+ setPerformance(performance: Performance | null): void;
2578
+ setShow(show: Show | null): void;
2579
+ setHallFloors(data: HallFloor[]): void;
2580
+ setSelectedHallFloor(id: number): void;
2581
+ setHoveredFloor(floorId: number | null): void;
2582
+ togglePriceZoneFilter(zoneId: number): void;
2583
+ clearPriceZoneFilter(): void;
2584
+ isPriceZoneFiltered(zoneId: number): boolean;
2585
+ toggleFloorVisibility(floorId: number): void;
2586
+ isFloorVisible(floorId: number): boolean;
2587
+ updateStageConfig(data: {
2588
+ [x: string]: any;
2589
+ }): void;
2590
+ static ɵfac: i0.ɵɵFactoryDeclaration<PerformanceBookingDataService, never>;
2591
+ static ɵprov: i0.ɵɵInjectableDeclaration<PerformanceBookingDataService>;
2592
+ }
2593
+
2594
+ declare class TicketSelectionDetailsService {
2595
+ private _customerEmail;
2596
+ private _customerId;
2597
+ private _paymentMethod;
2598
+ private _billingInformation;
2599
+ readonly customerEmail: i0.Signal<string | null>;
2600
+ readonly customerId: i0.Signal<number | null>;
2601
+ readonly paymentMethod: i0.Signal<string | null>;
2602
+ readonly billingInformation: i0.Signal<Customer | null>;
2603
+ setCustomerEmail(email: string | null): void;
2604
+ setCustomerId(id: number | null): void;
2605
+ setPaymentMethod(method: string | null): void;
2606
+ setBillingInformation(values: Customer): void;
2607
+ clearSelection(): void;
2608
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketSelectionDetailsService, never>;
2609
+ static ɵprov: i0.ɵɵInjectableDeclaration<TicketSelectionDetailsService>;
2610
+ }
2611
+
2612
+ declare class TicketSelectionDiscountService {
2613
+ private _coupon;
2614
+ private _corporateBond;
2615
+ private _corporateBondCode;
2616
+ private _giftBond;
2617
+ private _giftBondCode;
2618
+ private _vipCard;
2619
+ /**
2620
+ * Abono (subscription) como metodo de pago. Solo se usa el campo
2621
+ * `service_fee_exempt`: el valor del descuento es siempre 100% (una obra
2622
+ * del abono cubre el ticket por completo), igual que un cupon del 100%.
2623
+ */
2624
+ private _subscription;
2625
+ readonly coupon: Signal<Coupon | null>;
2626
+ readonly corporateBond: Signal<CorporateBond | null>;
2627
+ readonly corporateBondCode: Signal<string | null>;
2628
+ readonly giftBond: Signal<GiftBondPurchase | null>;
2629
+ readonly giftBondCode: Signal<string | null>;
2630
+ readonly vipCard: Signal<VipCard | null>;
2631
+ readonly subscription: Signal<{
2632
+ service_fee_exempt: boolean;
2633
+ } | null>;
2634
+ readonly selectedDiscount: Signal<SelectedDiscountCard | null>;
2635
+ readonly selectedDiscountType: Signal<SelectedDiscountCardType | undefined>;
2636
+ readonly selectedDiscountValue: Signal<number | undefined>;
2637
+ setCoupon(coupon: Coupon | null): void;
2638
+ setCorporateBond(corporateBond: CorporateBond | null): void;
2639
+ setCorporateBondCode(code: string | null): void;
2640
+ setGiftBond(giftBond: GiftBondPurchase | null): void;
2641
+ setGiftBondCode(code: string | null): void;
2642
+ /**
2643
+ * Saldo VIP como método de pago (VIP-HU-04). Solo debe contar como
2644
+ * descuento "seleccionado" mientras el cliente efectivamente eligió
2645
+ * pagar con su saldo VIP, no solo por tener una tarjeta activa —
2646
+ * llamar con `null` en cuanto deje de ser el método de pago elegido.
2647
+ */
2648
+ setVipCard(card: VipCard | null): void;
2649
+ /**
2650
+ * Abono como metodo de pago (paralelo a `setVipCard`). Llamar con `null`
2651
+ * en cuanto deje de ser el metodo de pago elegido.
2652
+ */
2653
+ setSubscription(subscription: {
2654
+ service_fee_exempt: boolean;
2655
+ } | null): void;
2656
+ clearSelection(): void;
2657
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketSelectionDiscountService, never>;
2658
+ static ɵprov: i0.ɵɵInjectableDeclaration<TicketSelectionDiscountService>;
2659
+ }
2660
+
2661
+ declare class TicketSelectionTotalsService {
2662
+ private bookingDataService;
2663
+ private selectionService;
2664
+ private selectionDiscountService;
2665
+ readonly selectedProductEntries: i0.Signal<{
2666
+ id: number;
2667
+ quantity: number;
2668
+ }[]>;
2669
+ readonly selectedProductCount: i0.Signal<number>;
2670
+ readonly productSubtotal: i0.Signal<number>;
2671
+ readonly ticketSubtotal: i0.Signal<number>;
2672
+ /**
2673
+ * Tarifa de servicio del Show cobrada una vez por cada boleta seleccionada
2674
+ * (no un monto fijo por orden), igual que el backend
2675
+ * (`create-pending-order.service.ts`): 2 boletas x $10.000 = $20.000.
2676
+ * Ya refleja la exoneración de VIP/Abono (retorna 0 en ese caso).
2677
+ */
2678
+ readonly serviceFee: i0.Signal<number>;
2679
+ /**
2680
+ * Valor "crudo" de la tarifa de servicio (sin exonerar), para poder
2681
+ * mostrar explícitamente en la UI el "antes" cuando una membresía o
2682
+ * abono la exonera (en vez de perder el dato mostrando solo $0).
2683
+ */
2684
+ readonly rawServiceFee: i0.Signal<number>;
2685
+ readonly isServiceFeeExempt: i0.Signal<boolean>;
2686
+ /**
2687
+ * El descuento (cupón, bono corporativo, bono de regalo, VIP, abono) se
2688
+ * calcula UNICAMENTE sobre el valor de las boletas: los productos nunca
2689
+ * reciben descuento (ver orders-discounts-applications.md).
2690
+ */
2691
+ readonly discountAmount: i0.Signal<number | null>;
2692
+ subtotalValue(): number;
2693
+ totalValue(): number;
2694
+ totalDiscounted(): number | null;
2695
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketSelectionTotalsService, never>;
2696
+ static ɵprov: i0.ɵɵInjectableDeclaration<TicketSelectionTotalsService>;
2697
+ }
2698
+
2699
+ declare class TicketSelectionService {
2700
+ private bookingDataService;
2701
+ private feedbackModalService;
2702
+ private purchaseLimitService;
2703
+ private selectionDetailsService;
2704
+ private selectionDiscountService;
2705
+ private _zoneQuantities;
2706
+ private _allTickets;
2707
+ private _selectedTickets;
2708
+ private _selectedBlockedTickets;
2709
+ private _products;
2710
+ private _productQuantities;
2711
+ readonly selectedTickets: i0.Signal<PerformanceTicket[]>;
2712
+ readonly selectedBlockedTickets: i0.Signal<PerformanceTicket[]>;
2713
+ readonly selectedCount: i0.Signal<number>;
2714
+ readonly blockedSelectedCount: i0.Signal<number>;
2715
+ readonly selectedTicketIds: i0.Signal<Set<PerformanceTicket>>;
2716
+ readonly selectedBlockedTicketIds: i0.Signal<number[]>;
2717
+ readonly selectedTicketIdList: i0.Signal<number[]>;
2718
+ readonly summaryItems: i0.Signal<PerformanceTicket[]>;
2719
+ readonly products: i0.Signal<Product[]>;
2720
+ readonly productQuantities: i0.Signal<Map<number, number>>;
2721
+ readonly selectedProductEntries: i0.Signal<{
2722
+ id: number;
2723
+ quantity: number;
2724
+ }[]>;
2725
+ readonly selectedProductCount: i0.Signal<number>;
2726
+ readonly serviceFee: i0.Signal<number>;
2727
+ setTickets(tickets: PerformanceTicket[]): void;
2728
+ /** Aplica actualizaciones de estado recibidas por SSE (ver
2729
+ * SeatAvailabilitySseService). Muta los tickets existentes EN VEZ de
2730
+ * reemplazarlos por objetos nuevos: `_selectedTickets`/
2731
+ * `_selectedBlockedTickets` son Sets de referencias de objeto, no de ids,
2732
+ * así que reemplazar el array rompería la selección activa del usuario. */
2733
+ applySeatStatusUpdates(updates: SeatStatusUpdate[]): void;
2734
+ setProducts(products: Product[]): void;
2735
+ updateProductQuantity(productId: number, delta: number): void;
2736
+ getProductQuantity(productId: number): number;
2737
+ private getListByStatus;
2738
+ setSelectedTickets(tickets: PerformanceTicket[]): void;
2739
+ toggle(ticket: PerformanceTicket): void;
2740
+ select(ticket: PerformanceTicket): void;
2741
+ deselect(ticket: PerformanceTicket): void;
2742
+ clearBlockedSelection(): void;
2743
+ clearSelection(): void;
2744
+ isSelected(ticket: PerformanceTicket): boolean;
2745
+ initZoneQuantity(elementId: number, maxCapacity: number): void;
2746
+ getZoneMax(elementId: number): number;
2747
+ getZoneSelectedCount(elementId: number): number;
2748
+ setZoneQuantity(elementId: number, target: number): void;
2749
+ adjustZoneQuantity(elementId: number, delta: number): void;
2750
+ private remainingSelectionAllowance;
2751
+ private canAddMoreToSelection;
2752
+ private notifyPurchaseLimitReached;
2753
+ getZoneTickets(elementId: number): PerformanceTicket[];
2754
+ buildTooltipData(ticket: PerformanceTicket, elementName: string, seatLabel: string | null, x: number, y: number): TicketMapTooltipData;
2755
+ buildReservePerformanceDto(paymentMethod?: string, termsAccepted?: boolean, dataProcessingAccepted?: boolean): ReservePerformanceDto;
2756
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketSelectionService, never>;
2757
+ static ɵprov: i0.ɵɵInjectableDeclaration<TicketSelectionService>;
2758
+ }
2759
+
2760
+ declare class TicketMapZoomService {
2761
+ readonly currentZoom: i0.WritableSignal<number>;
2762
+ private stage?;
2763
+ private bookingDataService;
2764
+ private readonly defaultConfig;
2765
+ constructor();
2766
+ /**
2767
+ * Set the Konva stage instance
2768
+ */
2769
+ setStage(stage: Stage): void;
2770
+ /**
2771
+ * Zoom in by one step
2772
+ */
2773
+ zoomIn(): void;
2774
+ /**
2775
+ * Zoom out by one step
2776
+ */
2777
+ zoomOut(): void;
2778
+ /**
2779
+ * Reset zoom to 100%
2780
+ */
2781
+ resetZoom(): void;
2782
+ /**
2783
+ * Get current zoom as percentage string
2784
+ */
2785
+ getZoomPercentage(): string;
2786
+ /**
2787
+ * Get current zoom value
2788
+ */
2789
+ getCurrentZoom(): number;
2790
+ /**
2791
+ * Apply zoom with center point
2792
+ */
2793
+ private applyZoom;
2794
+ /**
2795
+ * Apply zoom scale with specific center point
2796
+ */
2797
+ private applyZoomScale;
2798
+ /**
2799
+ * Handle mouse wheel zoom toward the cursor position
2800
+ */
2801
+ handleWheelZoom(deltaY: number): void;
2802
+ /**
2803
+ * Fit the content bounds to fill the stage container
2804
+ */
2805
+ fitToContainer(padding?: number): void;
2806
+ /**
2807
+ * Get current stage position
2808
+ */
2809
+ getStagePosition(): {
2810
+ x: number;
2811
+ y: number;
2812
+ };
2813
+ /**
2814
+ * Set stage position (useful for programmatic panning)
2815
+ */
2816
+ setStagePosition(position: {
2817
+ x: number;
2818
+ y: number;
2819
+ }): void;
2820
+ /**
2821
+ * Fit the stage content bounds to the container, centering and scaling
2822
+ * to show the full content with optional padding.
2823
+ */
2824
+ fitToBounds(contentBounds: {
2825
+ x: number;
2826
+ y: number;
2827
+ width: number;
2828
+ height: number;
2829
+ }, containerWidth: number, containerHeight: number, padding?: number): void;
2830
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketMapZoomService, never>;
2831
+ static ɵprov: i0.ɵɵInjectableDeclaration<TicketMapZoomService>;
2832
+ }
2833
+
2834
+ declare class ConfirmationOrderModalService extends BaseModalService {
2835
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmationOrderModalService, never>;
2836
+ static ɵprov: i0.ɵɵInjectableDeclaration<ConfirmationOrderModalService>;
2837
+ }
2838
+
2839
+ /**
2840
+ * Transporte SSE del estado de asientos en vivo. Es el único punto de la
2841
+ * librería que sabe de EventSource/HTTP para esto — aplica cada snapshot
2842
+ * recibido sobre PerformanceBookingDataService (repinta el mapa) y
2843
+ * TicketSelectionService (mantiene la disponibilidad al día para
2844
+ * validaciones de zona/límite de compra).
2845
+ *
2846
+ * Cada intento de reconexión pide un ticket NUEVO (el anterior es de un
2847
+ * solo uso y expira a los ~30s), con backoff exponencial acotado.
2848
+ */
2849
+ declare class SeatAvailabilitySseService {
2850
+ private apiService;
2851
+ private bookingDataService;
2852
+ private ticketSelectionService;
2853
+ private platformId;
2854
+ private config;
2855
+ private eventSource;
2856
+ private reconnectTimer;
2857
+ private reconnectAttempts;
2858
+ private currentPerformanceId;
2859
+ private currentIsAdmin;
2860
+ private stopped;
2861
+ constructor(apiService: ApiService, bookingDataService: PerformanceBookingDataService, ticketSelectionService: TicketSelectionService, platformId: Object, config: TickeraComponentsConfig);
2862
+ connect(performanceId: number, opts?: {
2863
+ isAdmin?: boolean;
2864
+ }): void;
2865
+ disconnect(): void;
2866
+ private openConnection;
2867
+ private startStream;
2868
+ private scheduleReconnect;
2869
+ static ɵfac: i0.ɵɵFactoryDeclaration<SeatAvailabilitySseService, never>;
2870
+ static ɵprov: i0.ɵɵInjectableDeclaration<SeatAvailabilitySseService>;
2871
+ }
2872
+
2873
+ /**
2874
+ * Cliente de la cola adaptativa (fase 4). No decide CUÁNDO se activa la
2875
+ * cola — eso es enteramente responsabilidad del backend (AdmissionGuard +
2876
+ * LoadBasedAdmissionPolicy) — este servicio solo sabe reaccionar al 429
2877
+ * `ADMISSION_QUEUE_REQUIRED` que ese guard puede devolver en
2878
+ * /carts/reserve y /orders/checkout.
2879
+ *
2880
+ * Uso típico en el punto de llamada (ver reservation-confirmation y
2881
+ * checkout-form): reintentar la request original dentro de un catchError:
2882
+ *
2883
+ * this.cartService.reserve(dto).pipe(
2884
+ * catchError((err) => {
2885
+ * if (!this.admissionQueueService.isAdmissionRequired(err)) return throwError(() => err);
2886
+ * const performanceId = this.admissionQueueService.getPerformanceId(err)!;
2887
+ * return this.admissionQueueService.waitForAdmission(performanceId).pipe(
2888
+ * switchMap(() => this.cartService.reserve(dto)),
2889
+ * );
2890
+ * }),
2891
+ * )
2892
+ *
2893
+ * Reutiliza el mismo transporte SSE con ticket de un solo uso de la fase 3
2894
+ * (ver SeatAvailabilitySseService) — acá el ticket llega directo en la
2895
+ * respuesta de /join, así que no hace falta un endpoint de ticket aparte;
2896
+ * cada reintento de conexión vuelve a hacer /join (el ticket anterior es
2897
+ * de un solo uso y expira a los ~30s).
2898
+ */
2899
+ declare class AdmissionQueueService {
2900
+ private apiService;
2901
+ private feedbackModalService;
2902
+ private platformId;
2903
+ private config;
2904
+ constructor(apiService: ApiService, feedbackModalService: FeedbackModalService, platformId: Object, config: TickeraComponentsConfig);
2905
+ /** True si el error es el 429 específico de "alta demanda, únete a la fila". */
2906
+ isAdmissionRequired(error: unknown): error is HttpErrorResponse;
2907
+ getPerformanceId(error: HttpErrorResponse): number | null;
2908
+ /**
2909
+ * Se une a la fila de `performanceId` y completa (emite una vez y cierra)
2910
+ * en cuanto el usuario queda admitido. Mientras espera, muestra un modal
2911
+ * ligero con la posición vigente, actualizado por SSE. Si quien se
2912
+ * suscribió se desuscribe antes de ser admitido (el usuario navega a
2913
+ * otro lado, cierra el modal, o el componente se destruye), libera el
2914
+ * lugar en la fila con /leave.
2915
+ */
2916
+ waitForAdmission(performanceId: number): Observable<void>;
2917
+ static ɵfac: i0.ɵɵFactoryDeclaration<AdmissionQueueService, never>;
2918
+ static ɵprov: i0.ɵɵInjectableDeclaration<AdmissionQueueService>;
2919
+ }
2920
+
2921
+ declare class TicketQrService {
2922
+ private apiService;
2923
+ constructor(apiService: ApiService);
2924
+ fetchQrToken(ticketUuid: string): Observable<QrTokenResponse>;
2925
+ fetchMyQrToken(ticketUuid: string): Observable<QrTokenResponse>;
2926
+ downloadTicketPdf(ticketUuid: string): Observable<Blob>;
2927
+ downloadMyTicketPdf(ticketUuid: string): Observable<Blob>;
2928
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketQrService, never>;
2929
+ static ɵprov: i0.ɵɵInjectableDeclaration<TicketQrService>;
2930
+ }
2931
+
2932
+ declare class TicketQrModalService {
2933
+ isOpen: WritableSignal<boolean>;
2934
+ ticketUuid: WritableSignal<string | null>;
2935
+ ticketDescription: WritableSignal<string | null>;
2936
+ open(ticketUuid: string, description?: string): void;
2937
+ close(): void;
2938
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketQrModalService, never>;
2939
+ static ɵprov: i0.ɵɵInjectableDeclaration<TicketQrModalService>;
2940
+ }
2941
+
2942
+ declare class VipCardService {
2943
+ private apiService;
2944
+ constructor(apiService: ApiService);
2945
+ findMy(): Observable<{
2946
+ data: VipCard | null;
2947
+ }>;
2948
+ activate(data: any): Observable<VipOrderResponse>;
2949
+ recharge(data: any): Observable<VipOrderResponse>;
2950
+ fetchAll(params?: FetchVipCardsParams): Observable<VipCardsResponse>;
2951
+ fetchOneById(id: number): Observable<VipCardResponse>;
2952
+ activateAdmin(data: ActivateVipCardParams): Observable<VipOrderResponse>;
2953
+ rechargeAdmin(id: number, data: any): Observable<VipOrderResponse>;
2954
+ updateStatus(id: number, status: VipCardStatus): Observable<VipCardResponse>;
2955
+ updateTerms(id: number): Observable<VipCardResponse>;
2956
+ fetchTransactions(id: number, page?: number, limit?: number): Observable<VipTransactionsResponse>;
2957
+ static ɵfac: i0.ɵɵFactoryDeclaration<VipCardService, never>;
2958
+ static ɵprov: i0.ɵɵInjectableDeclaration<VipCardService>;
2959
+ }
2960
+
2961
+ /**
2962
+ * Servicio genérico de "cambios pendientes" para tablas con edición rápida
2963
+ * + guardado masivo (QTN-49, primer consumidor: Bonos de Regalo en
2964
+ * tickera-backoffice-frontend).
2965
+ *
2966
+ * IMPORTANTE: proveerlo a nivel de componente/página
2967
+ * (`providers: [PendingChangesService]` en el `@Component` que lo usa),
2968
+ * NUNCA en `providedIn: 'root'` — si no, dos tablas con edición rápida
2969
+ * abiertas al mismo tiempo (dos pestañas, o dos listados en la misma
2970
+ * sesión) compartirían el mismo estado de cambios pendientes. Mismo
2971
+ * criterio que ya sigue este repo con GiftBondService, provisto a nivel de
2972
+ * GiftBondDetailsComponent en vez de en 'root'.
2973
+ */
2974
+ declare class PendingChangesService<TValue = any> {
2975
+ private readonly changesSignal;
2976
+ private readonly originalValues;
2977
+ readonly changes: Signal<Map<number, TValue>>;
2978
+ readonly changeCount: Signal<number>;
2979
+ readonly hasChanges: Signal<boolean>;
2980
+ /**
2981
+ * Registra (o actualiza) el cambio pendiente de `id`. `originalValue` es
2982
+ * el valor que tenía la fila antes de cualquier edición en esta sesión de
2983
+ * la tabla — solo se guarda la primera vez que se llama para ese id, así
2984
+ * que no importa pasarlo en cada llamada subsiguiente.
2985
+ *
2986
+ * Si `newValue` termina siendo igual al valor original, el id se
2987
+ * elimina automáticamente de los cambios pendientes (evita que quede
2988
+ * marcado como "modificado" un valor que el usuario cambió y luego
2989
+ * revirtió a mano).
2990
+ */
2991
+ setChange(id: number, originalValue: TValue, newValue: TValue): void;
2992
+ getPendingValue(id: number): TValue | undefined;
2993
+ /** Descarta el cambio pendiente de una fila puntual (botón "Deshacer" por fila, si aplica). */
2994
+ discard(id: number): void;
2995
+ /** Descarta todos los cambios pendientes sin guardar nada (botón "Deshacer" de la barra flotante). */
2996
+ discardAll(): void;
2997
+ /** Llamar después de que el guardado en lote fue exitoso, para limpiar el estado. */
2998
+ clearAfterSave(): void;
2999
+ static ɵfac: i0.ɵɵFactoryDeclaration<PendingChangesService<any>, never>;
3000
+ static ɵprov: i0.ɵɵInjectableDeclaration<PendingChangesService<any>>;
3001
+ }
3002
+
1608
3003
  declare const authInterceptor: HttpInterceptorFn;
1609
3004
 
1610
3005
  declare class AppButtonComponent {
@@ -1617,10 +3012,11 @@ declare class AppButtonComponent {
1617
3012
  size: 'xs' | 'sm' | 'md' | 'lg';
1618
3013
  loadingText: string;
1619
3014
  icon: string;
3015
+ tooltip: string;
1620
3016
  handleClick(): void;
1621
3017
  get buttonClasses(): string;
1622
3018
  static ɵfac: i0.ɵɵFactoryDeclaration<AppButtonComponent, never>;
1623
- static ɵcmp: i0.ɵɵComponentDeclaration<AppButtonComponent, "app-button", never, { "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "type": { "alias": "type"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "text": { "alias": "text"; "required": false; }; "size": { "alias": "size"; "required": false; }; "loadingText": { "alias": "loadingText"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; }, { "clicked": "clicked"; }, never, never, true, never>;
3019
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppButtonComponent, "app-button", never, { "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "type": { "alias": "type"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "text": { "alias": "text"; "required": false; }; "size": { "alias": "size"; "required": false; }; "loadingText": { "alias": "loadingText"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; }, { "clicked": "clicked"; }, never, never, true, never>;
1624
3020
  }
1625
3021
 
1626
3022
  declare class AppLinkButtonComponent {
@@ -1634,9 +3030,10 @@ declare class AppLinkButtonComponent {
1634
3030
  queryParams: Record<string, any>;
1635
3031
  size: 'xs' | 'sm' | 'md' | 'lg';
1636
3032
  variant: 'primary' | 'secondary' | 'tertiary' | 'success' | 'transparent';
3033
+ tooltip: string;
1637
3034
  get buttonClasses(): string;
1638
3035
  static ɵfac: i0.ɵɵFactoryDeclaration<AppLinkButtonComponent, never>;
1639
- static ɵcmp: i0.ɵɵComponentDeclaration<AppLinkButtonComponent, "app-link-button", never, { "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "target": { "alias": "target"; "required": false; }; "text": { "alias": "text"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "loadingText": { "alias": "loadingText"; "required": false; }; "route": { "alias": "route"; "required": false; }; "queryParams": { "alias": "queryParams"; "required": false; }; "size": { "alias": "size"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; }, {}, never, never, true, never>;
3036
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppLinkButtonComponent, "app-link-button", never, { "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "target": { "alias": "target"; "required": false; }; "text": { "alias": "text"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "loadingText": { "alias": "loadingText"; "required": false; }; "route": { "alias": "route"; "required": false; }; "queryParams": { "alias": "queryParams"; "required": false; }; "size": { "alias": "size"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; }, {}, never, never, true, never>;
1640
3037
  }
1641
3038
 
1642
3039
  declare class AppAlertComponent {
@@ -1649,30 +3046,65 @@ declare class AppAlertComponent {
1649
3046
  static ɵcmp: i0.ɵɵComponentDeclaration<AppAlertComponent, "app-alert", never, { "type": { "alias": "type"; "required": false; }; "text": { "alias": "text"; "required": false; }; "closeable": { "alias": "closeable"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
1650
3047
  }
1651
3048
 
1652
- declare class LoadingmModalComponent {
1653
- private loadingModalService;
1654
- constructor(loadingModalService: LoadingModalService);
1655
- get isOpen(): i0.WritableSignal<boolean>;
1656
- get title(): i0.WritableSignal<string>;
3049
+ declare class FeedbackModalComponent implements OnChanges, OnDestroy {
3050
+ isOpen: WritableSignal<boolean>;
3051
+ type: FeedbackModalType;
3052
+ title: string;
3053
+ message: string;
3054
+ showHeader: boolean;
3055
+ showCloseButton: boolean;
3056
+ showTitle: boolean;
3057
+ autoClose: boolean;
3058
+ autoCloseDuration: number;
3059
+ buttonText: string;
3060
+ closed: EventEmitter<void>;
3061
+ private autoCloseTimeout;
3062
+ get defaultButtonText(): string;
3063
+ get resolvedButtonText(): string;
3064
+ get buttonVariant(): 'primary' | 'secondary';
3065
+ ngOnChanges(changes: SimpleChanges): void;
3066
+ ngOnDestroy(): void;
1657
3067
  closeModal(): void;
1658
- onCitySaved(): void;
1659
- static ɵfac: i0.ɵɵFactoryDeclaration<LoadingmModalComponent, never>;
1660
- static ɵcmp: i0.ɵɵComponentDeclaration<LoadingmModalComponent, "loading-modal", never, {}, {}, never, never, true, never>;
3068
+ private scheduleAutoClose;
3069
+ private clearAutoClose;
3070
+ static ɵfac: i0.ɵɵFactoryDeclaration<FeedbackModalComponent, never>;
3071
+ static ɵcmp: i0.ɵɵComponentDeclaration<FeedbackModalComponent, "feedback-modal", never, { "isOpen": { "alias": "isOpen"; "required": false; }; "type": { "alias": "type"; "required": false; }; "title": { "alias": "title"; "required": false; }; "message": { "alias": "message"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; "showTitle": { "alias": "showTitle"; "required": false; }; "autoClose": { "alias": "autoClose"; "required": false; }; "autoCloseDuration": { "alias": "autoCloseDuration"; "required": false; }; "buttonText": { "alias": "buttonText"; "required": false; }; }, { "closed": "closed"; }, never, never, true, never>;
1661
3072
  }
1662
3073
 
3074
+ type DeleteConfirmationStep = 'input' | 'final';
1663
3075
  declare class DeleteConfirmationComponent {
1664
3076
  private fb;
1665
3077
  private deleteConfirmationService;
1666
3078
  protected transloco: TranslocoService;
1667
3079
  deleteConfirmationForm: FormGroup;
3080
+ /**
3081
+ * Two-step flow:
3082
+ * 1. 'input' -> the user must type the resource name to unlock the delete action.
3083
+ * 2. 'final' -> a last feedback/confirmation step is shown before the delete
3084
+ * callback actually runs, so a slip of the mouse on the first
3085
+ * step can never trigger a real deletion by itself.
3086
+ */
3087
+ step: DeleteConfirmationStep;
1668
3088
  constructor(fb: FormBuilder, deleteConfirmationService: DeleteConfirmationService, transloco: TranslocoService);
1669
3089
  get title(): string;
1670
3090
  get resourceName(): string;
1671
3091
  get confirmationText(): string;
1672
3092
  get isOpen(): i0.WritableSignal<boolean>;
1673
3093
  get isConfirmationValid(): boolean;
3094
+ get isFinalStep(): boolean;
3095
+ /** Cancels the whole flow (from either step) without deleting anything. */
1674
3096
  onCloseModal(): void;
3097
+ /** Step 1 submit: only advances to the final confirmation, never deletes. */
1675
3098
  onConfirmDelete(): void;
3099
+ /**
3100
+ * Step 2 cancel: goes back to the input step without touching what the
3101
+ * user typed, so they don't have to retype it if they just want to
3102
+ * double-check before deleting.
3103
+ */
3104
+ onBackToInput(): void;
3105
+ /** Step 2 submit: this is the only place that actually triggers deletion. */
3106
+ onFinalConfirm(): void;
3107
+ private resetState;
1676
3108
  static ɵfac: i0.ɵɵFactoryDeclaration<DeleteConfirmationComponent, never>;
1677
3109
  static ɵcmp: i0.ɵɵComponentDeclaration<DeleteConfirmationComponent, "delete-confirmation", never, {}, {}, never, never, true, never>;
1678
3110
  }
@@ -1680,12 +3112,29 @@ declare class DeleteConfirmationComponent {
1680
3112
  declare class AppModalComponent {
1681
3113
  title: string;
1682
3114
  disableClose: boolean;
3115
+ showHeader: boolean;
3116
+ showCloseButton: boolean;
3117
+ showTitle: boolean;
3118
+ interactiveClose: boolean;
1683
3119
  isOpen: WritableSignal<boolean>;
1684
- size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';
3120
+ size: ModalSize;
1685
3121
  closeModal: EventEmitter<void>;
1686
3122
  onCloseModal(): void;
3123
+ onInteractiveClose(): void;
3124
+ onKeydownEscape(): void;
1687
3125
  static ɵfac: i0.ɵɵFactoryDeclaration<AppModalComponent, never>;
1688
- static ɵcmp: i0.ɵɵComponentDeclaration<AppModalComponent, "app-modal", never, { "title": { "alias": "title"; "required": false; }; "disableClose": { "alias": "disableClose"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "closeModal": "closeModal"; }, never, ["*"], true, never>;
3126
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppModalComponent, "app-modal", never, { "title": { "alias": "title"; "required": false; }; "disableClose": { "alias": "disableClose"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; "showTitle": { "alias": "showTitle"; "required": false; }; "interactiveClose": { "alias": "interactiveClose"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "closeModal": "closeModal"; }, never, ["*"], true, never>;
3127
+ }
3128
+
3129
+ declare class AppBadgeComponent {
3130
+ text: string;
3131
+ color: BadgeColor;
3132
+ size: BadgeSize;
3133
+ bordered: boolean;
3134
+ backgroundColor: string;
3135
+ textColor: string;
3136
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppBadgeComponent, never>;
3137
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppBadgeComponent, "app-badge", never, { "text": { "alias": "text"; "required": false; }; "color": { "alias": "color"; "required": false; }; "size": { "alias": "size"; "required": false; }; "bordered": { "alias": "bordered"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "textColor": { "alias": "textColor"; "required": false; }; }, {}, never, never, true, never>;
1689
3138
  }
1690
3139
 
1691
3140
  declare class AuditInformationComponent {
@@ -1694,12 +3143,13 @@ declare class AuditInformationComponent {
1694
3143
  static ɵcmp: i0.ɵɵComponentDeclaration<AuditInformationComponent, "app-audit-information", never, { "data": { "alias": "data"; "required": false; }; }, {}, never, never, true, never>;
1695
3144
  }
1696
3145
 
1697
- declare class DynamicTableComponent {
3146
+ declare class DynamicTableComponent implements OnChanges {
1698
3147
  private injector;
1699
3148
  constructor(injector: Injector);
1700
3149
  title: string;
1701
3150
  data: any[];
1702
3151
  headers: any[];
3152
+ searcherPlaceholder: string;
1703
3153
  columnComponents: {
1704
3154
  [key: string]: Type<any>;
1705
3155
  };
@@ -1707,17 +3157,116 @@ declare class DynamicTableComponent {
1707
3157
  totalItems: number;
1708
3158
  itemsPerPage: number;
1709
3159
  currentPage: number;
3160
+ searchValue: string;
1710
3161
  pageChange: EventEmitter<number>;
1711
3162
  searchChange: EventEmitter<string>;
3163
+ pageSizeChange: EventEmitter<number>;
3164
+ pageSizeOptions: number[];
1712
3165
  showPagination: boolean;
1713
3166
  showSearch: boolean;
1714
3167
  showTitle: boolean;
1715
3168
  get totalPages(): number;
1716
3169
  onSearch(event: any): void;
1717
3170
  changePage(delta: number): void;
3171
+ changePageSize(event: any): void;
3172
+ private rowInjectors;
3173
+ ngOnChanges(changes: SimpleChanges): void;
1718
3174
  createInjector(row: any): Injector;
1719
3175
  static ɵfac: i0.ɵɵFactoryDeclaration<DynamicTableComponent, never>;
1720
- static ɵcmp: i0.ɵɵComponentDeclaration<DynamicTableComponent, "dynamic-table", never, { "title": { "alias": "title"; "required": false; }; "data": { "alias": "data"; "required": false; }; "headers": { "alias": "headers"; "required": false; }; "columnComponents": { "alias": "columnComponents"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "totalItems": { "alias": "totalItems"; "required": false; }; "itemsPerPage": { "alias": "itemsPerPage"; "required": false; }; "currentPage": { "alias": "currentPage"; "required": false; }; "showPagination": { "alias": "showPagination"; "required": false; }; "showSearch": { "alias": "showSearch"; "required": false; }; "showTitle": { "alias": "showTitle"; "required": false; }; }, { "pageChange": "pageChange"; "searchChange": "searchChange"; }, never, never, true, never>;
3176
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicTableComponent, "dynamic-table", never, { "title": { "alias": "title"; "required": false; }; "data": { "alias": "data"; "required": false; }; "headers": { "alias": "headers"; "required": false; }; "searcherPlaceholder": { "alias": "searcherPlaceholder"; "required": false; }; "columnComponents": { "alias": "columnComponents"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "totalItems": { "alias": "totalItems"; "required": false; }; "itemsPerPage": { "alias": "itemsPerPage"; "required": false; }; "currentPage": { "alias": "currentPage"; "required": false; }; "searchValue": { "alias": "searchValue"; "required": false; }; "showPagination": { "alias": "showPagination"; "required": false; }; "showSearch": { "alias": "showSearch"; "required": false; }; "showTitle": { "alias": "showTitle"; "required": false; }; }, { "pageChange": "pageChange"; "searchChange": "searchChange"; "pageSizeChange": "pageSizeChange"; }, never, never, true, never>;
3177
+ }
3178
+
3179
+ declare class TextExpandableComponent implements OnChanges {
3180
+ text: string;
3181
+ maxLength: number;
3182
+ fontSize: TextFontSize;
3183
+ allowHtml: boolean;
3184
+ maxLines?: number;
3185
+ protected expanded: boolean;
3186
+ ngOnChanges(): void;
3187
+ get plainText(): string;
3188
+ get truncated(): boolean;
3189
+ get visibleText(): string;
3190
+ get lines(): number;
3191
+ toggleExpanded(): void;
3192
+ static ɵfac: i0.ɵɵFactoryDeclaration<TextExpandableComponent, never>;
3193
+ static ɵcmp: i0.ɵɵComponentDeclaration<TextExpandableComponent, "text-expandable", never, { "text": { "alias": "text"; "required": true; }; "maxLength": { "alias": "maxLength"; "required": false; }; "fontSize": { "alias": "fontSize"; "required": false; }; "allowHtml": { "alias": "allowHtml"; "required": false; }; "maxLines": { "alias": "maxLines"; "required": false; }; }, {}, never, never, true, never>;
3194
+ }
3195
+
3196
+ /**
3197
+ * Select genérico para editar un campo (típicamente "estado") directamente
3198
+ * en una celda de tabla, sin guardar de inmediato (QTN-49).
3199
+ *
3200
+ * Este componente es deliberadamente "tonto": no sabe a qué recurso
3201
+ * pertenece la fila ni cómo guardarla — solo muestra `options`, refleja
3202
+ * `value`, y emite `valueChange` cuando el usuario elige otra opción.
3203
+ * El componente que lo envuelve (p. ej. gift-bond-table-status en
3204
+ * tickera-backoffice-frontend) es quien conoce el id de la fila y decide
3205
+ * si guarda de inmediato o acumula el cambio en un
3206
+ * PendingChangesService + bulk-save-bar para guardado masivo.
3207
+ */
3208
+ declare class QuickStatusEditComponent {
3209
+ options: SelectOption[];
3210
+ value: any;
3211
+ /** Resalta visualmente la celda como "modificada, sin guardar". */
3212
+ dirty: boolean;
3213
+ disabled: boolean;
3214
+ valueChange: EventEmitter<any>;
3215
+ onChange(newValue: any): void;
3216
+ static ɵfac: i0.ɵɵFactoryDeclaration<QuickStatusEditComponent, never>;
3217
+ static ɵcmp: i0.ɵɵComponentDeclaration<QuickStatusEditComponent, "quick-status-edit", never, { "options": { "alias": "options"; "required": true; }; "value": { "alias": "value"; "required": false; }; "dirty": { "alias": "dirty"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
3218
+ }
3219
+
3220
+ /**
3221
+ * Barra flotante "Guardar cambios" para guardado masivo (QTN-49).
3222
+ *
3223
+ * No conoce el recurso concreto ni cómo persistir los cambios — el
3224
+ * componente que la usa le pasa `[count]` (típicamente
3225
+ * `pendingChangesService.changeCount()`) y escucha `(save)`/`(discard)`
3226
+ * para llamar al endpoint bulk correspondiente.
3227
+ */
3228
+ declare class BulkSaveBarComponent {
3229
+ count: number;
3230
+ loading: boolean;
3231
+ saveLabel: string;
3232
+ discardLabel: string;
3233
+ save: EventEmitter<void>;
3234
+ discard: EventEmitter<void>;
3235
+ static ɵfac: i0.ɵɵFactoryDeclaration<BulkSaveBarComponent, never>;
3236
+ static ɵcmp: i0.ɵɵComponentDeclaration<BulkSaveBarComponent, "bulk-save-bar", never, { "count": { "alias": "count"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "saveLabel": { "alias": "saveLabel"; "required": false; }; "discardLabel": { "alias": "discardLabel"; "required": false; }; }, { "save": "save"; "discard": "discard"; }, never, never, true, never>;
3237
+ }
3238
+
3239
+ declare class ShowCardComponent {
3240
+ show: Show;
3241
+ linkText: string;
3242
+ linkUrlFn?: (show: Show) => string;
3243
+ linkQueryParams?: Record<string, any>;
3244
+ transloco: TranslocoService;
3245
+ dateService: DateService;
3246
+ formatTimeDate(date: string): Date;
3247
+ static ɵfac: i0.ɵɵFactoryDeclaration<ShowCardComponent, never>;
3248
+ static ɵcmp: i0.ɵɵComponentDeclaration<ShowCardComponent, "show-card", never, { "show": { "alias": "show"; "required": true; }; "linkText": { "alias": "linkText"; "required": false; }; "linkUrlFn": { "alias": "linkUrlFn"; "required": false; }; "linkQueryParams": { "alias": "linkQueryParams"; "required": false; }; }, {}, never, never, true, never>;
3249
+ }
3250
+
3251
+ declare class ShowTypeBadgeComponent {
3252
+ show: Show;
3253
+ size: BadgeSize;
3254
+ transloco: TranslocoService;
3255
+ static ɵfac: i0.ɵɵFactoryDeclaration<ShowTypeBadgeComponent, never>;
3256
+ static ɵcmp: i0.ɵɵComponentDeclaration<ShowTypeBadgeComponent, "show-type-badge", never, { "show": { "alias": "show"; "required": true; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
3257
+ }
3258
+
3259
+ declare class ShowCardSkeletonComponent {
3260
+ static ɵfac: i0.ɵɵFactoryDeclaration<ShowCardSkeletonComponent, never>;
3261
+ static ɵcmp: i0.ɵɵComponentDeclaration<ShowCardSkeletonComponent, "show-card-skeleton", never, {}, {}, never, never, true, never>;
3262
+ }
3263
+
3264
+ declare class AppBreadcumbComponent {
3265
+ homeUrl: string | undefined;
3266
+ steps: BreadcrumbStep[];
3267
+ theme: BreadcrumbTheme;
3268
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppBreadcumbComponent, never>;
3269
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppBreadcumbComponent, "app-breadcrumb", never, { "homeUrl": { "alias": "homeUrl"; "required": false; }; "steps": { "alias": "steps"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; }, {}, never, never, true, never>;
1721
3270
  }
1722
3271
 
1723
3272
  declare class LanguageSwitcherComponent {
@@ -1730,6 +3279,67 @@ declare class LanguageSwitcherComponent {
1730
3279
  static ɵcmp: i0.ɵɵComponentDeclaration<LanguageSwitcherComponent, "language-switcher", never, {}, {}, never, never, true, never>;
1731
3280
  }
1732
3281
 
3282
+ declare class SidebarMenuComponent implements OnInit {
3283
+ private router;
3284
+ protected sidebarState: SidebarStateService;
3285
+ /** Menu items to render. Each app owns its own routes/roles and passes them in here. */
3286
+ items: SidebarMenuItem[];
3287
+ /** Route the brand/logo link should navigate to (e.g. the dashboard). */
3288
+ homePath: string;
3289
+ /** Optional brand logo shown in the sidebar header. Omit to render no logo. */
3290
+ logoUrl: string;
3291
+ logoAlt: string;
3292
+ private readonly IS_ACTIVE_MATCH_OPTIONS;
3293
+ constructor(router: Router, sidebarState: SidebarStateService);
3294
+ ngOnInit(): void;
3295
+ private updateSubmenuState;
3296
+ isSubmenuActive(item: SidebarMenuItem): boolean;
3297
+ toggleSubmenu(item: SidebarMenuItem): void;
3298
+ static ɵfac: i0.ɵɵFactoryDeclaration<SidebarMenuComponent, never>;
3299
+ static ɵcmp: i0.ɵɵComponentDeclaration<SidebarMenuComponent, "sidebar-menu", never, { "items": { "alias": "items"; "required": true; }; "homePath": { "alias": "homePath"; "required": true; }; "logoUrl": { "alias": "logoUrl"; "required": false; }; "logoAlt": { "alias": "logoAlt"; "required": false; }; }, {}, never, never, true, never>;
3300
+ }
3301
+
3302
+ declare class AdminNavbarComponent {
3303
+ protected sidebarState: SidebarStateService;
3304
+ /** Currently logged-in admin, or null while it hasn't loaded yet. */
3305
+ admin: Admin | null;
3306
+ /** Route the "my account" menu item should link to. */
3307
+ myAccountPath: string;
3308
+ /** Emitted when the admin clicks "log out" in the profile menu. */
3309
+ logout: EventEmitter<void>;
3310
+ isProfileMenuOpen: WritableSignal<boolean>;
3311
+ constructor(sidebarState: SidebarStateService);
3312
+ toggleProfileMenu(): void;
3313
+ onLogout(): void;
3314
+ clickout(event: Event): void;
3315
+ static ɵfac: i0.ɵɵFactoryDeclaration<AdminNavbarComponent, never>;
3316
+ static ɵcmp: i0.ɵɵComponentDeclaration<AdminNavbarComponent, "admin-navbar", never, { "admin": { "alias": "admin"; "required": false; }; "myAccountPath": { "alias": "myAccountPath"; "required": false; }; }, { "logout": "logout"; }, never, never, true, never>;
3317
+ }
3318
+
3319
+ /**
3320
+ * Reusable admin shell: sidebar + navbar + router-outlet.
3321
+ *
3322
+ * This component is intentionally free of any auth/session logic — that stays
3323
+ * in the consuming app. Project app-specific global UI (e.g. a session-timeout
3324
+ * modal) through the default content slot.
3325
+ */
3326
+ declare class AdminLayoutComponent {
3327
+ items: SidebarMenuItem[];
3328
+ homePath: string;
3329
+ admin: Admin | null;
3330
+ myAccountPath: string;
3331
+ logoUrl: string;
3332
+ logoAlt: string;
3333
+ logout: EventEmitter<void>;
3334
+ static ɵfac: i0.ɵɵFactoryDeclaration<AdminLayoutComponent, never>;
3335
+ static ɵcmp: i0.ɵɵComponentDeclaration<AdminLayoutComponent, "admin-layout", never, { "items": { "alias": "items"; "required": true; }; "homePath": { "alias": "homePath"; "required": true; }; "admin": { "alias": "admin"; "required": false; }; "myAccountPath": { "alias": "myAccountPath"; "required": false; }; "logoUrl": { "alias": "logoUrl"; "required": false; }; "logoAlt": { "alias": "logoAlt"; "required": false; }; }, { "logout": "logout"; }, never, ["*"], true, never>;
3336
+ }
3337
+
3338
+ declare class PublicLayoutComponent {
3339
+ static ɵfac: i0.ɵɵFactoryDeclaration<PublicLayoutComponent, never>;
3340
+ static ɵcmp: i0.ɵɵComponentDeclaration<PublicLayoutComponent, "app-public-layout", never, {}, {}, never, never, true, never>;
3341
+ }
3342
+
1733
3343
  declare class FormInputComponent implements ControlValueAccessor {
1734
3344
  ngControl: NgControl;
1735
3345
  private transloco;
@@ -1740,12 +3350,14 @@ declare class FormInputComponent implements ControlValueAccessor {
1740
3350
  placeholder: string;
1741
3351
  required: boolean;
1742
3352
  readonly: boolean;
3353
+ maxlength: number | null;
1743
3354
  minlength: number | null;
3355
+ max: number | null;
1744
3356
  min: number | null;
1745
3357
  step: number | null;
1746
3358
  pattern: string | null;
1747
3359
  fieldGroupClass: string;
1748
- autocomplete: boolean;
3360
+ autocomplete: string;
1749
3361
  value: any;
1750
3362
  disabled: boolean;
1751
3363
  onChange: any;
@@ -1762,12 +3374,68 @@ declare class FormInputComponent implements ControlValueAccessor {
1762
3374
  get inputClasses(): string;
1763
3375
  get fieldGroupClasses(): string;
1764
3376
  static ɵfac: i0.ɵɵFactoryDeclaration<FormInputComponent, [{ optional: true; self: true; }, null]>;
1765
- static ɵcmp: i0.ɵɵComponentDeclaration<FormInputComponent, "form-input", never, { "label": { "alias": "label"; "required": false; }; "type": { "alias": "type"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "minlength": { "alias": "minlength"; "required": false; }; "min": { "alias": "min"; "required": false; }; "step": { "alias": "step"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "fieldGroupClass": { "alias": "fieldGroupClass"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; }, {}, never, never, true, never>;
3377
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormInputComponent, "form-input", never, { "label": { "alias": "label"; "required": false; }; "type": { "alias": "type"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "minlength": { "alias": "minlength"; "required": false; }; "max": { "alias": "max"; "required": false; }; "min": { "alias": "min"; "required": false; }; "step": { "alias": "step"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "fieldGroupClass": { "alias": "fieldGroupClass"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; }, {}, never, never, true, never>;
3378
+ }
3379
+
3380
+ type IdentityDocumentType = 'CC' | 'CE' | 'PA' | 'NIT' | 'TI' | 'RC';
3381
+ /**
3382
+ * Campo de documento de identidad (QTN-44).
3383
+ *
3384
+ * Componente compartido que, dado un `documentType` (CC, CE, PA, NIT, TI, RC),
3385
+ * aplica automáticamente el formato y las validaciones correspondientes a los
3386
+ * lineamientos de documentos de identidad de Colombia: solo dígitos y rango de
3387
+ * longitud para CC/TI/RC/NIT, alfanumérico con longitud máxima para CE/PA, y
3388
+ * validación opcional del dígito de verificación (DV) para NIT.
3389
+ *
3390
+ * Sigue el mismo patrón que `NumberInputComponent`: standalone,
3391
+ * `ControlValueAccessor` + `Validator` vía `NG_VALUE_ACCESSOR`/`NG_VALIDATORS`.
3392
+ */
3393
+ declare class IdentityDocumentInputComponent implements ControlValueAccessor, Validator, OnChanges {
3394
+ transloco: TranslocoService;
3395
+ private injector;
3396
+ private elementRef;
3397
+ label: string;
3398
+ name: string;
3399
+ id: string;
3400
+ placeholder: string;
3401
+ required: boolean;
3402
+ readonly: boolean;
3403
+ fieldGroupClass: string;
3404
+ documentType: IdentityDocumentType | '';
3405
+ validateCheckDigit: boolean;
3406
+ value: string | null;
3407
+ disabled: boolean;
3408
+ onChange: any;
3409
+ onTouched: any;
3410
+ private _ngControl;
3411
+ constructor(transloco: TranslocoService, injector: Injector, elementRef: ElementRef);
3412
+ get ngControl(): NgControl | null;
3413
+ ngOnChanges(changes: SimpleChanges): void;
3414
+ private get rule();
3415
+ get isDigitsOnly(): boolean;
3416
+ get inputMode(): string;
3417
+ get maxLength(): number | null;
3418
+ writeValue(value: any): void;
3419
+ registerOnChange(fn: any): void;
3420
+ registerOnTouched(fn: any): void;
3421
+ setDisabledState(isDisabled: boolean): void;
3422
+ onKeyDown(event: KeyboardEvent): void;
3423
+ onInput(rawValue: string): void;
3424
+ validate(control: AbstractControl): ValidationErrors | null;
3425
+ private validateLength;
3426
+ private validateNitWithCheckDigit;
3427
+ static computeNitCheckDigit(nit: string): number;
3428
+ get inputId(): string;
3429
+ get showError(): boolean;
3430
+ get errorMessage(): string;
3431
+ get fieldGroupClasses(): string;
3432
+ static ɵfac: i0.ɵɵFactoryDeclaration<IdentityDocumentInputComponent, never>;
3433
+ static ɵcmp: i0.ɵɵComponentDeclaration<IdentityDocumentInputComponent, "identity-document-input", never, { "label": { "alias": "label"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "fieldGroupClass": { "alias": "fieldGroupClass"; "required": false; }; "documentType": { "alias": "documentType"; "required": false; }; "validateCheckDigit": { "alias": "validateCheckDigit"; "required": false; }; }, {}, never, never, true, never>;
1766
3434
  }
1767
3435
 
1768
3436
  declare class FormSelectComponent implements ControlValueAccessor {
1769
3437
  ngControl: NgControl;
1770
- private transloco;
3438
+ protected transloco: TranslocoService;
1771
3439
  label: string;
1772
3440
  name: string;
1773
3441
  id: string;
@@ -1791,7 +3459,6 @@ declare class FormSelectComponent implements ControlValueAccessor {
1791
3459
  get inputId(): string;
1792
3460
  get showError(): boolean;
1793
3461
  get errorMessage(): string;
1794
- get resolvedDefaultOptionLabel(): string;
1795
3462
  get fieldGroupClasses(): string;
1796
3463
  static ɵfac: i0.ɵɵFactoryDeclaration<FormSelectComponent, [{ optional: true; self: true; }, null]>;
1797
3464
  static ɵcmp: i0.ɵɵComponentDeclaration<FormSelectComponent, "form-select", never, { "label": { "alias": "label"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "options": { "alias": "options"; "required": false; }; "fieldGroupClass": { "alias": "fieldGroupClass"; "required": false; }; "showDefaultOption": { "alias": "showDefaultOption"; "required": false; }; "defaultOptionLabel": { "alias": "defaultOptionLabel"; "required": false; }; }, {}, never, never, true, never>;
@@ -1829,6 +3496,105 @@ declare class FormTextareaComponent implements ControlValueAccessor {
1829
3496
  static ɵcmp: i0.ɵɵComponentDeclaration<FormTextareaComponent, "form-textarea", never, { "label": { "alias": "label"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "minlength": { "alias": "minlength"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "cols": { "alias": "cols"; "required": false; }; "fieldGroupClass": { "alias": "fieldGroupClass"; "required": false; }; }, {}, never, never, true, never>;
1830
3497
  }
1831
3498
 
3499
+ declare class NumberInputComponent implements ControlValueAccessor, Validator, OnChanges {
3500
+ transloco: TranslocoService;
3501
+ private injector;
3502
+ private elementRef;
3503
+ label: string;
3504
+ name: string;
3505
+ id: string;
3506
+ placeholder: string;
3507
+ required: boolean;
3508
+ readonly: boolean;
3509
+ min: number | null;
3510
+ max: number | null;
3511
+ step: number;
3512
+ fieldGroupClass: string;
3513
+ value: number | null;
3514
+ disabled: boolean;
3515
+ onChange: any;
3516
+ onTouched: any;
3517
+ private _ngControl;
3518
+ constructor(transloco: TranslocoService, injector: Injector, elementRef: ElementRef);
3519
+ get ngControl(): NgControl | null;
3520
+ ngOnChanges(changes: SimpleChanges): void;
3521
+ validate(control: AbstractControl): ValidationErrors | null;
3522
+ writeValue(value: any): void;
3523
+ registerOnChange(fn: any): void;
3524
+ registerOnTouched(fn: any): void;
3525
+ setDisabledState(isDisabled: boolean): void;
3526
+ onInput(value: any): void;
3527
+ increment(): void;
3528
+ decrement(): void;
3529
+ get canIncrement(): boolean;
3530
+ get canDecrement(): boolean;
3531
+ get inputId(): string;
3532
+ get showError(): boolean;
3533
+ get errorMessage(): string;
3534
+ get fieldGroupClasses(): string;
3535
+ private clamp;
3536
+ private round;
3537
+ private emitNativeChange;
3538
+ private minValidator;
3539
+ private maxValidator;
3540
+ static ɵfac: i0.ɵɵFactoryDeclaration<NumberInputComponent, never>;
3541
+ static ɵcmp: i0.ɵɵComponentDeclaration<NumberInputComponent, "number-input", never, { "label": { "alias": "label"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "step": { "alias": "step"; "required": false; }; "fieldGroupClass": { "alias": "fieldGroupClass"; "required": false; }; }, {}, never, never, true, never>;
3542
+ }
3543
+
3544
+ declare class PhoneInputComponent implements ControlValueAccessor, Validator, OnChanges {
3545
+ private transloco;
3546
+ private injector;
3547
+ label: string;
3548
+ name: string;
3549
+ id: string;
3550
+ placeholder: string;
3551
+ required: boolean;
3552
+ readonly: boolean;
3553
+ maxNationalDigits: number | null;
3554
+ minNationalDigits: number | null;
3555
+ defaultCountry: string;
3556
+ fieldGroupClass: string;
3557
+ readonly countries: tickera_angular_components.PhoneCountry[];
3558
+ readonly phoneOptions: {
3559
+ search: string;
3560
+ name: string;
3561
+ isoCode: string;
3562
+ dialCode: string;
3563
+ }[];
3564
+ selectedIso: string;
3565
+ nationalNumber: string;
3566
+ disabled: boolean;
3567
+ onChange: any;
3568
+ onTouched: any;
3569
+ onValidatorChange: () => void;
3570
+ private _ngControl;
3571
+ constructor(transloco: TranslocoService, injector: Injector);
3572
+ get ngControl(): NgControl | null;
3573
+ get selectedCountry(): tickera_angular_components.PhoneCountry;
3574
+ get dialCode(): string;
3575
+ dialCodeOf(isoCode: string): string;
3576
+ get value(): string;
3577
+ ngOnChanges(changes: SimpleChanges): void;
3578
+ registerOnValidatorChange(fn: () => void): void;
3579
+ validate(control: AbstractControl): ValidationErrors | null;
3580
+ writeValue(value: string | null | undefined): void;
3581
+ registerOnChange(fn: any): void;
3582
+ registerOnTouched(fn: any): void;
3583
+ setDisabledState(isDisabled: boolean): void;
3584
+ onInput(event: Event): void;
3585
+ onCountryChange(isoCode: string): void;
3586
+ get inputId(): string;
3587
+ get showError(): boolean;
3588
+ get errorMessage(): string;
3589
+ get effectivePlaceholder(): string;
3590
+ get fieldGroupClasses(): string;
3591
+ flag(isoCode: string): string;
3592
+ private sanitize;
3593
+ private nationalDigits;
3594
+ static ɵfac: i0.ɵɵFactoryDeclaration<PhoneInputComponent, never>;
3595
+ static ɵcmp: i0.ɵɵComponentDeclaration<PhoneInputComponent, "phone-input", never, { "label": { "alias": "label"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "maxNationalDigits": { "alias": "maxNationalDigits"; "required": false; }; "minNationalDigits": { "alias": "minNationalDigits"; "required": false; }; "defaultCountry": { "alias": "defaultCountry"; "required": false; }; "fieldGroupClass": { "alias": "fieldGroupClass"; "required": false; }; }, {}, never, never, true, never>;
3596
+ }
3597
+
1832
3598
  declare class FormEditorComponent implements ControlValueAccessor, OnInit, OnDestroy {
1833
3599
  ngControl: NgControl;
1834
3600
  private transloco;
@@ -1846,7 +3612,8 @@ declare class FormEditorComponent implements ControlValueAccessor, OnInit, OnDes
1846
3612
  onChange: any;
1847
3613
  onTouched: any;
1848
3614
  private subscription;
1849
- constructor(ngControl: NgControl, transloco: TranslocoService);
3615
+ isBrowser: boolean;
3616
+ constructor(ngControl: NgControl, transloco: TranslocoService, platformId: object);
1850
3617
  ngOnInit(): void;
1851
3618
  ngOnDestroy(): void;
1852
3619
  writeValue(value: any): void;
@@ -1857,7 +3624,7 @@ declare class FormEditorComponent implements ControlValueAccessor, OnInit, OnDes
1857
3624
  get showError(): boolean;
1858
3625
  get errorMessage(): string;
1859
3626
  get fieldGroupClasses(): string;
1860
- static ɵfac: i0.ɵɵFactoryDeclaration<FormEditorComponent, [{ optional: true; self: true; }, null]>;
3627
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormEditorComponent, [{ optional: true; self: true; }, null, null]>;
1861
3628
  static ɵcmp: i0.ɵɵComponentDeclaration<FormEditorComponent, "form-editor", never, { "label": { "alias": "label"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "toolbar": { "alias": "toolbar"; "required": false; }; "fieldGroupClass": { "alias": "fieldGroupClass"; "required": false; }; }, {}, never, never, true, never>;
1862
3629
  }
1863
3630
 
@@ -2021,14 +3788,14 @@ declare class FileUploadPreviewComponent {
2021
3788
  interface AsyncSelectConfig<T = any> {
2022
3789
  load: (params?: {
2023
3790
  search?: string;
2024
- parentId?: number;
3791
+ parentId?: number | number[];
2025
3792
  }) => Observable<T>;
2026
3793
  map: (response: T) => SelectOption[];
2027
3794
  }
2028
3795
  declare class AsyncSelectComponent implements OnInit, OnDestroy, OnChanges, ControlValueAccessor {
2029
3796
  config?: AsyncSelectConfig<any>;
2030
3797
  items: SelectOption[];
2031
- parentId?: number | null;
3798
+ parentId?: number | number[] | null;
2032
3799
  label: string;
2033
3800
  placeholder: string;
2034
3801
  name: string;
@@ -2060,6 +3827,7 @@ declare class AsyncSelectComponent implements OnInit, OnDestroy, OnChanges, Cont
2060
3827
  private searchMode;
2061
3828
  private loadAndMap;
2062
3829
  private fetchData;
3830
+ private hasParentId;
2063
3831
  private handleParentIdChange;
2064
3832
  onSearch(event: any): void;
2065
3833
  onSelectChange(value: any): void;
@@ -2471,7 +4239,7 @@ declare class ShowMultiSelectComponent implements OnInit, OnDestroy, ControlValu
2471
4239
  static ɵcmp: i0.ɵɵComponentDeclaration<ShowMultiSelectComponent, "show-multi-select", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; }, {}, never, never, true, never>;
2472
4240
  }
2473
4241
 
2474
- declare class PriceZoneSelectComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {
4242
+ declare class PriceZoneSelectComponent implements OnInit, OnChanges, OnDestroy, ControlValueAccessor, Validator {
2475
4243
  private platformId;
2476
4244
  private priceZoneService;
2477
4245
  label: string;
@@ -2482,6 +4250,7 @@ declare class PriceZoneSelectComponent implements OnInit, OnDestroy, ControlValu
2482
4250
  showError: boolean;
2483
4251
  customClass: string;
2484
4252
  control?: AbstractControl | null;
4253
+ showIds: number[];
2485
4254
  priceZoneChange: EventEmitter<number | null>;
2486
4255
  priceZones: WritableSignal<SelectOption[]>;
2487
4256
  loading: WritableSignal<boolean>;
@@ -2493,6 +4262,7 @@ declare class PriceZoneSelectComponent implements OnInit, OnDestroy, ControlValu
2493
4262
  onTouched: any;
2494
4263
  constructor(platformId: string, priceZoneService: PriceZoneService);
2495
4264
  ngOnInit(): void;
4265
+ ngOnChanges(changes: SimpleChanges): void;
2496
4266
  get formControl(): FormControl;
2497
4267
  ngOnDestroy(): void;
2498
4268
  onSearchChange(search: string): void;
@@ -2505,7 +4275,29 @@ declare class PriceZoneSelectComponent implements OnInit, OnDestroy, ControlValu
2505
4275
  } | null;
2506
4276
  get isInvalid(): boolean;
2507
4277
  static ɵfac: i0.ɵɵFactoryDeclaration<PriceZoneSelectComponent, never>;
2508
- static ɵcmp: i0.ɵɵComponentDeclaration<PriceZoneSelectComponent, "price-zone-select", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "showError": { "alias": "showError"; "required": false; }; "customClass": { "alias": "customClass"; "required": false; }; "control": { "alias": "control"; "required": false; }; }, { "priceZoneChange": "priceZoneChange"; }, never, never, true, never>;
4278
+ static ɵcmp: i0.ɵɵComponentDeclaration<PriceZoneSelectComponent, "price-zone-select", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "showError": { "alias": "showError"; "required": false; }; "customClass": { "alias": "customClass"; "required": false; }; "control": { "alias": "control"; "required": false; }; "showIds": { "alias": "showIds"; "required": false; }; }, { "priceZoneChange": "priceZoneChange"; }, never, never, true, never>;
4279
+ }
4280
+
4281
+ declare class PerformanceTicketStatusBadgeComponent {
4282
+ ticket: PerformanceTicket;
4283
+ size: BadgeSize;
4284
+ protected get statusColors(): {
4285
+ text: string;
4286
+ bg: string;
4287
+ };
4288
+ static ɵfac: i0.ɵɵFactoryDeclaration<PerformanceTicketStatusBadgeComponent, never>;
4289
+ static ɵcmp: i0.ɵɵComponentDeclaration<PerformanceTicketStatusBadgeComponent, "performance-ticket-status-badge", never, { "ticket": { "alias": "ticket"; "required": true; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
4290
+ }
4291
+
4292
+ declare class PerformanceStatusBadgeComponent {
4293
+ performance: Performance;
4294
+ size: BadgeSize;
4295
+ protected get statusColors(): {
4296
+ text: string;
4297
+ bg: string;
4298
+ };
4299
+ static ɵfac: i0.ɵɵFactoryDeclaration<PerformanceStatusBadgeComponent, never>;
4300
+ static ɵcmp: i0.ɵɵComponentDeclaration<PerformanceStatusBadgeComponent, "performance-status-badge", never, { "performance": { "alias": "performance"; "required": true; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
2509
4301
  }
2510
4302
 
2511
4303
  declare class DaySelectorGridComponent {
@@ -2514,6 +4306,13 @@ declare class DaySelectorGridComponent {
2514
4306
  protected listEventService: PerformancesListEventsService;
2515
4307
  protected toastService: ToastService;
2516
4308
  displayMode: 'grid' | 'carousel';
4309
+ /**
4310
+ * true cuando este selector se usa desde el canal backoffice: en ese
4311
+ * caso también deben aparecer las funciones PRIVATE (nunca PEDAGOGIC,
4312
+ * que siempre usa su propio flujo). false (por defecto) es el canal
4313
+ * ecommerce, que solo ve funciones PUBLIC.
4314
+ */
4315
+ isAdmin: boolean;
2517
4316
  loadingData: WritableSignal<boolean>;
2518
4317
  days: WritableSignal<PerformanceAvailableDay[]>;
2519
4318
  carouselTrack?: ElementRef<HTMLElement>;
@@ -2523,17 +4322,22 @@ declare class DaySelectorGridComponent {
2523
4322
  onToggle(day: PerformanceAvailableDay): void;
2524
4323
  scrollCarousel(direction: 1 | -1): void;
2525
4324
  static ɵfac: i0.ɵɵFactoryDeclaration<DaySelectorGridComponent, never>;
2526
- static ɵcmp: i0.ɵɵComponentDeclaration<DaySelectorGridComponent, "day-selector-grid", never, { "displayMode": { "alias": "displayMode"; "required": false; }; }, {}, never, never, true, never>;
4325
+ static ɵcmp: i0.ɵɵComponentDeclaration<DaySelectorGridComponent, "day-selector-grid", never, { "displayMode": { "alias": "displayMode"; "required": false; }; "isAdmin": { "alias": "isAdmin"; "required": false; }; }, {}, never, never, true, never>;
2527
4326
  }
2528
4327
 
2529
4328
  declare class PerformanceCardComponent {
2530
4329
  protected listEventService: PerformancesListEventsService;
2531
4330
  card: DailyPerformanceItem;
4331
+ linkText: string;
4332
+ linkUrlFn?: (card: DailyPerformanceItem) => string;
4333
+ linkQueryParams?: Record<string, any>;
4334
+ readonly PerformanceVisibilityType: typeof PerformanceVisibilityType;
2532
4335
  constructor(listEventService: PerformancesListEventsService);
4336
+ get badgeColor(): 'success' | 'error';
2533
4337
  onSelect(): void;
2534
4338
  isSelected(): boolean;
2535
4339
  static ɵfac: i0.ɵɵFactoryDeclaration<PerformanceCardComponent, never>;
2536
- static ɵcmp: i0.ɵɵComponentDeclaration<PerformanceCardComponent, "performance-card", never, { "card": { "alias": "card"; "required": true; }; }, {}, never, never, true, never>;
4340
+ static ɵcmp: i0.ɵɵComponentDeclaration<PerformanceCardComponent, "performance-card", never, { "card": { "alias": "card"; "required": true; }; "linkText": { "alias": "linkText"; "required": false; }; "linkUrlFn": { "alias": "linkUrlFn"; "required": false; }; "linkQueryParams": { "alias": "linkQueryParams"; "required": false; }; }, {}, never, never, true, never>;
2537
4341
  }
2538
4342
 
2539
4343
  declare class PerformanceCardListComponent {
@@ -2541,6 +4345,16 @@ declare class PerformanceCardListComponent {
2541
4345
  protected performanceService: PerformanceService;
2542
4346
  protected listEventService: PerformancesListEventsService;
2543
4347
  protected toastService: ToastService;
4348
+ linkText: string;
4349
+ linkUrlFn?: (card: DailyPerformanceItem) => string;
4350
+ linkQueryParams?: Record<string, any>;
4351
+ /**
4352
+ * true cuando esta lista se usa desde el canal backoffice: en ese caso
4353
+ * también deben aparecer las funciones PRIVATE (nunca PEDAGOGIC, que
4354
+ * siempre usa su propio flujo). false (por defecto) es el canal
4355
+ * ecommerce, que solo ve funciones PUBLIC.
4356
+ */
4357
+ isAdmin: boolean;
2544
4358
  loadingData: WritableSignal<boolean>;
2545
4359
  performances: WritableSignal<DailyPerformanceItem[]>;
2546
4360
  constructor(platformId: object, performanceService: PerformanceService, listEventService: PerformancesListEventsService, toastService: ToastService);
@@ -2548,7 +4362,7 @@ declare class PerformanceCardListComponent {
2548
4362
  private loadData;
2549
4363
  get selectedDayDate(): string | null;
2550
4364
  static ɵfac: i0.ɵɵFactoryDeclaration<PerformanceCardListComponent, never>;
2551
- static ɵcmp: i0.ɵɵComponentDeclaration<PerformanceCardListComponent, "performance-card-list", never, {}, {}, never, never, true, never>;
4365
+ static ɵcmp: i0.ɵɵComponentDeclaration<PerformanceCardListComponent, "performance-card-list", never, { "linkText": { "alias": "linkText"; "required": false; }; "linkUrlFn": { "alias": "linkUrlFn"; "required": false; }; "linkQueryParams": { "alias": "linkQueryParams"; "required": false; }; "isAdmin": { "alias": "isAdmin"; "required": false; }; }, {}, never, never, true, never>;
2552
4366
  }
2553
4367
 
2554
4368
  declare class PerformanceStepperComponent {
@@ -2577,9 +4391,9 @@ declare class ShowsFilterComponent {
2577
4391
  }
2578
4392
 
2579
4393
  interface PriceZoneItem {
2580
- colorClass: string;
4394
+ color: string;
2581
4395
  name: string;
2582
- seatsAvailable: number;
4396
+ available_seats: number;
2583
4397
  price: string;
2584
4398
  }
2585
4399
 
@@ -2595,5 +4409,468 @@ declare class ZonePriceListComponent {
2595
4409
  static ɵcmp: i0.ɵɵComponentDeclaration<ZonePriceListComponent, "zone-price-list", never, { "zones": { "alias": "zones"; "required": true; }; }, {}, never, never, true, never>;
2596
4410
  }
2597
4411
 
2598
- export { ADMIN_API_ROUTES, ALERT_ICONS, 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, CouponStatus, CustomerSelectComponent, CustomerService, DateInputComponent, DateService, DaySelectorGridComponent, DeleteConfirmationComponent, DeleteConfirmationService, DynamicTableComponent, ERROR_INPUT_CLASSES, EndDateGreaterThanStartValidator, FORM_ERROR_MESSAGES, FileType, FileUploadComponent, FileUploadPreviewComponent, FormEditorComponent, FormInputComponent, FormSelectComponent, FormTextareaComponent, GiftBondStatus, LanguageSwitcherComponent, LoadingModalService, LoadingmModalComponent, MinTodayValidator, MustMatchValidator, OrderItemType, OrderStatus, PERFORMANCES_API_ROUTES, PRICE_ZONES_API_ROUTES, PRODUCTS_API_ROUTES, PRODUCT_CATEGORIES_API_ROUTES, PRODUCT_TAGS_API_ROUTES, PRODUCT_TYPES_API_ROUTES, PerformanceCardComponent, PerformanceCardListComponent, PerformanceMultiSelectComponent, PerformanceSelectComponent, PerformanceService, PerformanceStatus, PerformanceStepperComponent, PerformanceTicketStatus, PerformancesListEventsService, PriceZoneEventService, PriceZoneFormModalService, PriceZoneSelectComponent, PriceZoneService, ProductCategoryService, ProductMultiSelectComponent, ProductSelectComponent, ProductService, ProductTagService, ProductTypeService, RoomMapElementOrientation, RoomMapElementType, SHOWS_API_ROUTES, STATE_API_ENDPOINTS, ShowMultiSelectComponent, ShowSelectComponent, ShowService, ShowsFilterComponent, StateSelectComponent, StatesService, TICKERA_COMPONENTS_CONFIG, TickeraTranslocoLoader, ToastService, ToggleSwitchComponent, VENUES_API_ROUTES, ZonePriceItemComponent, ZonePriceListComponent, authInterceptor, formatCitiesResponseToSelect, getBrowserLanguage, getCustomerFullname, getStoredLanguage, parseJsonToFormDataAdvanced, provideTickeraComponents, resolveLanguage, setStoredLanguage, transformImageToFile };
2599
- export type { Admin, AdminsResponse, AsyncSelectConfig, Auditable, CitiesResponse, City, CityResponse, CorporateBond, CorporateBondCode, CorporateBondResponse, CountriesResponse, Country, CountryResponse, Coupon, CouponResponse, Customer, CustomerResponse, CustomersResponse, DailyPerformanceHall, DailyPerformanceItem, DailyPerformancePriceZone, DailyPerformanceShow, DailyPerformanceVenue, DailyPerformancesResponse, DeleteConfirmationOpen, DragDropEvent, DynamicTableHeader, ElementPropertiesTab, FetchCitiesParams, FetchDailyPerformancesParams, FetchProductCategoriesParams, FetchProductTagsParams, FetchProductTypesParams, FetchShowsParams, FileUploadConfig, FindAllPriceZoneParams, GiftBond, GiftBondResponse, GiftBondsResponse, Hall, HallFloor, NumerationConfig, Order, OrderItem, OrderResponse, OrdersResponse, Performance, PerformanceAvailableDay, PerformanceBookingDataResponse, PerformanceResponse, PerformanceTicket, PerformancesAvailableDaysResponse, PerformancesResponseInterface, PriceZone, PriceZoneResponse, PriceZoneUpdateResponse, PriceZonesResponseInterface, Product, ProductCategoriesResponse, ProductCategory, ProductCategoryResponse, ProductImage, ProductResponse, ProductTag, ProductTagResponse, ProductTagsResponse, ProductTaxonomy, ProductType, ProductTypeResponse, ProductTypesResponse, ProductsResponseInterface, RoomMap, RoomMapBaseElement, RoomMapCanvasConfiguration, RoomMapCanvasElement, RoomMapChairPosition, RoomMapElementTemplate, RoomMapExitElement, RoomMapGridPosition, RoomMapPosition, RoomMapProductionAreaElement, RoomMapSeatDisplayState, RoomMapSeatElement, RoomMapSeatState, RoomMapSize, RoomMapStageElement, RoomMapTableElement, RoomMapUnavailableElement, RoomMapZoneElement, SelectOption, Show, ShowCategoriesResponse, ShowCategory, ShowCategoryResponse, ShowGender, ShowGenderResponse, ShowGendersResponse, ShowImage, ShowResponse, ShowType, ShowsResponseInterface, State, StateResponse, StatesResponse, TickeraComponentsConfig, UploadedFile, ValidateCorporateBondResponse, ValidateCouponResponse, ValidateGiftBondResponse, Venue, VenueImage };
4412
+ declare class TicketMapWidgetComponent {
4413
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketMapWidgetComponent, never>;
4414
+ static ɵcmp: i0.ɵɵComponentDeclaration<TicketMapWidgetComponent, "ticket-map-widget", never, {}, {}, never, ["*"], true, never>;
4415
+ }
4416
+
4417
+ declare class TicketMapWidgetHeaderComponent {
4418
+ title: string;
4419
+ subtitle: string;
4420
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketMapWidgetHeaderComponent, never>;
4421
+ static ɵcmp: i0.ɵɵComponentDeclaration<TicketMapWidgetHeaderComponent, "ticket-map-widget-header", never, { "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; }, {}, never, ["*"], true, never>;
4422
+ }
4423
+
4424
+ declare class TicketMapZoomControlsComponent {
4425
+ private zoomService;
4426
+ readonly currentZoom: i0.Signal<number>;
4427
+ readonly zoomPercentage: i0.Signal<string>;
4428
+ constructor(zoomService: TicketMapZoomService);
4429
+ zoomIn(): void;
4430
+ zoomOut(): void;
4431
+ resetZoom(): void;
4432
+ fitToContainer(): void;
4433
+ handleZoomAction(action: string): void;
4434
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketMapZoomControlsComponent, never>;
4435
+ static ɵcmp: i0.ɵɵComponentDeclaration<TicketMapZoomControlsComponent, "ticket-map-zoom-controls", never, {}, {}, never, never, true, never>;
4436
+ }
4437
+
4438
+ declare class TicketMapFloorSelectorComponent {
4439
+ private bookingDataService;
4440
+ readonly availableFloors: i0.Signal<tickera_angular_components.HallFloor[]>;
4441
+ readonly visibleFloorIds: i0.Signal<Set<number>>;
4442
+ readonly hasMultipleVisible: i0.Signal<boolean>;
4443
+ constructor(bookingDataService: PerformanceBookingDataService);
4444
+ isFloorVisible(floorId: number): boolean;
4445
+ canToggleOff(floorId: number): boolean;
4446
+ toggleFloor(floorId: number): void;
4447
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketMapFloorSelectorComponent, never>;
4448
+ static ɵcmp: i0.ɵɵComponentDeclaration<TicketMapFloorSelectorComponent, "ticket-map-floor-selector", never, {}, {}, never, never, true, never>;
4449
+ }
4450
+
4451
+ declare class PerformanceTicketMapComponent implements OnDestroy, AfterViewInit {
4452
+ private platformId;
4453
+ protected bookingDataService: PerformanceBookingDataService;
4454
+ protected feedbackModalService: FeedbackModalService;
4455
+ protected selectionService: TicketSelectionService;
4456
+ protected zoomService: TicketMapZoomService;
4457
+ selectionChange: EventEmitter<PerformanceTicket[]>;
4458
+ needsLoginError: EventEmitter<any>;
4459
+ readOnly: boolean;
4460
+ needsLogin: boolean;
4461
+ isLoggedIn: boolean;
4462
+ stageComponent?: StageComponent;
4463
+ protected tooltipData: i0.WritableSignal<TicketMapTooltipData | null>;
4464
+ protected renderData: i0.Signal<ElementRenderData[]>;
4465
+ private stageReady;
4466
+ private autoFitDone;
4467
+ private resizeObserver?;
4468
+ protected floorLayerRefs: i0.Signal<readonly CoreShapeComponent[]>;
4469
+ protected floorLayerName(floorId: number): string;
4470
+ protected floorGroups: i0.Signal<{
4471
+ floorId: number;
4472
+ elements: ElementRenderData[];
4473
+ }[]>;
4474
+ constructor(platformId: object, bookingDataService: PerformanceBookingDataService, feedbackModalService: FeedbackModalService, selectionService: TicketSelectionService, zoomService: TicketMapZoomService);
4475
+ protected get isBrowser(): boolean;
4476
+ ngAfterViewInit(): void;
4477
+ private setupResizeObserver;
4478
+ private syncStageToContainer;
4479
+ ngOnDestroy(): void;
4480
+ private getInternalPointer;
4481
+ protected selectHallFloor(floorId: number): void;
4482
+ protected handleStageClick(konvaEvent: any): void;
4483
+ protected handleStageMouseMove(konvaEvent: any): void;
4484
+ protected handleStageMouseLeave(): void;
4485
+ protected handleWheel(konvaEvent: any): void;
4486
+ protected trackByElementId(_index: number, item: ElementRenderData): number;
4487
+ protected trackByFloorId(_index: number, floor: HallFloorOption): HallFloorOption;
4488
+ static ɵfac: i0.ɵɵFactoryDeclaration<PerformanceTicketMapComponent, never>;
4489
+ static ɵcmp: i0.ɵɵComponentDeclaration<PerformanceTicketMapComponent, "performance-ticket-map", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "needsLogin": { "alias": "needsLogin"; "required": false; }; "isLoggedIn": { "alias": "isLoggedIn"; "required": false; }; }, { "selectionChange": "selectionChange"; "needsLoginError": "needsLoginError"; }, never, never, true, never>;
4490
+ }
4491
+
4492
+ declare class TicketMapPriceZonesComponent {
4493
+ protected bookingDataService: PerformanceBookingDataService;
4494
+ protected priceZones: i0.Signal<tickera_angular_components.PriceZone[]>;
4495
+ protected isFilterable: i0.Signal<boolean>;
4496
+ protected hasActiveFilter: i0.Signal<boolean>;
4497
+ protected isZoneFiltered(zoneId: number): boolean;
4498
+ protected ticketCount(zoneId: number): number;
4499
+ protected toggleZone(zoneId: number): void;
4500
+ protected clearFilter(): void;
4501
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketMapPriceZonesComponent, never>;
4502
+ static ɵcmp: i0.ɵɵComponentDeclaration<TicketMapPriceZonesComponent, "ticket-map-price-zones", never, {}, {}, never, never, true, never>;
4503
+ }
4504
+
4505
+ declare class TicketMapProductSelectionItemComponent {
4506
+ protected selectionService: TicketSelectionService;
4507
+ product: Product;
4508
+ constructor(selectionService: TicketSelectionService);
4509
+ get quantity(): number;
4510
+ get firstImage(): string | undefined;
4511
+ increment(): void;
4512
+ decrement(): void;
4513
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketMapProductSelectionItemComponent, never>;
4514
+ static ɵcmp: i0.ɵɵComponentDeclaration<TicketMapProductSelectionItemComponent, "ticket-map-product-selection-item", never, { "product": { "alias": "product"; "required": true; }; }, {}, never, never, true, never>;
4515
+ }
4516
+
4517
+ declare class TIcketMapProductSelectionComponent {
4518
+ title: string;
4519
+ subtitle: string;
4520
+ private bookingDataService;
4521
+ readonly products: i0.Signal<tickera_angular_components.Product[]>;
4522
+ static ɵfac: i0.ɵɵFactoryDeclaration<TIcketMapProductSelectionComponent, never>;
4523
+ static ɵcmp: i0.ɵɵComponentDeclaration<TIcketMapProductSelectionComponent, "ticket-map-product-selection", never, { "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; }, {}, never, never, true, never>;
4524
+ }
4525
+
4526
+ declare class TicketMapTotalsComponent {
4527
+ protected bookingDataService: PerformanceBookingDataService;
4528
+ protected selectionDetailsService: TicketSelectionDetailsService;
4529
+ protected selectionDiscountService: TicketSelectionDiscountService;
4530
+ protected selectionTotalsService: TicketSelectionTotalsService;
4531
+ protected selectionService: TicketSelectionService;
4532
+ private activatedRoute;
4533
+ title: string;
4534
+ buttonText: string;
4535
+ loadingButtonText: string;
4536
+ isLoading: boolean;
4537
+ onPurchaseClick: EventEmitter<void>;
4538
+ constructor(bookingDataService: PerformanceBookingDataService, selectionDetailsService: TicketSelectionDetailsService, selectionDiscountService: TicketSelectionDiscountService, selectionTotalsService: TicketSelectionTotalsService, selectionService: TicketSelectionService, activatedRoute: ActivatedRoute);
4539
+ get serviceFee(): number;
4540
+ get performanceId(): number;
4541
+ get selectedTicketIds(): number[];
4542
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketMapTotalsComponent, never>;
4543
+ static ɵcmp: i0.ɵɵComponentDeclaration<TicketMapTotalsComponent, "ticket-map-totals", never, { "title": { "alias": "title"; "required": false; }; "buttonText": { "alias": "buttonText"; "required": false; }; "loadingButtonText": { "alias": "loadingButtonText"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; }, { "onPurchaseClick": "onPurchaseClick"; }, never, never, true, never>;
4544
+ }
4545
+
4546
+ declare class TicketMapWrapperComponent {
4547
+ selectionChange: EventEmitter<PerformanceTicket[]>;
4548
+ needsLoginError: EventEmitter<any>;
4549
+ readOnly: boolean;
4550
+ needsLogin: boolean;
4551
+ isLoggedIn: boolean;
4552
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketMapWrapperComponent, never>;
4553
+ static ɵcmp: i0.ɵɵComponentDeclaration<TicketMapWrapperComponent, "ticket-map-wrapper", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "needsLogin": { "alias": "needsLogin"; "required": false; }; "isLoggedIn": { "alias": "isLoggedIn"; "required": false; }; }, { "selectionChange": "selectionChange"; "needsLoginError": "needsLoginError"; }, never, never, true, never>;
4554
+ }
4555
+
4556
+ declare class SeatSelectionEmptySummaryComponent {
4557
+ static ɵfac: i0.ɵɵFactoryDeclaration<SeatSelectionEmptySummaryComponent, never>;
4558
+ static ɵcmp: i0.ɵɵComponentDeclaration<SeatSelectionEmptySummaryComponent, "seat-selection-empty-summary", never, {}, {}, never, never, true, never>;
4559
+ }
4560
+
4561
+ declare class SeatSelectionSummaryComponent {
4562
+ protected selectionService: TicketSelectionService;
4563
+ title: string;
4564
+ clearButtonText: string;
4565
+ constructor(selectionService: TicketSelectionService);
4566
+ trackByItem(item: PerformanceTicket): string | number;
4567
+ static ɵfac: i0.ɵɵFactoryDeclaration<SeatSelectionSummaryComponent, never>;
4568
+ static ɵcmp: i0.ɵɵComponentDeclaration<SeatSelectionSummaryComponent, "seat-selection-summary", never, { "title": { "alias": "title"; "required": false; }; "clearButtonText": { "alias": "clearButtonText"; "required": false; }; }, {}, never, never, true, never>;
4569
+ }
4570
+
4571
+ declare class SeatSelectionSummaryItemComponent {
4572
+ protected selectionService: TicketSelectionService;
4573
+ item: PerformanceTicket;
4574
+ constructor(selectionService: TicketSelectionService);
4575
+ getItemTypeIcon: (ticket: PerformanceTicket) => string;
4576
+ get isZone(): boolean;
4577
+ get zoneMax(): number;
4578
+ onZoneQuantityChange(value: number | null): void;
4579
+ removeItem(ticket: PerformanceTicket): void;
4580
+ static ɵfac: i0.ɵɵFactoryDeclaration<SeatSelectionSummaryItemComponent, never>;
4581
+ static ɵcmp: i0.ɵɵComponentDeclaration<SeatSelectionSummaryItemComponent, "seat-selection-summary-item", never, { "item": { "alias": "item"; "required": true; }; }, {}, never, never, true, never>;
4582
+ }
4583
+
4584
+ declare class ConfirmationOrderModalComponent {
4585
+ private confirmationOrderModalService;
4586
+ private selectionDiscountService;
4587
+ private selectionTotalsService;
4588
+ private selectionService;
4589
+ private bookingDataService;
4590
+ modalTitle: string;
4591
+ confirmButtonText: string;
4592
+ confirmButtonTextLoading: string;
4593
+ loading: boolean;
4594
+ onConfirm: EventEmitter<any>;
4595
+ constructor(confirmationOrderModalService: ConfirmationOrderModalService, selectionDiscountService: TicketSelectionDiscountService, selectionTotalsService: TicketSelectionTotalsService, selectionService: TicketSelectionService, bookingDataService: PerformanceBookingDataService);
4596
+ get isOpen(): i0.WritableSignal<boolean>;
4597
+ get showTitle(): string | null;
4598
+ get performanceStartTime(): Date | string | null;
4599
+ get hallName(): string | null;
4600
+ get venueName(): string | null;
4601
+ get ticketItems(): PerformanceTicket[];
4602
+ get selectedProducts(): {
4603
+ product: Product;
4604
+ quantity: number;
4605
+ }[];
4606
+ ticketItemLabel(ticket: PerformanceTicket): string;
4607
+ ticketItemPrice(ticket: PerformanceTicket): number;
4608
+ private elementTypeLabel;
4609
+ get selectedCount(): number;
4610
+ get serviceFee(): number;
4611
+ get subtotalValue(): number;
4612
+ get ticketSubtotal(): number;
4613
+ get productSubtotal(): number;
4614
+ get productCount(): number;
4615
+ get totalValue(): number;
4616
+ get totalDiscounted(): number | null;
4617
+ get coupon(): tickera_angular_components.Coupon | null;
4618
+ get corporateBond(): tickera_angular_components.CorporateBond | null;
4619
+ get giftBond(): tickera_angular_components.GiftBondPurchase | null;
4620
+ get vipCard(): tickera_angular_components.VipCard | null;
4621
+ get subscription(): {
4622
+ service_fee_exempt: boolean;
4623
+ } | null;
4624
+ /**
4625
+ * Monto real del descuento en pesos ya calculado (aplica el % si el
4626
+ * cupón/VIP/abono es porcentual, o el valor fijo si no lo es) sobre el
4627
+ * subtotal de boletas. Se usa para TODAS las fuentes de descuento en el
4628
+ * modal: mostrar `coupon.discount_value` crudo era incorrecto para un
4629
+ * cupón porcentual (mostraba "10%" como si fueran "$10").
4630
+ */
4631
+ get discountAmount(): number;
4632
+ get isPercentageDiscount(): boolean;
4633
+ get rawServiceFee(): number;
4634
+ get isServiceFeeExempt(): boolean;
4635
+ onClose(): void;
4636
+ confirmOrder(): void;
4637
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmationOrderModalComponent, never>;
4638
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmationOrderModalComponent, "confirmation-order-modal", never, { "modalTitle": { "alias": "modalTitle"; "required": false; }; "confirmButtonText": { "alias": "confirmButtonText"; "required": false; }; "confirmButtonTextLoading": { "alias": "confirmButtonTextLoading"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; }, { "onConfirm": "onConfirm"; }, never, never, true, never>;
4639
+ }
4640
+
4641
+ declare class OrderInformationComponent {
4642
+ readonly transloco: TranslocoService;
4643
+ private readonly toastService;
4644
+ order: Order;
4645
+ showPayButton: boolean;
4646
+ createMpPreference?: (order: Order) => Observable<MercadoPagoPreference>;
4647
+ buildRelatedOrderRoute?: (relatedOrder: Order) => string;
4648
+ paymentLinkCreated: EventEmitter<MercadoPagoPreference>;
4649
+ isLoading: boolean;
4650
+ constructor(transloco: TranslocoService, toastService: ToastService);
4651
+ get relatedOrder(): Order | null;
4652
+ get isReplacementOrder(): boolean;
4653
+ get relatedOrderRoute(): string | null;
4654
+ get hasServiceFeeExemption(): boolean;
4655
+ get showMpButton(): boolean;
4656
+ payWithMercadoPago(): void;
4657
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrderInformationComponent, never>;
4658
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrderInformationComponent, "order-information", never, { "order": { "alias": "order"; "required": true; }; "showPayButton": { "alias": "showPayButton"; "required": false; }; "createMpPreference": { "alias": "createMpPreference"; "required": false; }; "buildRelatedOrderRoute": { "alias": "buildRelatedOrderRoute"; "required": false; }; }, { "paymentLinkCreated": "paymentLinkCreated"; }, never, never, true, never>;
4659
+ }
4660
+
4661
+ declare class OrderStatusBadgeComponent {
4662
+ protected transloco: TranslocoService;
4663
+ order: Order | RecentOrder;
4664
+ size: BadgeSize;
4665
+ constructor(transloco: TranslocoService);
4666
+ protected get statusColors(): {
4667
+ text: string;
4668
+ bg: string;
4669
+ };
4670
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrderStatusBadgeComponent, never>;
4671
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrderStatusBadgeComponent, "order-status-badge", never, { "order": { "alias": "order"; "required": true; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
4672
+ }
4673
+
4674
+ declare class OrderItemTypeBadgeComponent {
4675
+ protected transloco: TranslocoService;
4676
+ item: OrderItem;
4677
+ size: BadgeSize;
4678
+ constructor(transloco: TranslocoService);
4679
+ protected get statusColors(): {
4680
+ text: string;
4681
+ bg: string;
4682
+ };
4683
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrderItemTypeBadgeComponent, never>;
4684
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrderItemTypeBadgeComponent, "order-item-type-badge", never, { "item": { "alias": "item"; "required": true; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
4685
+ }
4686
+
4687
+ declare class OrderItemsComponent {
4688
+ private ticketQrModalService;
4689
+ order: Order;
4690
+ isCustomer: boolean;
4691
+ ticketCanOpenQr: (order: Order, ticket: tickera_angular_components.PerformanceTicket) => boolean;
4692
+ constructor(ticketQrModalService: TicketQrModalService);
4693
+ protected get orderItems(): Order['order_items'];
4694
+ protected get products(): Order['order_items'];
4695
+ protected get tickets(): Order['order_items'];
4696
+ protected get giftBonds(): Order['order_items'];
4697
+ protected get corporateBonds(): Order['order_items'];
4698
+ protected get vipRecharges(): Order['order_items'];
4699
+ protected get showActionColumn(): boolean;
4700
+ protected itemTotal(quantity: number, price: number | null): number;
4701
+ protected hasDiscount(): boolean;
4702
+ protected hasServiceFeeExemption(): boolean;
4703
+ protected hasTicketDiscount(item: OrderItem): boolean;
4704
+ protected get totals(): {
4705
+ giftBonds: number;
4706
+ corporateBonds: number;
4707
+ products: number;
4708
+ tickets: number;
4709
+ vipRecharges: number;
4710
+ };
4711
+ openTicketQr(ticketUuid: string, description: string): void;
4712
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrderItemsComponent, never>;
4713
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrderItemsComponent, "order-items", never, { "order": { "alias": "order"; "required": true; }; "isCustomer": { "alias": "isCustomer"; "required": false; }; }, {}, never, never, true, never>;
4714
+ }
4715
+
4716
+ declare class OrderDiscountAppliedComponent {
4717
+ order: Order;
4718
+ protected get discountInfo(): OrderDiscountInfo;
4719
+ protected get hasDiscount(): boolean;
4720
+ protected get discountPercentage(): number | null;
4721
+ protected get redeemedTicketsCount(): number | null;
4722
+ protected get serviceFeeExemptValue(): number;
4723
+ protected get badgeColors(): {
4724
+ text: string;
4725
+ bg: string;
4726
+ };
4727
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrderDiscountAppliedComponent, never>;
4728
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrderDiscountAppliedComponent, "order-discount-applied", never, { "order": { "alias": "order"; "required": true; }; }, {}, never, never, true, never>;
4729
+ }
4730
+
4731
+ interface BillingField {
4732
+ label: string;
4733
+ value: string | number | null;
4734
+ }
4735
+ declare class OrderBillingInfoComponent {
4736
+ order: Order;
4737
+ protected get fields(): BillingField[];
4738
+ protected get hasFields(): boolean;
4739
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrderBillingInfoComponent, never>;
4740
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrderBillingInfoComponent, "order-billing-info", never, { "order": { "alias": "order"; "required": true; }; }, {}, never, never, true, never>;
4741
+ }
4742
+
4743
+ declare class OrderTransactionsComponent {
4744
+ private transactionDetailsModalService;
4745
+ order: Order;
4746
+ constructor(transactionDetailsModalService: OrderTransactionDetailsModalService);
4747
+ protected get transactions(): Transaction[];
4748
+ protected get hasTransactions(): boolean;
4749
+ protected get txColors(): Record<string, {
4750
+ text: string;
4751
+ bg: string;
4752
+ }>;
4753
+ protected openTransaction(transaction: Transaction): void;
4754
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrderTransactionsComponent, never>;
4755
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrderTransactionsComponent, "order-transactions", never, { "order": { "alias": "order"; "required": true; }; }, {}, never, never, true, never>;
4756
+ }
4757
+
4758
+ declare class OrderTransactionDetailsModalComponent {
4759
+ private modalService;
4760
+ isOpen: WritableSignal<boolean> | null;
4761
+ transaction: Transaction | null;
4762
+ get modalIsOpen(): WritableSignal<boolean>;
4763
+ get selectedTransaction(): WritableSignal<Transaction | null>;
4764
+ protected get txColors(): Record<TransactionStatus, {
4765
+ text: string;
4766
+ bg: string;
4767
+ }>;
4768
+ protected get gatewayResponse(): string;
4769
+ onClose(): void;
4770
+ static ɵfac: i0.ɵɵFactoryDeclaration<OrderTransactionDetailsModalComponent, never>;
4771
+ static ɵcmp: i0.ɵɵComponentDeclaration<OrderTransactionDetailsModalComponent, "order-transaction-details-modal", never, { "isOpen": { "alias": "isOpen"; "required": false; }; "transaction": { "alias": "transaction"; "required": false; }; }, {}, never, never, true, never>;
4772
+ }
4773
+
4774
+ declare class TicketQrComponent implements OnInit, OnDestroy {
4775
+ private ticketQrService;
4776
+ private platformId;
4777
+ ticketUuid: string;
4778
+ isCustomer: boolean;
4779
+ qrCanvas: ElementRef<HTMLCanvasElement>;
4780
+ loading: i0.WritableSignal<boolean>;
4781
+ error: i0.WritableSignal<boolean>;
4782
+ refreshing: i0.WritableSignal<boolean>;
4783
+ countdown: i0.WritableSignal<number>;
4784
+ downloading: i0.WritableSignal<boolean>;
4785
+ private destroy$;
4786
+ private refreshTimeout;
4787
+ private countdownInterval;
4788
+ private isFetching;
4789
+ constructor(ticketQrService: TicketQrService, platformId: Object);
4790
+ ngOnInit(): void;
4791
+ ngOnDestroy(): void;
4792
+ private onVisibilityChange;
4793
+ private onFocus;
4794
+ private refreshFromReenter;
4795
+ retry(): void;
4796
+ downloadPdf(): void;
4797
+ private clearTimers;
4798
+ private fetchAndRender;
4799
+ private scheduleRefresh;
4800
+ private startCountdown;
4801
+ private renderQr;
4802
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketQrComponent, never>;
4803
+ static ɵcmp: i0.ɵɵComponentDeclaration<TicketQrComponent, "performance-ticket-qr", never, { "ticketUuid": { "alias": "ticketUuid"; "required": true; }; "isCustomer": { "alias": "isCustomer"; "required": false; }; }, {}, never, never, true, never>;
4804
+ }
4805
+
4806
+ declare class TicketQrModalComponent {
4807
+ private ticketQrModalService;
4808
+ isCustomer: boolean;
4809
+ constructor(ticketQrModalService: TicketQrModalService);
4810
+ get isOpen(): i0.WritableSignal<boolean>;
4811
+ get ticketUuid(): i0.WritableSignal<string | null>;
4812
+ get ticketDescription(): i0.WritableSignal<string | null>;
4813
+ onClose(): void;
4814
+ static ɵfac: i0.ɵɵFactoryDeclaration<TicketQrModalComponent, never>;
4815
+ static ɵcmp: i0.ɵɵComponentDeclaration<TicketQrModalComponent, "ticket-qr-modal", never, { "isCustomer": { "alias": "isCustomer"; "required": false; }; }, {}, never, never, true, never>;
4816
+ }
4817
+
4818
+ declare class VipBalanceCardComponent {
4819
+ card: VipCard | null;
4820
+ static ɵfac: i0.ɵɵFactoryDeclaration<VipBalanceCardComponent, never>;
4821
+ static ɵcmp: i0.ɵɵComponentDeclaration<VipBalanceCardComponent, "vip-balance-card", never, { "card": { "alias": "card"; "required": false; }; }, {}, never, never, true, never>;
4822
+ }
4823
+
4824
+ declare class VipCardStatusBadgeComponent {
4825
+ protected readonly tranloco: TranslocoService;
4826
+ card: VipCard;
4827
+ get statusColor(): BadgeColor;
4828
+ get statusTranslationKey(): string;
4829
+ static ɵfac: i0.ɵɵFactoryDeclaration<VipCardStatusBadgeComponent, never>;
4830
+ static ɵcmp: i0.ɵɵComponentDeclaration<VipCardStatusBadgeComponent, "vip-card-status-badge", never, { "card": { "alias": "card"; "required": true; }; }, {}, never, never, true, never>;
4831
+ }
4832
+
4833
+ declare class VipRechargeModalComponent implements OnChanges {
4834
+ private fb;
4835
+ protected transloco: TranslocoService;
4836
+ title: string;
4837
+ submitLabel: string;
4838
+ loading: boolean;
4839
+ amountStep: number;
4840
+ minAmount: number;
4841
+ maxAmount: number;
4842
+ isOpen: WritableSignal<boolean>;
4843
+ /**
4844
+ * Cuando es true (uso desde el ecommerce/cliente), el método de pago queda
4845
+ * fijo en Mercado Pago y no se muestra el selector: desde el lado del
4846
+ * cliente no se pueden elegir métodos de pago administrativos (efectivo,
4847
+ * datáfono, nómina, cambios internos, etc.), esos son exclusivos del
4848
+ * backoffice.
4849
+ */
4850
+ restrictToMercadoPago: boolean;
4851
+ closeModal: EventEmitter<void>;
4852
+ confirm: EventEmitter<VipRechargeConfirmPayload>;
4853
+ rechargeForm: FormGroup;
4854
+ paymentMethodOptions: {
4855
+ label: string;
4856
+ value: string;
4857
+ }[];
4858
+ constructor(fb: FormBuilder, transloco: TranslocoService);
4859
+ ngOnChanges(changes: SimpleChanges): void;
4860
+ private applyPaymentMethodRestriction;
4861
+ onClose(): void;
4862
+ onSubmit(): void;
4863
+ static ɵfac: i0.ɵɵFactoryDeclaration<VipRechargeModalComponent, never>;
4864
+ static ɵcmp: i0.ɵɵComponentDeclaration<VipRechargeModalComponent, "vip-recharge-modal", never, { "title": { "alias": "title"; "required": false; }; "submitLabel": { "alias": "submitLabel"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "amountStep": { "alias": "amountStep"; "required": false; }; "minAmount": { "alias": "minAmount"; "required": false; }; "maxAmount": { "alias": "maxAmount"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "restrictToMercadoPago": { "alias": "restrictToMercadoPago"; "required": false; }; }, { "closeModal": "closeModal"; "confirm": "confirm"; }, never, never, true, never>;
4865
+ }
4866
+
4867
+ declare class VipTransactionsTableComponent {
4868
+ transactions: VipTransaction[];
4869
+ loading: boolean;
4870
+ typeLabel(type: VipTransactionType): string;
4871
+ static ɵfac: i0.ɵɵFactoryDeclaration<VipTransactionsTableComponent, never>;
4872
+ static ɵcmp: i0.ɵɵComponentDeclaration<VipTransactionsTableComponent, "vip-transactions-table", never, { "transactions": { "alias": "transactions"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; }, {}, never, never, true, never>;
4873
+ }
4874
+
4875
+ export { ADMIN_API_ROUTES, ADMISSION_API_ROUTES, ALERT_ICONS, AdminLayoutComponent, AdminNavbarComponent, 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, PerformanceVisibilityType, PerformancesListEventsService, PhoneInputComponent, PriceZoneEventService, PriceZoneFormModalService, PriceZoneSelectComponent, PriceZoneService, ProductCategoryService, ProductMultiSelectComponent, ProductSelectComponent, ProductService, ProductTagService, ProductTypeService, PublicLayoutComponent, PurchaseLimitService, QuickStatusEditComponent, RoomMapElementOrientation, RoomMapElementType, SHOWS_API_ROUTES, STATE_API_ENDPOINTS, SeatAvailabilitySseService, SeatSelectionEmptySummaryComponent, SeatSelectionSummaryComponent, SeatSelectionSummaryItemComponent, SelectedDiscountCardType, ShowCardComponent, ShowCardSkeletonComponent, ShowMultiSelectComponent, ShowSelectComponent, ShowService, ShowTypeBadgeComponent, ShowsFilterComponent, SidebarMenuComponent, SidebarStateService, 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_PRICE_ZONE_FILTER_OPACITY, 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, drawHappyFace, drawRoundedRect, drawWheelchairIcon, emailValidator, findElementAtPosition, findTicketAtPosition, formatCitiesResponseToSelect, generateExitScene, generateHallwayScene, generateProductionAreaScene, generateSeatBlockScene, generateSeatBlockTicketScene, generateStageScene, generateStairScene, generateTableScene, generateTableTicketScene, generateUnavailableSpaceScene, generateZoneScene, getAdminFullname, getBrowserLanguage, getCustomerBenefitToasts, getCustomerFullname, getItemTypeIcon, getOrderDiscount, getStoredLanguage, numberToLetter, parseJsonToFormDataAdvanced, phoneCountryFlag, processElementsToRenderData, provideTickeraComponents, resolveLanguage, setStoredLanguage, ticketCanOpenQr, tintColor, transformImageToFile, transformUrlParams };
4876
+ export type { ActivateVipCardParams, Admin, AdminsResponse, AdmissionEventMessage, AdmissionJoinResponse, AdmissionStatus, AsyncSelectConfig, Auditable, BadgeColor, BadgeSize, BenefitToastMessage, BreadcrumbStep, BreadcrumbTheme, CitiesResponse, City, CityResponse, CommonFetchAllParams, CorporateBond, CorporateBondCode, CorporateBondResponse, CountriesResponse, Country, CountryResponse, Coupon, CouponResponse, CreatePedagogicOrderPayload, Customer, CustomerBenefitApplicableShow, CustomerBenefitSubscription, CustomerBenefitVenueChain, CustomerBenefits, CustomerBenefitsPerspective, CustomerResponse, CustomersResponse, DailyPerformanceHall, DailyPerformanceItem, DailyPerformancePriceZone, DailyPerformanceShow, DailyPerformanceVenue, DailyPerformancesResponse, DeleteConfirmationOpen, DragDropEvent, DynamicTableHeader, ElementPropertiesTab, ElementRenderData, FeedbackModalElement, FeedbackModalType, FetchAdminsParams, FetchCitiesParams, FetchCountriesParams, FetchCustomersParams, FetchDailyPerformancesParams, FetchProductCategoriesParams, FetchProductTagsParams, FetchProductTypesParams, FetchProductsParams, FetchShowCategoriesParams, FetchShowGendersParams, FetchShowTypesParams, FetchShowsParams, FetchStatesParams, FetchVipCardsParams, FileUploadConfig, FindAllPerformancesParams, FindAllPriceZoneParams, GiftBond, GiftBondImage, GiftBondPurchase, GiftBondPurchaseResponse, GiftBondPurchasesResponse, GiftBondResponse, GiftBondsResponse, Hall, HallFloor, HallFloorOption, IdentityDocumentType, KonvaShapeConfig, Membership, MercadoPagoPreference, ModalSize, NumerationConfig, Order, OrderBillingInfo, OrderDiscountInfo, OrderDiscountType, OrderItem, OrderPerformanceSnapshot, OrderResponse, OrderShowSnapshot, OrdersResponse, PedagogicAvailabilityResponse, PedagogicZoneAvailability, Performance, PerformanceAvailableDay, PerformanceBookingDataResponse, PerformanceResponse, PerformanceTicket, PerformancesAvailableDaysResponse, PerformancesResponseInterface, PhoneCountry, PriceZone, PriceZoneResponse, PriceZoneUpdateResponse, PriceZonesResponseInterface, Product, ProductCategoriesResponse, ProductCategory, ProductCategoryResponse, ProductImage, ProductResponse, ProductTag, ProductTagResponse, ProductTagsResponse, ProductTaxonomy, ProductType, ProductTypeResponse, ProductTypesResponse, ProductsResponseInterface, QrTokenData, QrTokenResponse, RecentOrder, RecentRoomMap, ReservePerformanceDto, RoomMap, RoomMapBaseElement, RoomMapCanvasConfiguration, RoomMapCanvasElement, RoomMapChairPosition, RoomMapElementTemplate, RoomMapExitElement, RoomMapGridPosition, RoomMapPosition, RoomMapProductionAreaElement, RoomMapSeatDisplayState, RoomMapSeatElement, RoomMapSeatState, RoomMapSize, RoomMapStageElement, RoomMapTableElement, RoomMapUnavailableElement, RoomMapZoneElement, SeatEventMessage, SeatStatusUpdate, SelectOption, SelectedDiscountCard, Show, ShowCategoriesResponse, ShowCategory, ShowCategoryResponse, ShowGender, ShowGenderResponse, ShowGendersResponse, ShowImage, ShowResponse, ShowType, ShowTypeResponse, ShowTypesResponse, ShowsResponseInterface, SidebarMenuItem, State, StateResponse, StatesResponse, TextFontSize, TickeraComponentsConfig, TicketMapSeatPosition, TicketMapTableChairPosition, TicketMapTooltipData, TicketMapZoneQuantityState, TicketMapZoomConfig, Transaction, UploadedFile, ValidateCorporateBondResponse, ValidateCouponResponse, ValidateGiftBondResponse, Venue, VenueImage, VipCard, VipCardResponse, VipCardsResponse, VipCategorySnapshot, VipOrderResponse, VipRechargeConfirmPayload, VipTransaction, VipTransactionsResponse };