tickera-angular-components 0.0.1-dev.132 → 0.0.1-dev.134

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, makeEnvironmentProviders, PLATFORM_ID, Inject, Injectable, signal, LOCALE_ID, computed, inject, EventEmitter, Input, Output, Component, ViewEncapsulation, HostListener, Self, Optional, Injector, forwardRef, effect, untracked, ViewChild } from '@angular/core';
3
- import * as i2 from '@jsverse/transloco';
3
+ import * as i1$3 from '@jsverse/transloco';
4
4
  import { provideTransloco, TranslocoModule, TranslocoService } from '@jsverse/transloco';
5
5
  import { from, throwError, BehaviorSubject, Subject, of, takeUntil as takeUntil$1 } from 'rxjs';
6
6
  import * as i1$1 from '@angular/common';
@@ -14,13 +14,13 @@ import { HttpHeaders } from '@angular/common/http';
14
14
  import { catchError, distinctUntilChanged, debounceTime, switchMap, takeUntil, map } from 'rxjs/operators';
15
15
  import { toast } from 'ngx-sonner';
16
16
  import { toObservable } from '@angular/core/rxjs-interop';
17
- import * as i3 from '@angular/router';
17
+ import * as i3$1 from '@angular/router';
18
18
  import { RouterLink, RouterModule } from '@angular/router';
19
19
  import * as i1$2 from '@angular/forms';
20
20
  import { FormsModule, ReactiveFormsModule, Validators, NgControl, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
21
- import { DEFAULT_TOOLBAR, Editor, toHTML, NgxEditorComponent, NgxEditorMenuComponent } from 'ngx-editor';
22
- import * as i2$1 from '@ng-select/ng-select';
21
+ import * as i3 from '@ng-select/ng-select';
23
22
  import { NgSelectModule } from '@ng-select/ng-select';
23
+ import { DEFAULT_TOOLBAR, Editor, toHTML, NgxEditorComponent, NgxEditorMenuComponent } from 'ngx-editor';
24
24
  import { StageComponent, CoreShapeComponent } from 'ng2-konva';
25
25
  import QRCode from 'qrcode';
26
26
 
@@ -40,6 +40,10 @@ var numberInput$1 = {
40
40
  increment: "Incrementar valor",
41
41
  decrement: "Disminuir valor"
42
42
  };
43
+ var phoneInput$1 = {
44
+ label: "Teléfono",
45
+ placeholder: "Número de teléfono"
46
+ };
43
47
  var common$1 = {
44
48
  selectOption: "Seleccionar opción",
45
49
  showMore: "Ver más",
@@ -191,6 +195,7 @@ var vipCard$1 = {
191
195
  var es = {
192
196
  formErrors: formErrors$1,
193
197
  numberInput: numberInput$1,
198
+ phoneInput: phoneInput$1,
194
199
  common: common$1,
195
200
  fileUpload: fileUpload$1,
196
201
  deleteConfirmation: deleteConfirmation$1,
@@ -203,8 +208,8 @@ var es = {
203
208
 
204
209
  var formErrors = {
205
210
  required: "This field is required",
206
- minlength: "Must be at least {{minLength}} characters",
207
- maxlength: "Must not exceed {{maxLength}} characters",
211
+ minlength: "Must be at least {{length}} characters",
212
+ maxlength: "Must not exceed {{length}} characters",
208
213
  pattern: "Invalid format",
209
214
  email: "Invalid format",
210
215
  mustMatch: "Passwords do not match",
@@ -217,6 +222,10 @@ var numberInput = {
217
222
  increment: "Increase value",
218
223
  decrement: "Decrease value"
219
224
  };
225
+ var phoneInput = {
226
+ label: "Phone",
227
+ placeholder: "Phone number"
228
+ };
220
229
  var common = {
221
230
  selectOption: "Select option",
222
231
  showMore: "Show more",
@@ -368,6 +377,7 @@ var vipCard = {
368
377
  var en = {
369
378
  formErrors: formErrors,
370
379
  numberInput: numberInput,
380
+ phoneInput: phoneInput,
371
381
  common: common,
372
382
  fileUpload: fileUpload,
373
383
  deleteConfirmation: deleteConfirmation,
@@ -656,6 +666,241 @@ const BASE_INPUT_CLASSES = [
656
666
  ].join(' ');
657
667
  const ERROR_INPUT_CLASSES = BASE_INPUT_CLASSES + ' outline-red-500 dark:outline-red-500';
658
668
 
669
+ function phoneCountryFlag(isoCode) {
670
+ return isoCode
671
+ .toUpperCase()
672
+ .replace(/./g, (char) => String.fromCodePoint(127397 + char.charCodeAt(0)));
673
+ }
674
+ const PHONE_COUNTRIES = [
675
+ { name: 'Afganistán', isoCode: 'AF', dialCode: '+93' },
676
+ { name: 'Albania', isoCode: 'AL', dialCode: '+355' },
677
+ { name: 'Alemania', isoCode: 'DE', dialCode: '+49' },
678
+ { name: 'Andorra', isoCode: 'AD', dialCode: '+376' },
679
+ { name: 'Angola', isoCode: 'AO', dialCode: '+244' },
680
+ { name: 'Anguila', isoCode: 'AI', dialCode: '+1' },
681
+ { name: 'Antigua y Barbuda', isoCode: 'AG', dialCode: '+1' },
682
+ { name: 'Arabia Saudita', isoCode: 'SA', dialCode: '+966' },
683
+ { name: 'Argelia', isoCode: 'DZ', dialCode: '+213' },
684
+ { name: 'Argentina', isoCode: 'AR', dialCode: '+54' },
685
+ { name: 'Armenia', isoCode: 'AM', dialCode: '+374' },
686
+ { name: 'Aruba', isoCode: 'AW', dialCode: '+297' },
687
+ { name: 'Australia', isoCode: 'AU', dialCode: '+61' },
688
+ { name: 'Austria', isoCode: 'AT', dialCode: '+43' },
689
+ { name: 'Azerbaiyán', isoCode: 'AZ', dialCode: '+994' },
690
+ { name: 'Bahamas', isoCode: 'BS', dialCode: '+1' },
691
+ { name: 'Bangladés', isoCode: 'BD', dialCode: '+880' },
692
+ { name: 'Barbados', isoCode: 'BB', dialCode: '+1' },
693
+ { name: 'Baréin', isoCode: 'BH', dialCode: '+973' },
694
+ { name: 'Bélgica', isoCode: 'BE', dialCode: '+32' },
695
+ { name: 'Belice', isoCode: 'BZ', dialCode: '+501' },
696
+ { name: 'Benín', isoCode: 'BJ', dialCode: '+229' },
697
+ { name: 'Bermudas', isoCode: 'BM', dialCode: '+1' },
698
+ { name: 'Bielorrusia', isoCode: 'BY', dialCode: '+375' },
699
+ { name: 'Bolivia', isoCode: 'BO', dialCode: '+591' },
700
+ { name: 'Bosnia y Herzegovina', isoCode: 'BA', dialCode: '+387' },
701
+ { name: 'Botsuana', isoCode: 'BW', dialCode: '+267' },
702
+ { name: 'Brasil', isoCode: 'BR', dialCode: '+55' },
703
+ { name: 'Brunéi', isoCode: 'BN', dialCode: '+673' },
704
+ { name: 'Bulgaria', isoCode: 'BG', dialCode: '+359' },
705
+ { name: 'Burkina Faso', isoCode: 'BF', dialCode: '+226' },
706
+ { name: 'Burundi', isoCode: 'BI', dialCode: '+257' },
707
+ { name: 'Bután', isoCode: 'BT', dialCode: '+975' },
708
+ { name: 'Cabo Verde', isoCode: 'CV', dialCode: '+238' },
709
+ { name: 'Camboya', isoCode: 'KH', dialCode: '+855' },
710
+ { name: 'Camerún', isoCode: 'CM', dialCode: '+237' },
711
+ { name: 'Canadá', isoCode: 'CA', dialCode: '+1' },
712
+ { name: 'Chad', isoCode: 'TD', dialCode: '+235' },
713
+ { name: 'Chile', isoCode: 'CL', dialCode: '+56' },
714
+ { name: 'China', isoCode: 'CN', dialCode: '+86' },
715
+ { name: 'Chipre', isoCode: 'CY', dialCode: '+357' },
716
+ { name: 'Colombia', isoCode: 'CO', dialCode: '+57' },
717
+ { name: 'Comoras', isoCode: 'KM', dialCode: '+269' },
718
+ { name: 'Congo', isoCode: 'CG', dialCode: '+242' },
719
+ { name: 'Corea del Norte', isoCode: 'KP', dialCode: '+850' },
720
+ { name: 'Corea del Sur', isoCode: 'KR', dialCode: '+82' },
721
+ { name: 'Costa de Marfil', isoCode: 'CI', dialCode: '+225' },
722
+ { name: 'Costa Rica', isoCode: 'CR', dialCode: '+506' },
723
+ { name: 'Croacia', isoCode: 'HR', dialCode: '+385' },
724
+ { name: 'Cuba', isoCode: 'CU', dialCode: '+53' },
725
+ { name: 'Curazao', isoCode: 'CW', dialCode: '+599' },
726
+ { name: 'Dinamarca', isoCode: 'DK', dialCode: '+45' },
727
+ { name: 'Dominica', isoCode: 'DM', dialCode: '+1' },
728
+ { name: 'Ecuador', isoCode: 'EC', dialCode: '+593' },
729
+ { name: 'Egipto', isoCode: 'EG', dialCode: '+20' },
730
+ { name: 'El Salvador', isoCode: 'SV', dialCode: '+503' },
731
+ { name: 'Emiratos Árabes Unidos', isoCode: 'AE', dialCode: '+971' },
732
+ { name: 'Eritrea', isoCode: 'ER', dialCode: '+291' },
733
+ { name: 'Eslovaquia', isoCode: 'SK', dialCode: '+421' },
734
+ { name: 'Eslovenia', isoCode: 'SI', dialCode: '+386' },
735
+ { name: 'España', isoCode: 'ES', dialCode: '+34' },
736
+ { name: 'Estados Unidos', isoCode: 'US', dialCode: '+1' },
737
+ { name: 'Estonia', isoCode: 'EE', dialCode: '+372' },
738
+ { name: 'Esuatini', isoCode: 'SZ', dialCode: '+268' },
739
+ { name: 'Etiopía', isoCode: 'ET', dialCode: '+251' },
740
+ { name: 'Filipinas', isoCode: 'PH', dialCode: '+63' },
741
+ { name: 'Finlandia', isoCode: 'FI', dialCode: '+358' },
742
+ { name: 'Fiyi', isoCode: 'FJ', dialCode: '+679' },
743
+ { name: 'Francia', isoCode: 'FR', dialCode: '+33' },
744
+ { name: 'Gabón', isoCode: 'GA', dialCode: '+241' },
745
+ { name: 'Gambia', isoCode: 'GM', dialCode: '+220' },
746
+ { name: 'Georgia', isoCode: 'GE', dialCode: '+995' },
747
+ { name: 'Ghana', isoCode: 'GH', dialCode: '+233' },
748
+ { name: 'Gibraltar', isoCode: 'GI', dialCode: '+350' },
749
+ { name: 'Granada', isoCode: 'GD', dialCode: '+1' },
750
+ { name: 'Grecia', isoCode: 'GR', dialCode: '+30' },
751
+ { name: 'Groenlandia', isoCode: 'GL', dialCode: '+299' },
752
+ { name: 'Guadalupe', isoCode: 'GP', dialCode: '+590' },
753
+ { name: 'Guam', isoCode: 'GU', dialCode: '+1' },
754
+ { name: 'Guatemala', isoCode: 'GT', dialCode: '+502' },
755
+ { name: 'Guayana Francesa', isoCode: 'GF', dialCode: '+594' },
756
+ { name: 'Guinea', isoCode: 'GN', dialCode: '+224' },
757
+ { name: 'Guinea-Bisáu', isoCode: 'GW', dialCode: '+245' },
758
+ { name: 'Guinea Ecuatorial', isoCode: 'GQ', dialCode: '+240' },
759
+ { name: 'Guyana', isoCode: 'GY', dialCode: '+592' },
760
+ { name: 'Haití', isoCode: 'HT', dialCode: '+509' },
761
+ { name: 'Honduras', isoCode: 'HN', dialCode: '+504' },
762
+ { name: 'Hong Kong', isoCode: 'HK', dialCode: '+852' },
763
+ { name: 'Hungría', isoCode: 'HU', dialCode: '+36' },
764
+ { name: 'India', isoCode: 'IN', dialCode: '+91' },
765
+ { name: 'Indonesia', isoCode: 'ID', dialCode: '+62' },
766
+ { name: 'Irak', isoCode: 'IQ', dialCode: '+964' },
767
+ { name: 'Irán', isoCode: 'IR', dialCode: '+98' },
768
+ { name: 'Irlanda', isoCode: 'IE', dialCode: '+353' },
769
+ { name: 'Islandia', isoCode: 'IS', dialCode: '+354' },
770
+ { name: 'Islas Caimán', isoCode: 'KY', dialCode: '+1' },
771
+ { name: 'Islas Cook', isoCode: 'CK', dialCode: '+682' },
772
+ { name: 'Islas Feroe', isoCode: 'FO', dialCode: '+298' },
773
+ { name: 'Islas Malvinas', isoCode: 'FK', dialCode: '+500' },
774
+ { name: 'Islas Marianas del Norte', isoCode: 'MP', dialCode: '+1' },
775
+ { name: 'Islas Marshall', isoCode: 'MH', dialCode: '+692' },
776
+ { name: 'Islas Salomón', isoCode: 'SB', dialCode: '+677' },
777
+ { name: 'Islas Vírgenes Británicas', isoCode: 'VG', dialCode: '+1' },
778
+ { name: 'Islas Vírgenes de EE. UU.', isoCode: 'VI', dialCode: '+1' },
779
+ { name: 'Israel', isoCode: 'IL', dialCode: '+972' },
780
+ { name: 'Italia', isoCode: 'IT', dialCode: '+39' },
781
+ { name: 'Jamaica', isoCode: 'JM', dialCode: '+1' },
782
+ { name: 'Japón', isoCode: 'JP', dialCode: '+81' },
783
+ { name: 'Jordania', isoCode: 'JO', dialCode: '+962' },
784
+ { name: 'Kazajistán', isoCode: 'KZ', dialCode: '+7' },
785
+ { name: 'Kenia', isoCode: 'KE', dialCode: '+254' },
786
+ { name: 'Kirguistán', isoCode: 'KG', dialCode: '+996' },
787
+ { name: 'Kiribati', isoCode: 'KI', dialCode: '+686' },
788
+ { name: 'Kosovo', isoCode: 'XK', dialCode: '+383' },
789
+ { name: 'Kuwait', isoCode: 'KW', dialCode: '+965' },
790
+ { name: 'Laos', isoCode: 'LA', dialCode: '+856' },
791
+ { name: 'Lesoto', isoCode: 'LS', dialCode: '+266' },
792
+ { name: 'Letonia', isoCode: 'LV', dialCode: '+371' },
793
+ { name: 'Líbano', isoCode: 'LB', dialCode: '+961' },
794
+ { name: 'Liberia', isoCode: 'LR', dialCode: '+231' },
795
+ { name: 'Libia', isoCode: 'LY', dialCode: '+218' },
796
+ { name: 'Liechtenstein', isoCode: 'LI', dialCode: '+423' },
797
+ { name: 'Lituania', isoCode: 'LT', dialCode: '+370' },
798
+ { name: 'Luxemburgo', isoCode: 'LU', dialCode: '+352' },
799
+ { name: 'Macao', isoCode: 'MO', dialCode: '+853' },
800
+ { name: 'Macedonia del Norte', isoCode: 'MK', dialCode: '+389' },
801
+ { name: 'Madagascar', isoCode: 'MG', dialCode: '+261' },
802
+ { name: 'Malasia', isoCode: 'MY', dialCode: '+60' },
803
+ { name: 'Malaui', isoCode: 'MW', dialCode: '+265' },
804
+ { name: 'Maldivas', isoCode: 'MV', dialCode: '+960' },
805
+ { name: 'Malí', isoCode: 'ML', dialCode: '+223' },
806
+ { name: 'Malta', isoCode: 'MT', dialCode: '+356' },
807
+ { name: 'Marruecos', isoCode: 'MA', dialCode: '+212' },
808
+ { name: 'Martinica', isoCode: 'MQ', dialCode: '+596' },
809
+ { name: 'Mauricio', isoCode: 'MU', dialCode: '+230' },
810
+ { name: 'Mauritania', isoCode: 'MR', dialCode: '+222' },
811
+ { name: 'México', isoCode: 'MX', dialCode: '+52' },
812
+ { name: 'Micronesia', isoCode: 'FM', dialCode: '+691' },
813
+ { name: 'Moldavia', isoCode: 'MD', dialCode: '+373' },
814
+ { name: 'Mónaco', isoCode: 'MC', dialCode: '+377' },
815
+ { name: 'Mongolia', isoCode: 'MN', dialCode: '+976' },
816
+ { name: 'Montenegro', isoCode: 'ME', dialCode: '+382' },
817
+ { name: 'Montserrat', isoCode: 'MS', dialCode: '+1' },
818
+ { name: 'Mozambique', isoCode: 'MZ', dialCode: '+258' },
819
+ { name: 'Myanmar', isoCode: 'MM', dialCode: '+95' },
820
+ { name: 'Namibia', isoCode: 'NA', dialCode: '+264' },
821
+ { name: 'Nauru', isoCode: 'NR', dialCode: '+674' },
822
+ { name: 'Nepal', isoCode: 'NP', dialCode: '+977' },
823
+ { name: 'Nicaragua', isoCode: 'NI', dialCode: '+505' },
824
+ { name: 'Níger', isoCode: 'NE', dialCode: '+227' },
825
+ { name: 'Nigeria', isoCode: 'NG', dialCode: '+234' },
826
+ { name: 'Niue', isoCode: 'NU', dialCode: '+683' },
827
+ { name: 'Noruega', isoCode: 'NO', dialCode: '+47' },
828
+ { name: 'Nueva Caledonia', isoCode: 'NC', dialCode: '+687' },
829
+ { name: 'Nueva Zelanda', isoCode: 'NZ', dialCode: '+64' },
830
+ { name: 'Omán', isoCode: 'OM', dialCode: '+968' },
831
+ { name: 'Países Bajos', isoCode: 'NL', dialCode: '+31' },
832
+ { name: 'Pakistán', isoCode: 'PK', dialCode: '+92' },
833
+ { name: 'Palaos', isoCode: 'PW', dialCode: '+680' },
834
+ { name: 'Panamá', isoCode: 'PA', dialCode: '+507' },
835
+ { name: 'Papúa Nueva Guinea', isoCode: 'PG', dialCode: '+675' },
836
+ { name: 'Paraguay', isoCode: 'PY', dialCode: '+595' },
837
+ { name: 'Perú', isoCode: 'PE', dialCode: '+51' },
838
+ { name: 'Polinesia Francesa', isoCode: 'PF', dialCode: '+689' },
839
+ { name: 'Polonia', isoCode: 'PL', dialCode: '+48' },
840
+ { name: 'Portugal', isoCode: 'PT', dialCode: '+351' },
841
+ { name: 'Puerto Rico', isoCode: 'PR', dialCode: '+1' },
842
+ { name: 'Qatar', isoCode: 'QA', dialCode: '+974' },
843
+ { name: 'Reino Unido', isoCode: 'GB', dialCode: '+44' },
844
+ { name: 'República Centroafricana', isoCode: 'CF', dialCode: '+236' },
845
+ { name: 'República Checa', isoCode: 'CZ', dialCode: '+420' },
846
+ { name: 'República Democrática del Congo', isoCode: 'CD', dialCode: '+243' },
847
+ { name: 'República Dominicana', isoCode: 'DO', dialCode: '+1' },
848
+ { name: 'Reunión', isoCode: 'RE', dialCode: '+262' },
849
+ { name: 'Ruanda', isoCode: 'RW', dialCode: '+250' },
850
+ { name: 'Rumania', isoCode: 'RO', dialCode: '+40' },
851
+ { name: 'Rusia', isoCode: 'RU', dialCode: '+7' },
852
+ { name: 'Samoa', isoCode: 'WS', dialCode: '+685' },
853
+ { name: 'Samoa Americana', isoCode: 'AS', dialCode: '+1' },
854
+ { name: 'San Cristóbal y Nieves', isoCode: 'KN', dialCode: '+1' },
855
+ { name: 'San Marino', isoCode: 'SM', dialCode: '+378' },
856
+ { name: 'San Martín (Francia)', isoCode: 'MF', dialCode: '+590' },
857
+ { name: 'San Pedro y Miquelón', isoCode: 'PM', dialCode: '+508' },
858
+ { name: 'San Vicente y las Granadinas', isoCode: 'VC', dialCode: '+1' },
859
+ { name: 'Santa Elena', isoCode: 'SH', dialCode: '+290' },
860
+ { name: 'Santa Lucía', isoCode: 'LC', dialCode: '+1' },
861
+ { name: 'Santo Tomé y Príncipe', isoCode: 'ST', dialCode: '+239' },
862
+ { name: 'Senegal', isoCode: 'SN', dialCode: '+221' },
863
+ { name: 'Serbia', isoCode: 'RS', dialCode: '+381' },
864
+ { name: 'Seychelles', isoCode: 'SC', dialCode: '+248' },
865
+ { name: 'Sierra Leona', isoCode: 'SL', dialCode: '+232' },
866
+ { name: 'Singapur', isoCode: 'SG', dialCode: '+65' },
867
+ { name: 'Siria', isoCode: 'SY', dialCode: '+963' },
868
+ { name: 'Somalia', isoCode: 'SO', dialCode: '+252' },
869
+ { name: 'Sri Lanka', isoCode: 'LK', dialCode: '+94' },
870
+ { name: 'Sudáfrica', isoCode: 'ZA', dialCode: '+27' },
871
+ { name: 'Sudán', isoCode: 'SD', dialCode: '+249' },
872
+ { name: 'Sudán del Sur', isoCode: 'SS', dialCode: '+211' },
873
+ { name: 'Suecia', isoCode: 'SE', dialCode: '+46' },
874
+ { name: 'Suiza', isoCode: 'CH', dialCode: '+41' },
875
+ { name: 'Surinam', isoCode: 'SR', dialCode: '+597' },
876
+ { name: 'Svalbard y Jan Mayen', isoCode: 'SJ', dialCode: '+47' },
877
+ { name: 'Tailandia', isoCode: 'TH', dialCode: '+66' },
878
+ { name: 'Taiwán', isoCode: 'TW', dialCode: '+886' },
879
+ { name: 'Tanzania', isoCode: 'TZ', dialCode: '+255' },
880
+ { name: 'Tayikistán', isoCode: 'TJ', dialCode: '+992' },
881
+ { name: 'Territorio Británico del Océano Índico', isoCode: 'IO', dialCode: '+246' },
882
+ { name: 'Timor Oriental', isoCode: 'TL', dialCode: '+670' },
883
+ { name: 'Togo', isoCode: 'TG', dialCode: '+228' },
884
+ { name: 'Tonga', isoCode: 'TO', dialCode: '+676' },
885
+ { name: 'Trinidad y Tobago', isoCode: 'TT', dialCode: '+1' },
886
+ { name: 'Túnez', isoCode: 'TN', dialCode: '+216' },
887
+ { name: 'Turkmenistán', isoCode: 'TM', dialCode: '+993' },
888
+ { name: 'Turquía', isoCode: 'TR', dialCode: '+90' },
889
+ { name: 'Tuvalu', isoCode: 'TV', dialCode: '+688' },
890
+ { name: 'Ucrania', isoCode: 'UA', dialCode: '+380' },
891
+ { name: 'Uganda', isoCode: 'UG', dialCode: '+256' },
892
+ { name: 'Uruguay', isoCode: 'UY', dialCode: '+598' },
893
+ { name: 'Uzbekistán', isoCode: 'UZ', dialCode: '+998' },
894
+ { name: 'Vanuatu', isoCode: 'VU', dialCode: '+678' },
895
+ { name: 'Vaticano', isoCode: 'VA', dialCode: '+39' },
896
+ { name: 'Venezuela', isoCode: 'VE', dialCode: '+58' },
897
+ { name: 'Vietnam', isoCode: 'VN', dialCode: '+84' },
898
+ { name: 'Yemen', isoCode: 'YE', dialCode: '+967' },
899
+ { name: 'Yibuti', isoCode: 'DJ', dialCode: '+253' },
900
+ { name: 'Zambia', isoCode: 'ZM', dialCode: '+260' },
901
+ { name: 'Zimbabue', isoCode: 'ZW', dialCode: '+263' },
902
+ ];
903
+
659
904
  const DOCUMENT_TYPES_OPTIONS = [
660
905
  { value: 'CC', label: 'common.documentTypes.cc' },
661
906
  { value: 'CE', label: 'common.documentTypes.ce' },
@@ -2346,10 +2591,7 @@ class ApiService {
2346
2591
  return throwError(() => error);
2347
2592
  }
2348
2593
  get(path) {
2349
- const headers = this.getHeaders(this.validateContentType(null));
2350
- return this.http
2351
- .get(`${this.apiUrl}${path}`, { headers })
2352
- .pipe(catchError(this.handleError.bind(this)));
2594
+ return this.http.get(`${this.apiUrl}${path}`).pipe(catchError(this.handleError.bind(this)));
2353
2595
  }
2354
2596
  post(path, body) {
2355
2597
  const headers = this.getHeaders(this.validateContentType(body));
@@ -4397,17 +4639,17 @@ class FormInputComponent {
4397
4639
  }
4398
4640
  return baseClasses;
4399
4641
  }
4400
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormInputComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
4401
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: FormInputComponent, isStandalone: true, selector: "form-input", inputs: { label: "label", type: "type", name: "name", id: "id", placeholder: "placeholder", required: "required", readonly: "readonly", maxlength: "maxlength", minlength: "minlength", max: "max", min: "min", step: "step", pattern: "pattern", fieldGroupClass: "fieldGroupClass", autocomplete: "autocomplete" }, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"form-input-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"form-input-required\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <input\n [type]=\"type\"\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [minlength]=\"minlength\"\n [maxlength]=\"maxlength\"\n [pattern]=\"pattern || ''\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [class.disabled]=\"readonly\"\n [class.error]=\"showError\"\n class=\"form-input\"\n [autocomplete]=\"autocomplete\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n />\n </div>\n\n @if (showError) {\n <div class=\"form-input-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".form-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-input-label{color:#d1d5db}}.form-input{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;padding:.375rem .75rem;outline:1;outline-offset:1;outline-color:#d1d5db;width:100%}.form-input::placeholder{color:#9ca3af}.form-input:focus{outline:2;outline-offset:2;outline-color:#4f46e5}.form-input.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-input.error{background-color:#374151;outline-color:#ef4444}}.form-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-input.disabled{background-color:#374151;color:#d1d5db}}@media screen and (min-width:768px){.form-input{font-size:.875rem}}.form-input-required{color:#ef4444}.form-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }] });
4642
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormInputComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i1$3.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
4643
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: FormInputComponent, isStandalone: true, selector: "form-input", inputs: { label: "label", type: "type", name: "name", id: "id", placeholder: "placeholder", required: "required", readonly: "readonly", maxlength: "maxlength", minlength: "minlength", max: "max", min: "min", step: "step", pattern: "pattern", fieldGroupClass: "fieldGroupClass", autocomplete: "autocomplete" }, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"form-input-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"form-input-required\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <input\n [type]=\"type\"\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [minlength]=\"minlength\"\n [maxlength]=\"maxlength\"\n [pattern]=\"pattern || ''\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [class.disabled]=\"readonly\"\n [class.error]=\"showError\"\n class=\"form-input\"\n [autocomplete]=\"autocomplete\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n />\n </div>\n\n @if (showError) {\n <div class=\"form-input-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".form-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-input-label{color:#d1d5db}}.form-input{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;outline:0;padding:.375rem .75rem;width:100%}.form-input::placeholder{color:#9ca3af}.form-input:focus{border-color:#1f2937}.form-input.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-input.error{background-color:#374151;outline-color:#ef4444}}.form-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-input.disabled{background-color:#374151;color:#d1d5db}}@media screen and (min-width:768px){.form-input{font-size:.875rem}}.form-input-required{color:#ef4444}.form-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }] });
4402
4644
  }
4403
4645
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormInputComponent, decorators: [{
4404
4646
  type: Component,
4405
- args: [{ selector: 'form-input', standalone: true, imports: [FormsModule, CommonModule, ReactiveFormsModule], template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"form-input-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"form-input-required\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <input\n [type]=\"type\"\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [minlength]=\"minlength\"\n [maxlength]=\"maxlength\"\n [pattern]=\"pattern || ''\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [class.disabled]=\"readonly\"\n [class.error]=\"showError\"\n class=\"form-input\"\n [autocomplete]=\"autocomplete\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n />\n </div>\n\n @if (showError) {\n <div class=\"form-input-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".form-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-input-label{color:#d1d5db}}.form-input{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;padding:.375rem .75rem;outline:1;outline-offset:1;outline-color:#d1d5db;width:100%}.form-input::placeholder{color:#9ca3af}.form-input:focus{outline:2;outline-offset:2;outline-color:#4f46e5}.form-input.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-input.error{background-color:#374151;outline-color:#ef4444}}.form-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-input.disabled{background-color:#374151;color:#d1d5db}}@media screen and (min-width:768px){.form-input{font-size:.875rem}}.form-input-required{color:#ef4444}.form-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"] }]
4647
+ args: [{ selector: 'form-input', standalone: true, imports: [FormsModule, CommonModule, ReactiveFormsModule], template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"form-input-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"form-input-required\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <input\n [type]=\"type\"\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [minlength]=\"minlength\"\n [maxlength]=\"maxlength\"\n [pattern]=\"pattern || ''\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [class.disabled]=\"readonly\"\n [class.error]=\"showError\"\n class=\"form-input\"\n [autocomplete]=\"autocomplete\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n />\n </div>\n\n @if (showError) {\n <div class=\"form-input-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".form-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-input-label{color:#d1d5db}}.form-input{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;outline:0;padding:.375rem .75rem;width:100%}.form-input::placeholder{color:#9ca3af}.form-input:focus{border-color:#1f2937}.form-input.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-input.error{background-color:#374151;outline-color:#ef4444}}.form-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-input.disabled{background-color:#374151;color:#d1d5db}}@media screen and (min-width:768px){.form-input{font-size:.875rem}}.form-input-required{color:#ef4444}.form-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"] }]
4406
4648
  }], ctorParameters: () => [{ type: i1$2.NgControl, decorators: [{
4407
4649
  type: Self
4408
4650
  }, {
4409
4651
  type: Optional
4410
- }] }, { type: i2.TranslocoService }], propDecorators: { label: [{
4652
+ }] }, { type: i1$3.TranslocoService }], propDecorators: { label: [{
4411
4653
  type: Input
4412
4654
  }], type: [{
4413
4655
  type: Input
@@ -4481,8 +4723,8 @@ class DeleteConfirmationComponent {
4481
4723
  this.deleteConfirmationForm.reset();
4482
4724
  this.deleteConfirmationService.close();
4483
4725
  }
4484
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DeleteConfirmationComponent, deps: [{ token: i1$2.FormBuilder }, { token: DeleteConfirmationService }, { token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
4485
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: DeleteConfirmationComponent, isStandalone: true, selector: "delete-confirmation", ngImport: i0, template: "@if (isOpen()) {\n <app-modal\n [title]=\"title\"\n [isOpen]=\"isOpen\"\n (closeModal)=\"onCloseModal()\"\n [interactiveClose]=\"false\"\n >\n <form\n [formGroup]=\"deleteConfirmationForm\"\n method=\"POST\"\n class=\"delete-confirmation-content\"\n (ngSubmit)=\"onConfirmDelete()\"\n >\n <app-alert\n type=\"warning\"\n [text]=\"'deleteConfirmation.warning' | transloco\"\n size=\"sm\"\n [closeable]=\"false\"\n />\n\n <p class=\"delete-confirmation-instructions\">\n {{ 'deleteConfirmation.instructions' | transloco }}\n\n <span class=\"delete-confirmation-highlight\">\n {{ confirmationText }}\n </span>\n </p>\n\n <form-input\n name=\"confirmationText\"\n type=\"text\"\n class=\"delete-confirmation-field\"\n [required]=\"true\"\n [autocomplete]=\"false\"\n formControlName=\"confirmationText\"\n [placeholder]=\"\n transloco.translate('deleteConfirmation.placeholder', { text: confirmationText })\n \"\n />\n\n <div class=\"delete-confirmation-actions\">\n <app-button\n variant=\"tertiary\"\n [text]=\"'deleteConfirmation.cancel' | transloco\"\n (click)=\"onCloseModal()\"\n size=\"sm\"\n />\n\n <app-button\n type=\"submit\"\n variant=\"primary\"\n [text]=\"'deleteConfirmation.delete' | transloco\"\n [disabled]=\"!isConfirmationValid\"\n size=\"sm\"\n />\n </div>\n </form>\n </app-modal>\n}\n", styles: [".delete-confirmation-content{display:flex;flex-direction:column;gap:1rem;animation:slideUp .3s ease-out}.delete-confirmation-instructions{font-size:.75rem;color:#4b5563;margin:0}@media(prefers-color-scheme:dark){.delete-confirmation-instructions{color:#9ca3af}}.delete-confirmation-highlight{display:inline-flex;align-items:center;gap:.25rem;padding:.25rem .5rem;margin-top:.25rem;background-color:#e5e7eb;color:#dc2626;font-weight:600;font-size:.875rem;border-radius:.375rem}@media(prefers-color-scheme:dark){.delete-confirmation-highlight{background-color:#374151}}.delete-confirmation-field{flex:1}.delete-confirmation-actions{display:flex;gap:.75rem}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: FormInputComponent, selector: "form-input", inputs: ["label", "type", "name", "id", "placeholder", "required", "readonly", "maxlength", "minlength", "max", "min", "step", "pattern", "fieldGroupClass", "autocomplete"] }, { kind: "component", type: AppModalComponent, selector: "app-modal", inputs: ["title", "disableClose", "showHeader", "showCloseButton", "showTitle", "interactiveClose", "isOpen", "size"], outputs: ["closeModal"] }, { kind: "component", type: AppAlertComponent, selector: "app-alert", inputs: ["type", "text", "closeable", "size"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
4726
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DeleteConfirmationComponent, deps: [{ token: i1$2.FormBuilder }, { token: DeleteConfirmationService }, { token: i1$3.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
4727
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: DeleteConfirmationComponent, isStandalone: true, selector: "delete-confirmation", ngImport: i0, template: "@if (isOpen()) {\n <app-modal\n [title]=\"title\"\n [isOpen]=\"isOpen\"\n (closeModal)=\"onCloseModal()\"\n [interactiveClose]=\"false\"\n >\n <form\n [formGroup]=\"deleteConfirmationForm\"\n method=\"POST\"\n class=\"delete-confirmation-content\"\n (ngSubmit)=\"onConfirmDelete()\"\n >\n <app-alert\n type=\"warning\"\n [text]=\"'deleteConfirmation.warning' | transloco\"\n size=\"sm\"\n [closeable]=\"false\"\n />\n\n <p class=\"delete-confirmation-instructions\">\n {{ 'deleteConfirmation.instructions' | transloco }}\n\n <span class=\"delete-confirmation-highlight\">\n {{ confirmationText }}\n </span>\n </p>\n\n <form-input\n name=\"confirmationText\"\n type=\"text\"\n class=\"delete-confirmation-field\"\n [required]=\"true\"\n [autocomplete]=\"false\"\n formControlName=\"confirmationText\"\n [placeholder]=\"\n transloco.translate('deleteConfirmation.placeholder', { text: confirmationText })\n \"\n />\n\n <div class=\"delete-confirmation-actions\">\n <app-button\n variant=\"tertiary\"\n [text]=\"'deleteConfirmation.cancel' | transloco\"\n (click)=\"onCloseModal()\"\n size=\"sm\"\n />\n\n <app-button\n type=\"submit\"\n variant=\"primary\"\n [text]=\"'deleteConfirmation.delete' | transloco\"\n [disabled]=\"!isConfirmationValid\"\n size=\"sm\"\n />\n </div>\n </form>\n </app-modal>\n}\n", styles: [".delete-confirmation-content{display:flex;flex-direction:column;gap:1rem;animation:slideUp .3s ease-out}.delete-confirmation-instructions{font-size:.75rem;color:#4b5563;margin:0}@media(prefers-color-scheme:dark){.delete-confirmation-instructions{color:#9ca3af}}.delete-confirmation-highlight{display:inline-flex;align-items:center;gap:.25rem;padding:.25rem .5rem;margin-top:.25rem;background-color:#e5e7eb;color:#dc2626;font-weight:600;font-size:.875rem;border-radius:.375rem}@media(prefers-color-scheme:dark){.delete-confirmation-highlight{background-color:#374151}}.delete-confirmation-field{flex:1}.delete-confirmation-actions{display:flex;gap:.75rem}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: FormInputComponent, selector: "form-input", inputs: ["label", "type", "name", "id", "placeholder", "required", "readonly", "maxlength", "minlength", "max", "min", "step", "pattern", "fieldGroupClass", "autocomplete"] }, { kind: "component", type: AppModalComponent, selector: "app-modal", inputs: ["title", "disableClose", "showHeader", "showCloseButton", "showTitle", "interactiveClose", "isOpen", "size"], outputs: ["closeModal"] }, { kind: "component", type: AppAlertComponent, selector: "app-alert", inputs: ["type", "text", "closeable", "size"] }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
4486
4728
  }
4487
4729
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DeleteConfirmationComponent, decorators: [{
4488
4730
  type: Component,
@@ -4495,7 +4737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
4495
4737
  AppModalComponent,
4496
4738
  AppAlertComponent,
4497
4739
  ], encapsulation: ViewEncapsulation.None, template: "@if (isOpen()) {\n <app-modal\n [title]=\"title\"\n [isOpen]=\"isOpen\"\n (closeModal)=\"onCloseModal()\"\n [interactiveClose]=\"false\"\n >\n <form\n [formGroup]=\"deleteConfirmationForm\"\n method=\"POST\"\n class=\"delete-confirmation-content\"\n (ngSubmit)=\"onConfirmDelete()\"\n >\n <app-alert\n type=\"warning\"\n [text]=\"'deleteConfirmation.warning' | transloco\"\n size=\"sm\"\n [closeable]=\"false\"\n />\n\n <p class=\"delete-confirmation-instructions\">\n {{ 'deleteConfirmation.instructions' | transloco }}\n\n <span class=\"delete-confirmation-highlight\">\n {{ confirmationText }}\n </span>\n </p>\n\n <form-input\n name=\"confirmationText\"\n type=\"text\"\n class=\"delete-confirmation-field\"\n [required]=\"true\"\n [autocomplete]=\"false\"\n formControlName=\"confirmationText\"\n [placeholder]=\"\n transloco.translate('deleteConfirmation.placeholder', { text: confirmationText })\n \"\n />\n\n <div class=\"delete-confirmation-actions\">\n <app-button\n variant=\"tertiary\"\n [text]=\"'deleteConfirmation.cancel' | transloco\"\n (click)=\"onCloseModal()\"\n size=\"sm\"\n />\n\n <app-button\n type=\"submit\"\n variant=\"primary\"\n [text]=\"'deleteConfirmation.delete' | transloco\"\n [disabled]=\"!isConfirmationValid\"\n size=\"sm\"\n />\n </div>\n </form>\n </app-modal>\n}\n", styles: [".delete-confirmation-content{display:flex;flex-direction:column;gap:1rem;animation:slideUp .3s ease-out}.delete-confirmation-instructions{font-size:.75rem;color:#4b5563;margin:0}@media(prefers-color-scheme:dark){.delete-confirmation-instructions{color:#9ca3af}}.delete-confirmation-highlight{display:inline-flex;align-items:center;gap:.25rem;padding:.25rem .5rem;margin-top:.25rem;background-color:#e5e7eb;color:#dc2626;font-weight:600;font-size:.875rem;border-radius:.375rem}@media(prefers-color-scheme:dark){.delete-confirmation-highlight{background-color:#374151}}.delete-confirmation-field{flex:1}.delete-confirmation-actions{display:flex;gap:.75rem}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}\n"] }]
4498
- }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: DeleteConfirmationService }, { type: i2.TranslocoService }] });
4740
+ }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: DeleteConfirmationService }, { type: i1$3.TranslocoService }] });
4499
4741
 
4500
4742
  class AppBadgeComponent {
4501
4743
  text = '';
@@ -4544,6 +4786,7 @@ class DynamicTableComponent {
4544
4786
  title = '';
4545
4787
  data = [];
4546
4788
  headers = [];
4789
+ searcherPlaceholder = 'Buscar...';
4547
4790
  columnComponents = {};
4548
4791
  // Inputs necesarios para la paginación remota
4549
4792
  isLoading = true;
@@ -4591,17 +4834,19 @@ class DynamicTableComponent {
4591
4834
  });
4592
4835
  }
4593
4836
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DynamicTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
4594
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: DynamicTableComponent, isStandalone: true, selector: "dynamic-table", inputs: { title: "title", data: "data", headers: "headers", columnComponents: "columnComponents", isLoading: "isLoading", totalItems: "totalItems", itemsPerPage: "itemsPerPage", currentPage: "currentPage", searchValue: "searchValue", showPagination: "showPagination", showSearch: "showSearch", showTitle: "showTitle" }, outputs: { pageChange: "pageChange", searchChange: "searchChange", pageSizeChange: "pageSizeChange" }, ngImport: i0, template: "<div class=\"dynamic-table\">\n @if (showTitle || showSearch) {\n <div class=\"dynamic-table-toolbar\">\n @if (showTitle) {\n <h2 class=\"dynamic-table-title\">{{ title }}</h2>\n }\n\n @if (showSearch) {\n <input\n type=\"search\"\n (input)=\"onSearch($event)\"\n placeholder=\"Buscar...\"\n class=\"dynamic-table-search form-input\"\n />\n }\n </div>\n }\n\n <div class=\"dynamic-table-scroll\">\n <table class=\"dynamic-table-table\">\n <thead class=\"dynamic-table-head\">\n <tr>\n @for (header of headers; track header.key) {\n <th class=\"dynamic-table-head-cell\">\n {{ header.label }}\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"dynamic-table-body\">\n @if (isLoading) {\n <tr class=\"dynamic-table-row\">\n @for (header of headers; track header.key) {\n <td class=\"dynamic-table-cell\">\n <div class=\"dynamic-table-skeleton\"></div>\n </td>\n }\n </tr>\n }\n\n @for (row of data; track row) {\n <tr class=\"dynamic-table-row\">\n @for (header of headers; track header.key) {\n <td class=\"dynamic-table-cell dynamic-table-cell--nowrap\">\n @if (columnComponents[header.key]) {\n <ng-container\n *ngComponentOutlet=\"columnComponents[header.key]; injector: createInjector(row)\"\n ></ng-container>\n } @else {\n <span class=\"dynamic-table-cell--text\" [title]=\"row[header.key]\">\n {{ row[header.key] || '---' }}\n </span>\n }\n </td>\n }\n </tr>\n }\n\n @if ((!data || data.length < 1) && !isLoading) {\n <tr>\n <td [attr.colspan]=\"headers.length\" class=\"dynamic-table-empty\">\n @if (searchValue.length > 0) {\n No se encontraron sedes que coincidan con <q>{{ searchValue }}</q>\n <br />\n Revisa la ortograf\u00EDa o limpia la b\u00FAsqueda\n } @else {\n No se encontraron a\u00FAn registros almacenados en base de datos.\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n @if (showPagination) {\n <div class=\"dynamic-table-pagination\">\n <div class=\"dynamic-table-pagination-size\">\n <label for=\"page-size-select\" class=\"dynamic-table-pagination-size-label\">\n Items por p\u00E1gina\n </label>\n <select\n id=\"page-size-select\"\n class=\"dynamic-table-pagination-size-select\"\n [value]=\"itemsPerPage\"\n (change)=\"changePageSize($event)\"\n >\n @for (option of pageSizeOptions; track option) {\n <option [value]=\"option\">{{ option }}</option>\n }\n </select>\n </div>\n\n <div class=\"dynamic-table-pagination-info\">\n Mostrando p\u00E1gina\n <span class=\"dynamic-table-pagination-strong\">{{ currentPage }}</span> de\n <span class=\"dynamic-table-pagination-strong\">{{ totalPages }}</span>\n <span class=\"dynamic-table-pagination-total\">({{ totalItems }} registros totales)</span>\n </div>\n\n <div class=\"dynamic-table-pagination-actions\">\n <button\n (click)=\"changePage(-1)\"\n [disabled]=\"totalPages <= 1 || currentPage === 1\"\n class=\"dynamic-table-pagination-button\"\n >\n Anterior\n </button>\n\n <button\n (click)=\"changePage(1)\"\n [disabled]=\"totalPages <= 1 || currentPage >= totalPages\"\n class=\"dynamic-table-pagination-button\"\n >\n Siguiente\n </button>\n </div>\n </div>\n }\n</div>\n", styles: [".dynamic-table{background-color:#fff;border-radius:.5rem;overflow:hidden;border:1px solid #e5e7eb}@media(prefers-color-scheme:dark){.dynamic-table{background-color:#1f2937;border-color:#374151}}.dynamic-table-toolbar{padding:1rem;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:flex-start}@media(prefers-color-scheme:dark){.dynamic-table-toolbar{border-color:#374151}}.dynamic-table-title{font-size:1.125rem;font-weight:600;margin:0}@media(prefers-color-scheme:dark){.dynamic-table-title{color:#fff}}.dynamic-table-search{margin-left:auto;max-width:24rem}.dynamic-table-scroll{overflow-x:auto}.dynamic-table-table{width:100%;text-align:left;border-collapse:collapse}.dynamic-table-head{background-color:#f3f4f6;color:#4b5563;font-size:.75rem}@media(prefers-color-scheme:dark){.dynamic-table-head{background-color:#374151;color:#d1d5db}}.dynamic-table-head-cell{text-overflow:ellipsis;max-width:200px;padding:.75rem;border-bottom:1px solid #d1d5db;white-space:nowrap}@media(prefers-color-scheme:dark){.dynamic-table-head-cell{border-color:#4b5563}}.dynamic-table-body{color:#374151;font-size:.75rem}@media(prefers-color-scheme:dark){.dynamic-table-body{color:#e5e7eb}}.dynamic-table-row{border-bottom:1px solid #e5e7eb;transition:background-color .15s ease-in-out}.dynamic-table-row:last-child{border-bottom:none}.dynamic-table-row:nth-child(2n){background-color:#f3f4f6}.dynamic-table-row:hover{background-color:#e5e7eb}@media(prefers-color-scheme:dark){.dynamic-table-row{border-color:#374151}.dynamic-table-row:nth-child(2n){background-color:#37415180}.dynamic-table-row:hover{background-color:#374151}}.dynamic-table-cell{padding:.75rem}.dynamic-table-cell--nowrap{white-space:nowrap}.dynamic-table-cell--text{display:inline-block;overflow:hidden;text-overflow:ellipsis;max-width:280px}.dynamic-table-skeleton{height:1.25rem;width:100%;background-color:#e5e7eb;border-radius:.375rem;animation:dynamic-table-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@media(prefers-color-scheme:dark){.dynamic-table-skeleton{background-color:#4b5563}}.dynamic-table-empty{padding:1.5rem;text-align:center;color:#9ca3af;font-style:italic}@media(prefers-color-scheme:dark){.dynamic-table-empty{color:#6b7280}}.dynamic-table-pagination{padding:1rem;display:flex;align-items:center;justify-content:space-between;background-color:#f9fafb;border-top:1px solid #d1d5db}@media(prefers-color-scheme:dark){.dynamic-table-pagination{background-color:#1f293780;border-color:#374151}}.dynamic-table-pagination-info{font-size:.875rem;color:#6b7280}@media(prefers-color-scheme:dark){.dynamic-table-pagination-info{color:#9ca3af}}.dynamic-table-pagination-strong{font-weight:600;color:#1f2937}@media(prefers-color-scheme:dark){.dynamic-table-pagination-strong{color:#fff}}.dynamic-table-pagination-total{margin-left:.25rem}.dynamic-table-pagination-actions{display:flex;gap:.5rem}.dynamic-table-pagination-size{display:flex;align-items:center;gap:.5rem}.dynamic-table-pagination-size-label{font-size:.875rem;color:#6b7280}@media(prefers-color-scheme:dark){.dynamic-table-pagination-size-label{color:#9ca3af}}.dynamic-table-pagination-size-select{padding:.5rem 1rem;border:1px solid #d1d5db;border-radius:.5rem;background-color:#fff;font-size:.875rem;font-weight:500;color:#1f2937;cursor:pointer;transition:all .15s ease-in-out}.dynamic-table-pagination-size-select:hover{background-color:#f3f4f6}.dynamic-table-pagination-size-select:focus{outline:2px solid #4f46e5;outline-offset:-2px}@media(prefers-color-scheme:dark){.dynamic-table-pagination-size-select{background-color:#374151;border-color:#4b5563;color:#fff}.dynamic-table-pagination-size-select:hover{background-color:#4b5563}.dynamic-table-pagination-size-select:focus{outline-color:#6366f1}}.dynamic-table-pagination-button{display:flex;align-items:center;padding:.5rem 1rem;border:1px solid #d1d5db;border-radius:.5rem;background-color:#fff;font-size:.875rem;font-weight:500;transition:all .15s ease-in-out}.dynamic-table-pagination-button:hover{background-color:#f3f4f6}.dynamic-table-pagination-button:disabled{opacity:.4;cursor:not-allowed}@media(prefers-color-scheme:dark){.dynamic-table-pagination-button{background-color:#374151;border-color:#4b5563;color:#fff}.dynamic-table-pagination-button:hover{background-color:#4b5563}}@keyframes dynamic-table-pulse{0%,to{opacity:1}50%{opacity:.5}}\n", ".form-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-input-label{color:#d1d5db}}.form-input{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;padding:.375rem .75rem;outline:1;outline-offset:1;outline-color:#d1d5db;width:100%}.form-input::placeholder{color:#9ca3af}.form-input:focus{outline:2;outline-offset:2;outline-color:#4f46e5}.form-input.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-input.error{background-color:#374151;outline-color:#ef4444}}.form-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-input.disabled{background-color:#374151;color:#d1d5db}}@media screen and (min-width:768px){.form-input{font-size:.875rem}}.form-input-required{color:#ef4444}.form-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }] });
4837
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: DynamicTableComponent, isStandalone: true, selector: "dynamic-table", inputs: { title: "title", data: "data", headers: "headers", searcherPlaceholder: "searcherPlaceholder", columnComponents: "columnComponents", isLoading: "isLoading", totalItems: "totalItems", itemsPerPage: "itemsPerPage", currentPage: "currentPage", searchValue: "searchValue", showPagination: "showPagination", showSearch: "showSearch", showTitle: "showTitle" }, outputs: { pageChange: "pageChange", searchChange: "searchChange", pageSizeChange: "pageSizeChange" }, ngImport: i0, template: "<div class=\"dynamic-table\">\n @if (showTitle || showSearch) {\n <div class=\"dynamic-table-toolbar\">\n @if (showTitle) {\n <h2 class=\"dynamic-table-title\">{{ title }}</h2>\n }\n\n @if (showSearch) {\n <input\n [placeholder]=\"searcherPlaceholder\"\n (input)=\"onSearch($event)\"\n type=\"search\"\n class=\"dynamic-table-search form-input\"\n />\n }\n </div>\n }\n\n <div class=\"dynamic-table-scroll\">\n <table class=\"dynamic-table-table\">\n <thead class=\"dynamic-table-head\">\n <tr>\n @for (header of headers; track header.key) {\n <th class=\"dynamic-table-head-cell\">\n {{ header.label }}\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"dynamic-table-body\">\n @if (isLoading) {\n <tr class=\"dynamic-table-row\">\n @for (header of headers; track header.key) {\n <td class=\"dynamic-table-cell\">\n <div class=\"dynamic-table-skeleton\"></div>\n </td>\n }\n </tr>\n }\n\n @for (row of data; track row) {\n <tr class=\"dynamic-table-row\">\n @for (header of headers; track header.key) {\n <td class=\"dynamic-table-cell dynamic-table-cell--nowrap\">\n @if (columnComponents[header.key]) {\n <ng-container\n *ngComponentOutlet=\"columnComponents[header.key]; injector: createInjector(row)\"\n ></ng-container>\n } @else {\n <span class=\"dynamic-table-cell--text\" [title]=\"row[header.key]\">\n {{ row[header.key] || '---' }}\n </span>\n }\n </td>\n }\n </tr>\n }\n\n @if ((!data || data.length < 1) && !isLoading) {\n <tr>\n <td [attr.colspan]=\"headers.length\" class=\"dynamic-table-empty\">\n @if (searchValue.length > 0) {\n No se encontraron sedes que coincidan con <q>{{ searchValue }}</q>\n <br />\n Revisa la ortograf\u00EDa o limpia la b\u00FAsqueda\n } @else {\n No se encontraron a\u00FAn registros almacenados en base de datos.\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n @if (showPagination) {\n <div class=\"dynamic-table-pagination\">\n <div class=\"dynamic-table-pagination-size\">\n <label for=\"page-size-select\" class=\"dynamic-table-pagination-size-label\">\n Items por p\u00E1gina\n </label>\n <select\n id=\"page-size-select\"\n class=\"dynamic-table-pagination-size-select\"\n [value]=\"itemsPerPage\"\n (change)=\"changePageSize($event)\"\n >\n @for (option of pageSizeOptions; track option) {\n <option [value]=\"option\" [selected]=\"option === itemsPerPage\">{{ option }}</option>\n }\n </select>\n </div>\n\n <div class=\"dynamic-table-pagination-info\">\n Mostrando p\u00E1gina\n <span class=\"dynamic-table-pagination-strong\">{{ currentPage }}</span> de\n <span class=\"dynamic-table-pagination-strong\">{{ totalPages }}</span>\n <span class=\"dynamic-table-pagination-total\">({{ totalItems }} registros totales)</span>\n </div>\n\n <div class=\"dynamic-table-pagination-actions\">\n <button\n (click)=\"changePage(-1)\"\n [disabled]=\"totalPages <= 1 || currentPage === 1\"\n class=\"dynamic-table-pagination-button\"\n >\n Anterior\n </button>\n\n <button\n (click)=\"changePage(1)\"\n [disabled]=\"totalPages <= 1 || currentPage >= totalPages\"\n class=\"dynamic-table-pagination-button\"\n >\n Siguiente\n </button>\n </div>\n </div>\n }\n</div>\n", styles: [".dynamic-table{background-color:#fff;border-radius:.5rem;overflow:hidden;border:1px solid #e5e7eb}@media(prefers-color-scheme:dark){.dynamic-table{background-color:#1f2937;border-color:#374151}}.dynamic-table-toolbar{padding:1rem;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:flex-start}@media(prefers-color-scheme:dark){.dynamic-table-toolbar{border-color:#374151}}.dynamic-table-title{font-size:1.125rem;font-weight:600;margin:0}@media(prefers-color-scheme:dark){.dynamic-table-title{color:#fff}}.dynamic-table-search{margin-left:auto;max-width:24rem}.dynamic-table-scroll{overflow-x:auto}.dynamic-table-table{width:100%;text-align:left;border-collapse:collapse}.dynamic-table-head{background-color:#f3f4f6;color:#4b5563;font-size:.75rem}@media(prefers-color-scheme:dark){.dynamic-table-head{background-color:#374151;color:#d1d5db}}.dynamic-table-head-cell{text-overflow:ellipsis;max-width:200px;padding:.75rem;border-bottom:1px solid #d1d5db;white-space:nowrap}@media(prefers-color-scheme:dark){.dynamic-table-head-cell{border-color:#4b5563}}.dynamic-table-body{color:#374151;font-size:.75rem}@media(prefers-color-scheme:dark){.dynamic-table-body{color:#e5e7eb}}.dynamic-table-row{border-bottom:1px solid #e5e7eb;transition:background-color .15s ease-in-out}.dynamic-table-row:last-child{border-bottom:none}.dynamic-table-row:nth-child(2n){background-color:#f3f4f6}.dynamic-table-row:hover{background-color:#e5e7eb}@media(prefers-color-scheme:dark){.dynamic-table-row{border-color:#374151}.dynamic-table-row:nth-child(2n){background-color:#37415180}.dynamic-table-row:hover{background-color:#374151}}.dynamic-table-cell{padding:.75rem}.dynamic-table-cell--nowrap{white-space:nowrap}.dynamic-table-cell--text{display:inline-block;overflow:hidden;text-overflow:ellipsis;max-width:280px}.dynamic-table-skeleton{height:1.25rem;width:100%;background-color:#e5e7eb;border-radius:.375rem;animation:dynamic-table-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@media(prefers-color-scheme:dark){.dynamic-table-skeleton{background-color:#4b5563}}.dynamic-table-empty{padding:1.5rem;text-align:center;color:#9ca3af;font-style:italic}@media(prefers-color-scheme:dark){.dynamic-table-empty{color:#6b7280}}.dynamic-table-pagination{padding:1rem;display:flex;align-items:center;justify-content:space-between;background-color:#f9fafb;border-top:1px solid #d1d5db}@media(prefers-color-scheme:dark){.dynamic-table-pagination{background-color:#1f293780;border-color:#374151}}.dynamic-table-pagination-info{font-size:.875rem;color:#6b7280}@media(prefers-color-scheme:dark){.dynamic-table-pagination-info{color:#9ca3af}}.dynamic-table-pagination-strong{font-weight:600;color:#1f2937}@media(prefers-color-scheme:dark){.dynamic-table-pagination-strong{color:#fff}}.dynamic-table-pagination-total{margin-left:.25rem}.dynamic-table-pagination-actions{display:flex;gap:.5rem}.dynamic-table-pagination-size{display:flex;align-items:center;gap:.5rem}.dynamic-table-pagination-size-label{font-size:.875rem;color:#6b7280}@media(prefers-color-scheme:dark){.dynamic-table-pagination-size-label{color:#9ca3af}}.dynamic-table-pagination-size-select{padding:.5rem 1rem;border:1px solid #d1d5db;border-radius:.5rem;background-color:#fff;font-size:.875rem;font-weight:500;color:#1f2937;cursor:pointer;transition:all .15s ease-in-out}.dynamic-table-pagination-size-select:hover{background-color:#f3f4f6}.dynamic-table-pagination-size-select:focus{outline:2px solid #4f46e5;outline-offset:-2px}@media(prefers-color-scheme:dark){.dynamic-table-pagination-size-select{background-color:#374151;border-color:#4b5563;color:#fff}.dynamic-table-pagination-size-select:hover{background-color:#4b5563}.dynamic-table-pagination-size-select:focus{outline-color:#6366f1}}.dynamic-table-pagination-button{display:flex;align-items:center;padding:.5rem 1rem;border:1px solid #d1d5db;border-radius:.5rem;background-color:#fff;font-size:.875rem;font-weight:500;transition:all .15s ease-in-out}.dynamic-table-pagination-button:hover{background-color:#f3f4f6}.dynamic-table-pagination-button:disabled{opacity:.4;cursor:not-allowed}@media(prefers-color-scheme:dark){.dynamic-table-pagination-button{background-color:#374151;border-color:#4b5563;color:#fff}.dynamic-table-pagination-button:hover{background-color:#4b5563}}@keyframes dynamic-table-pulse{0%,to{opacity:1}50%{opacity:.5}}\n", ".form-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-input-label{color:#d1d5db}}.form-input{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;outline:0;padding:.375rem .75rem;width:100%}.form-input::placeholder{color:#9ca3af}.form-input:focus{border-color:#1f2937}.form-input.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-input.error{background-color:#374151;outline-color:#ef4444}}.form-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-input.disabled{background-color:#374151;color:#d1d5db}}@media screen and (min-width:768px){.form-input{font-size:.875rem}}.form-input-required{color:#ef4444}.form-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }] });
4595
4838
  }
4596
4839
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DynamicTableComponent, decorators: [{
4597
4840
  type: Component,
4598
- args: [{ selector: 'dynamic-table', standalone: true, imports: [CommonModule], template: "<div class=\"dynamic-table\">\n @if (showTitle || showSearch) {\n <div class=\"dynamic-table-toolbar\">\n @if (showTitle) {\n <h2 class=\"dynamic-table-title\">{{ title }}</h2>\n }\n\n @if (showSearch) {\n <input\n type=\"search\"\n (input)=\"onSearch($event)\"\n placeholder=\"Buscar...\"\n class=\"dynamic-table-search form-input\"\n />\n }\n </div>\n }\n\n <div class=\"dynamic-table-scroll\">\n <table class=\"dynamic-table-table\">\n <thead class=\"dynamic-table-head\">\n <tr>\n @for (header of headers; track header.key) {\n <th class=\"dynamic-table-head-cell\">\n {{ header.label }}\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"dynamic-table-body\">\n @if (isLoading) {\n <tr class=\"dynamic-table-row\">\n @for (header of headers; track header.key) {\n <td class=\"dynamic-table-cell\">\n <div class=\"dynamic-table-skeleton\"></div>\n </td>\n }\n </tr>\n }\n\n @for (row of data; track row) {\n <tr class=\"dynamic-table-row\">\n @for (header of headers; track header.key) {\n <td class=\"dynamic-table-cell dynamic-table-cell--nowrap\">\n @if (columnComponents[header.key]) {\n <ng-container\n *ngComponentOutlet=\"columnComponents[header.key]; injector: createInjector(row)\"\n ></ng-container>\n } @else {\n <span class=\"dynamic-table-cell--text\" [title]=\"row[header.key]\">\n {{ row[header.key] || '---' }}\n </span>\n }\n </td>\n }\n </tr>\n }\n\n @if ((!data || data.length < 1) && !isLoading) {\n <tr>\n <td [attr.colspan]=\"headers.length\" class=\"dynamic-table-empty\">\n @if (searchValue.length > 0) {\n No se encontraron sedes que coincidan con <q>{{ searchValue }}</q>\n <br />\n Revisa la ortograf\u00EDa o limpia la b\u00FAsqueda\n } @else {\n No se encontraron a\u00FAn registros almacenados en base de datos.\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n @if (showPagination) {\n <div class=\"dynamic-table-pagination\">\n <div class=\"dynamic-table-pagination-size\">\n <label for=\"page-size-select\" class=\"dynamic-table-pagination-size-label\">\n Items por p\u00E1gina\n </label>\n <select\n id=\"page-size-select\"\n class=\"dynamic-table-pagination-size-select\"\n [value]=\"itemsPerPage\"\n (change)=\"changePageSize($event)\"\n >\n @for (option of pageSizeOptions; track option) {\n <option [value]=\"option\">{{ option }}</option>\n }\n </select>\n </div>\n\n <div class=\"dynamic-table-pagination-info\">\n Mostrando p\u00E1gina\n <span class=\"dynamic-table-pagination-strong\">{{ currentPage }}</span> de\n <span class=\"dynamic-table-pagination-strong\">{{ totalPages }}</span>\n <span class=\"dynamic-table-pagination-total\">({{ totalItems }} registros totales)</span>\n </div>\n\n <div class=\"dynamic-table-pagination-actions\">\n <button\n (click)=\"changePage(-1)\"\n [disabled]=\"totalPages <= 1 || currentPage === 1\"\n class=\"dynamic-table-pagination-button\"\n >\n Anterior\n </button>\n\n <button\n (click)=\"changePage(1)\"\n [disabled]=\"totalPages <= 1 || currentPage >= totalPages\"\n class=\"dynamic-table-pagination-button\"\n >\n Siguiente\n </button>\n </div>\n </div>\n }\n</div>\n", styles: [".dynamic-table{background-color:#fff;border-radius:.5rem;overflow:hidden;border:1px solid #e5e7eb}@media(prefers-color-scheme:dark){.dynamic-table{background-color:#1f2937;border-color:#374151}}.dynamic-table-toolbar{padding:1rem;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:flex-start}@media(prefers-color-scheme:dark){.dynamic-table-toolbar{border-color:#374151}}.dynamic-table-title{font-size:1.125rem;font-weight:600;margin:0}@media(prefers-color-scheme:dark){.dynamic-table-title{color:#fff}}.dynamic-table-search{margin-left:auto;max-width:24rem}.dynamic-table-scroll{overflow-x:auto}.dynamic-table-table{width:100%;text-align:left;border-collapse:collapse}.dynamic-table-head{background-color:#f3f4f6;color:#4b5563;font-size:.75rem}@media(prefers-color-scheme:dark){.dynamic-table-head{background-color:#374151;color:#d1d5db}}.dynamic-table-head-cell{text-overflow:ellipsis;max-width:200px;padding:.75rem;border-bottom:1px solid #d1d5db;white-space:nowrap}@media(prefers-color-scheme:dark){.dynamic-table-head-cell{border-color:#4b5563}}.dynamic-table-body{color:#374151;font-size:.75rem}@media(prefers-color-scheme:dark){.dynamic-table-body{color:#e5e7eb}}.dynamic-table-row{border-bottom:1px solid #e5e7eb;transition:background-color .15s ease-in-out}.dynamic-table-row:last-child{border-bottom:none}.dynamic-table-row:nth-child(2n){background-color:#f3f4f6}.dynamic-table-row:hover{background-color:#e5e7eb}@media(prefers-color-scheme:dark){.dynamic-table-row{border-color:#374151}.dynamic-table-row:nth-child(2n){background-color:#37415180}.dynamic-table-row:hover{background-color:#374151}}.dynamic-table-cell{padding:.75rem}.dynamic-table-cell--nowrap{white-space:nowrap}.dynamic-table-cell--text{display:inline-block;overflow:hidden;text-overflow:ellipsis;max-width:280px}.dynamic-table-skeleton{height:1.25rem;width:100%;background-color:#e5e7eb;border-radius:.375rem;animation:dynamic-table-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@media(prefers-color-scheme:dark){.dynamic-table-skeleton{background-color:#4b5563}}.dynamic-table-empty{padding:1.5rem;text-align:center;color:#9ca3af;font-style:italic}@media(prefers-color-scheme:dark){.dynamic-table-empty{color:#6b7280}}.dynamic-table-pagination{padding:1rem;display:flex;align-items:center;justify-content:space-between;background-color:#f9fafb;border-top:1px solid #d1d5db}@media(prefers-color-scheme:dark){.dynamic-table-pagination{background-color:#1f293780;border-color:#374151}}.dynamic-table-pagination-info{font-size:.875rem;color:#6b7280}@media(prefers-color-scheme:dark){.dynamic-table-pagination-info{color:#9ca3af}}.dynamic-table-pagination-strong{font-weight:600;color:#1f2937}@media(prefers-color-scheme:dark){.dynamic-table-pagination-strong{color:#fff}}.dynamic-table-pagination-total{margin-left:.25rem}.dynamic-table-pagination-actions{display:flex;gap:.5rem}.dynamic-table-pagination-size{display:flex;align-items:center;gap:.5rem}.dynamic-table-pagination-size-label{font-size:.875rem;color:#6b7280}@media(prefers-color-scheme:dark){.dynamic-table-pagination-size-label{color:#9ca3af}}.dynamic-table-pagination-size-select{padding:.5rem 1rem;border:1px solid #d1d5db;border-radius:.5rem;background-color:#fff;font-size:.875rem;font-weight:500;color:#1f2937;cursor:pointer;transition:all .15s ease-in-out}.dynamic-table-pagination-size-select:hover{background-color:#f3f4f6}.dynamic-table-pagination-size-select:focus{outline:2px solid #4f46e5;outline-offset:-2px}@media(prefers-color-scheme:dark){.dynamic-table-pagination-size-select{background-color:#374151;border-color:#4b5563;color:#fff}.dynamic-table-pagination-size-select:hover{background-color:#4b5563}.dynamic-table-pagination-size-select:focus{outline-color:#6366f1}}.dynamic-table-pagination-button{display:flex;align-items:center;padding:.5rem 1rem;border:1px solid #d1d5db;border-radius:.5rem;background-color:#fff;font-size:.875rem;font-weight:500;transition:all .15s ease-in-out}.dynamic-table-pagination-button:hover{background-color:#f3f4f6}.dynamic-table-pagination-button:disabled{opacity:.4;cursor:not-allowed}@media(prefers-color-scheme:dark){.dynamic-table-pagination-button{background-color:#374151;border-color:#4b5563;color:#fff}.dynamic-table-pagination-button:hover{background-color:#4b5563}}@keyframes dynamic-table-pulse{0%,to{opacity:1}50%{opacity:.5}}\n", ".form-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-input-label{color:#d1d5db}}.form-input{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;padding:.375rem .75rem;outline:1;outline-offset:1;outline-color:#d1d5db;width:100%}.form-input::placeholder{color:#9ca3af}.form-input:focus{outline:2;outline-offset:2;outline-color:#4f46e5}.form-input.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-input.error{background-color:#374151;outline-color:#ef4444}}.form-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-input.disabled{background-color:#374151;color:#d1d5db}}@media screen and (min-width:768px){.form-input{font-size:.875rem}}.form-input-required{color:#ef4444}.form-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"] }]
4841
+ args: [{ selector: 'dynamic-table', standalone: true, imports: [CommonModule], template: "<div class=\"dynamic-table\">\n @if (showTitle || showSearch) {\n <div class=\"dynamic-table-toolbar\">\n @if (showTitle) {\n <h2 class=\"dynamic-table-title\">{{ title }}</h2>\n }\n\n @if (showSearch) {\n <input\n [placeholder]=\"searcherPlaceholder\"\n (input)=\"onSearch($event)\"\n type=\"search\"\n class=\"dynamic-table-search form-input\"\n />\n }\n </div>\n }\n\n <div class=\"dynamic-table-scroll\">\n <table class=\"dynamic-table-table\">\n <thead class=\"dynamic-table-head\">\n <tr>\n @for (header of headers; track header.key) {\n <th class=\"dynamic-table-head-cell\">\n {{ header.label }}\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"dynamic-table-body\">\n @if (isLoading) {\n <tr class=\"dynamic-table-row\">\n @for (header of headers; track header.key) {\n <td class=\"dynamic-table-cell\">\n <div class=\"dynamic-table-skeleton\"></div>\n </td>\n }\n </tr>\n }\n\n @for (row of data; track row) {\n <tr class=\"dynamic-table-row\">\n @for (header of headers; track header.key) {\n <td class=\"dynamic-table-cell dynamic-table-cell--nowrap\">\n @if (columnComponents[header.key]) {\n <ng-container\n *ngComponentOutlet=\"columnComponents[header.key]; injector: createInjector(row)\"\n ></ng-container>\n } @else {\n <span class=\"dynamic-table-cell--text\" [title]=\"row[header.key]\">\n {{ row[header.key] || '---' }}\n </span>\n }\n </td>\n }\n </tr>\n }\n\n @if ((!data || data.length < 1) && !isLoading) {\n <tr>\n <td [attr.colspan]=\"headers.length\" class=\"dynamic-table-empty\">\n @if (searchValue.length > 0) {\n No se encontraron sedes que coincidan con <q>{{ searchValue }}</q>\n <br />\n Revisa la ortograf\u00EDa o limpia la b\u00FAsqueda\n } @else {\n No se encontraron a\u00FAn registros almacenados en base de datos.\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n @if (showPagination) {\n <div class=\"dynamic-table-pagination\">\n <div class=\"dynamic-table-pagination-size\">\n <label for=\"page-size-select\" class=\"dynamic-table-pagination-size-label\">\n Items por p\u00E1gina\n </label>\n <select\n id=\"page-size-select\"\n class=\"dynamic-table-pagination-size-select\"\n [value]=\"itemsPerPage\"\n (change)=\"changePageSize($event)\"\n >\n @for (option of pageSizeOptions; track option) {\n <option [value]=\"option\" [selected]=\"option === itemsPerPage\">{{ option }}</option>\n }\n </select>\n </div>\n\n <div class=\"dynamic-table-pagination-info\">\n Mostrando p\u00E1gina\n <span class=\"dynamic-table-pagination-strong\">{{ currentPage }}</span> de\n <span class=\"dynamic-table-pagination-strong\">{{ totalPages }}</span>\n <span class=\"dynamic-table-pagination-total\">({{ totalItems }} registros totales)</span>\n </div>\n\n <div class=\"dynamic-table-pagination-actions\">\n <button\n (click)=\"changePage(-1)\"\n [disabled]=\"totalPages <= 1 || currentPage === 1\"\n class=\"dynamic-table-pagination-button\"\n >\n Anterior\n </button>\n\n <button\n (click)=\"changePage(1)\"\n [disabled]=\"totalPages <= 1 || currentPage >= totalPages\"\n class=\"dynamic-table-pagination-button\"\n >\n Siguiente\n </button>\n </div>\n </div>\n }\n</div>\n", styles: [".dynamic-table{background-color:#fff;border-radius:.5rem;overflow:hidden;border:1px solid #e5e7eb}@media(prefers-color-scheme:dark){.dynamic-table{background-color:#1f2937;border-color:#374151}}.dynamic-table-toolbar{padding:1rem;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:flex-start}@media(prefers-color-scheme:dark){.dynamic-table-toolbar{border-color:#374151}}.dynamic-table-title{font-size:1.125rem;font-weight:600;margin:0}@media(prefers-color-scheme:dark){.dynamic-table-title{color:#fff}}.dynamic-table-search{margin-left:auto;max-width:24rem}.dynamic-table-scroll{overflow-x:auto}.dynamic-table-table{width:100%;text-align:left;border-collapse:collapse}.dynamic-table-head{background-color:#f3f4f6;color:#4b5563;font-size:.75rem}@media(prefers-color-scheme:dark){.dynamic-table-head{background-color:#374151;color:#d1d5db}}.dynamic-table-head-cell{text-overflow:ellipsis;max-width:200px;padding:.75rem;border-bottom:1px solid #d1d5db;white-space:nowrap}@media(prefers-color-scheme:dark){.dynamic-table-head-cell{border-color:#4b5563}}.dynamic-table-body{color:#374151;font-size:.75rem}@media(prefers-color-scheme:dark){.dynamic-table-body{color:#e5e7eb}}.dynamic-table-row{border-bottom:1px solid #e5e7eb;transition:background-color .15s ease-in-out}.dynamic-table-row:last-child{border-bottom:none}.dynamic-table-row:nth-child(2n){background-color:#f3f4f6}.dynamic-table-row:hover{background-color:#e5e7eb}@media(prefers-color-scheme:dark){.dynamic-table-row{border-color:#374151}.dynamic-table-row:nth-child(2n){background-color:#37415180}.dynamic-table-row:hover{background-color:#374151}}.dynamic-table-cell{padding:.75rem}.dynamic-table-cell--nowrap{white-space:nowrap}.dynamic-table-cell--text{display:inline-block;overflow:hidden;text-overflow:ellipsis;max-width:280px}.dynamic-table-skeleton{height:1.25rem;width:100%;background-color:#e5e7eb;border-radius:.375rem;animation:dynamic-table-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@media(prefers-color-scheme:dark){.dynamic-table-skeleton{background-color:#4b5563}}.dynamic-table-empty{padding:1.5rem;text-align:center;color:#9ca3af;font-style:italic}@media(prefers-color-scheme:dark){.dynamic-table-empty{color:#6b7280}}.dynamic-table-pagination{padding:1rem;display:flex;align-items:center;justify-content:space-between;background-color:#f9fafb;border-top:1px solid #d1d5db}@media(prefers-color-scheme:dark){.dynamic-table-pagination{background-color:#1f293780;border-color:#374151}}.dynamic-table-pagination-info{font-size:.875rem;color:#6b7280}@media(prefers-color-scheme:dark){.dynamic-table-pagination-info{color:#9ca3af}}.dynamic-table-pagination-strong{font-weight:600;color:#1f2937}@media(prefers-color-scheme:dark){.dynamic-table-pagination-strong{color:#fff}}.dynamic-table-pagination-total{margin-left:.25rem}.dynamic-table-pagination-actions{display:flex;gap:.5rem}.dynamic-table-pagination-size{display:flex;align-items:center;gap:.5rem}.dynamic-table-pagination-size-label{font-size:.875rem;color:#6b7280}@media(prefers-color-scheme:dark){.dynamic-table-pagination-size-label{color:#9ca3af}}.dynamic-table-pagination-size-select{padding:.5rem 1rem;border:1px solid #d1d5db;border-radius:.5rem;background-color:#fff;font-size:.875rem;font-weight:500;color:#1f2937;cursor:pointer;transition:all .15s ease-in-out}.dynamic-table-pagination-size-select:hover{background-color:#f3f4f6}.dynamic-table-pagination-size-select:focus{outline:2px solid #4f46e5;outline-offset:-2px}@media(prefers-color-scheme:dark){.dynamic-table-pagination-size-select{background-color:#374151;border-color:#4b5563;color:#fff}.dynamic-table-pagination-size-select:hover{background-color:#4b5563}.dynamic-table-pagination-size-select:focus{outline-color:#6366f1}}.dynamic-table-pagination-button{display:flex;align-items:center;padding:.5rem 1rem;border:1px solid #d1d5db;border-radius:.5rem;background-color:#fff;font-size:.875rem;font-weight:500;transition:all .15s ease-in-out}.dynamic-table-pagination-button:hover{background-color:#f3f4f6}.dynamic-table-pagination-button:disabled{opacity:.4;cursor:not-allowed}@media(prefers-color-scheme:dark){.dynamic-table-pagination-button{background-color:#374151;border-color:#4b5563;color:#fff}.dynamic-table-pagination-button:hover{background-color:#4b5563}}@keyframes dynamic-table-pulse{0%,to{opacity:1}50%{opacity:.5}}\n", ".form-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-input-label{color:#d1d5db}}.form-input{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;outline:0;padding:.375rem .75rem;width:100%}.form-input::placeholder{color:#9ca3af}.form-input:focus{border-color:#1f2937}.form-input.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-input.error{background-color:#374151;outline-color:#ef4444}}.form-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-input.disabled{background-color:#374151;color:#d1d5db}}@media screen and (min-width:768px){.form-input{font-size:.875rem}}.form-input-required{color:#ef4444}.form-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"] }]
4599
4842
  }], ctorParameters: () => [{ type: i0.Injector }], propDecorators: { title: [{
4600
4843
  type: Input
4601
4844
  }], data: [{
4602
4845
  type: Input
4603
4846
  }], headers: [{
4604
4847
  type: Input
4848
+ }], searcherPlaceholder: [{
4849
+ type: Input
4605
4850
  }], columnComponents: [{
4606
4851
  type: Input
4607
4852
  }], isLoading: [{
@@ -4661,7 +4906,7 @@ class TextExpandableComponent {
4661
4906
  this.expanded = !this.expanded;
4662
4907
  }
4663
4908
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TextExpandableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4664
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TextExpandableComponent, isStandalone: true, selector: "text-expandable", inputs: { text: "text", maxLength: "maxLength", fontSize: "fontSize", allowHtml: "allowHtml", maxLines: "maxLines" }, usesOnChanges: true, ngImport: i0, template: "@if (allowHtml) {\n <div class=\"text-expandable__html\" [ngClass]=\"`text-expandable__html--font-size-${fontSize}`\">\n <div\n class=\"text-expandable__html__content\"\n [class.text-expandable__html__content--clamped]=\"truncated && !expanded\"\n [style.--text-expandable-lines]=\"lines\"\n [innerHTML]=\"text\"\n ></div>\n\n @if (truncated) {\n <button type=\"button\" class=\"text-expandable__toggle\" (click)=\"toggleExpanded()\">\n {{ (expanded ? 'common.showLess' : 'common.showMore') | transloco }}\n </button>\n }\n </div>\n} @else {\n <p\n class=\"text-expandable__paragraph\"\n [ngClass]=\"`text-expandable__paragraph--font-size-${fontSize}`\"\n >\n {{ visibleText }}\n\n @if (truncated) {\n <button type=\"button\" class=\"text-expandable__toggle\" (click)=\"toggleExpanded()\">\n {{ (expanded ? 'common.showLess' : 'common.showMore') | transloco }}\n </button>\n }\n </p>\n}\n", styles: [".text-expandable__paragraph{line-height:1.625}.text-expandable__paragraph--font-size-xs{font-size:.75rem}.text-expandable__paragraph--font-size-sm{font-size:.875rem}.text-expandable__paragraph--font-size-base{font-size:1rem}.text-expandable__paragraph--font-size-lg{font-size:1.125rem}.text-expandable__paragraph--font-size-xl{font-size:1.25rem}.text-expandable__paragraph--font-size-2xl{font-size:1.5rem}.text-expandable__paragraph--font-size-3xl{font-size:1.875rem}.text-expandable__paragraph--font-size-4xl{font-size:2.25rem}.text-expandable__paragraph--font-size-5xl{font-size:3rem}.text-expandable__paragraph--font-size-6xl{font-size:3.75rem}.text-expandable__html{line-height:1.625}.text-expandable__html--font-size-xs{font-size:.75rem}.text-expandable__html--font-size-sm{font-size:.875rem}.text-expandable__html--font-size-base{font-size:1rem}.text-expandable__html--font-size-lg{font-size:1.125rem}.text-expandable__html--font-size-xl{font-size:1.25rem}.text-expandable__html--font-size-2xl{font-size:1.5rem}.text-expandable__html--font-size-3xl{font-size:1.875rem}.text-expandable__html--font-size-4xl{font-size:2.25rem}.text-expandable__html--font-size-5xl{font-size:3rem}.text-expandable__html--font-size-6xl{font-size:3.75rem}.text-expandable__html__content--clamped{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--text-expandable-lines);overflow:hidden}.text-expandable__toggle{display:inline;margin-left:.25rem;padding:0;border:0;background:transparent;font-size:.875rem;font-weight:600;color:#2563eb;cursor:pointer;vertical-align:baseline}.text-expandable__toggle:hover{color:#1e40af;text-decoration:underline}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
4909
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TextExpandableComponent, isStandalone: true, selector: "text-expandable", inputs: { text: "text", maxLength: "maxLength", fontSize: "fontSize", allowHtml: "allowHtml", maxLines: "maxLines" }, usesOnChanges: true, ngImport: i0, template: "@if (allowHtml) {\n <div class=\"text-expandable__html\" [ngClass]=\"`text-expandable__html--font-size-${fontSize}`\">\n <div\n class=\"text-expandable__html__content\"\n [class.text-expandable__html__content--clamped]=\"truncated && !expanded\"\n [style.--text-expandable-lines]=\"lines\"\n [innerHTML]=\"text\"\n ></div>\n\n @if (truncated) {\n <button type=\"button\" class=\"text-expandable__toggle\" (click)=\"toggleExpanded()\">\n {{ (expanded ? 'common.showLess' : 'common.showMore') | transloco }}\n </button>\n }\n </div>\n} @else {\n <p\n class=\"text-expandable__paragraph\"\n [ngClass]=\"`text-expandable__paragraph--font-size-${fontSize}`\"\n >\n {{ visibleText }}\n\n @if (truncated) {\n <button type=\"button\" class=\"text-expandable__toggle\" (click)=\"toggleExpanded()\">\n {{ (expanded ? 'common.showLess' : 'common.showMore') | transloco }}\n </button>\n }\n </p>\n}\n", styles: [".text-expandable__paragraph{line-height:1.625}.text-expandable__paragraph--font-size-xs{font-size:.75rem}.text-expandable__paragraph--font-size-sm{font-size:.875rem}.text-expandable__paragraph--font-size-base{font-size:1rem}.text-expandable__paragraph--font-size-lg{font-size:1.125rem}.text-expandable__paragraph--font-size-xl{font-size:1.25rem}.text-expandable__paragraph--font-size-2xl{font-size:1.5rem}.text-expandable__paragraph--font-size-3xl{font-size:1.875rem}.text-expandable__paragraph--font-size-4xl{font-size:2.25rem}.text-expandable__paragraph--font-size-5xl{font-size:3rem}.text-expandable__paragraph--font-size-6xl{font-size:3.75rem}.text-expandable__html{line-height:1.625}.text-expandable__html--font-size-xs{font-size:.75rem}.text-expandable__html--font-size-sm{font-size:.875rem}.text-expandable__html--font-size-base{font-size:1rem}.text-expandable__html--font-size-lg{font-size:1.125rem}.text-expandable__html--font-size-xl{font-size:1.25rem}.text-expandable__html--font-size-2xl{font-size:1.5rem}.text-expandable__html--font-size-3xl{font-size:1.875rem}.text-expandable__html--font-size-4xl{font-size:2.25rem}.text-expandable__html--font-size-5xl{font-size:3rem}.text-expandable__html--font-size-6xl{font-size:3.75rem}.text-expandable__html__content--clamped{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--text-expandable-lines);overflow:hidden}.text-expandable__toggle{display:inline;margin-left:.25rem;padding:0;border:0;background:transparent;font-size:.875rem;font-weight:600;color:#2563eb;cursor:pointer;vertical-align:baseline}.text-expandable__toggle:hover{color:#1e40af;text-decoration:underline}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }] });
4665
4910
  }
4666
4911
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TextExpandableComponent, decorators: [{
4667
4912
  type: Component,
@@ -4687,7 +4932,7 @@ class ShowTypeBadgeComponent {
4687
4932
  return this.show.show_type ? SHOW_TYPE_COLORS[this.show.show_type] : SHOW_TYPE_COLORS['DEFAULT'];
4688
4933
  }
4689
4934
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowTypeBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4690
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: ShowTypeBadgeComponent, isStandalone: true, selector: "show-type-badge", inputs: { show: "show", size: "size" }, ngImport: i0, template: "<app-badge\n [text]=\"`show.showTypes.${show.show_type}` | transloco\"\n [backgroundColor]=\"this.showTypeColor.bg\"\n [textColor]=\"this.showTypeColor.text\"\n size=\"xs\"\n class=\"show-card__badge\"\n/>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
4935
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: ShowTypeBadgeComponent, isStandalone: true, selector: "show-type-badge", inputs: { show: "show", size: "size" }, ngImport: i0, template: "<app-badge\n [text]=\"`show.showTypes.${show.show_type}` | transloco\"\n [backgroundColor]=\"this.showTypeColor.bg\"\n [textColor]=\"this.showTypeColor.text\"\n size=\"xs\"\n class=\"show-card__badge\"\n/>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }] });
4691
4936
  }
4692
4937
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowTypeBadgeComponent, decorators: [{
4693
4938
  type: Component,
@@ -4713,7 +4958,7 @@ class ShowCardComponent {
4713
4958
  return new Date(date);
4714
4959
  }
4715
4960
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4716
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ShowCardComponent, isStandalone: true, selector: "show-card", inputs: { show: "show", linkText: "linkText", linkUrlFn: "linkUrlFn", linkQueryParams: "linkQueryParams" }, ngImport: i0, template: "<div class=\"show-card\">\n <div class=\"show-card__image\">\n <show-type-badge [show]=\"show\" class=\"show-card__badge\" />\n\n @if (show.images && show.images.length > 0) {\n <img [src]=\"show.images[0].full_url\" class=\"show-card__image-img\" />\n } @else {\n <img\n [src]=\"`https://placehold.co/400x400/1f2937/737373?text=${show.title}`\"\n class=\"show-card__image-placeholder\"\n />\n }\n </div>\n\n <div class=\"show-card__info\">\n <p class=\"show-card__title\">\n {{ show.title }}\n </p>\n\n @if (show.next_performance) {\n <div class=\"show-card__datetime\">\n <span class=\"show-card__datetime-title\">\n {{ 'show.next_performance' | transloco }}\n </span>\n\n <br />\n\n <span class=\"show-card__date\">\n {{ show.next_performance.start_time | date: `EEEE` | titlecase }}\n {{ show.next_performance.start_time | date: `dd 'de' MMMM, hh:mm a` }}\n </span>\n </div>\n }\n\n @if (show.days_of_week && show.days_of_week.length > 0) {\n <div class=\"show-card__days\">\n @for (day of show.days_of_week; track $index) {\n <app-badge\n [text]=\"`common.daysOfWeekByNumber.${day}` | transloco\"\n [bordered]=\"false\"\n size=\"xs\"\n backgroundColor=\"#525252\"\n textColor=\"#e5e5e5\"\n />\n }\n </div>\n }\n\n @if (show.unique_start_times && show.unique_start_times.length > 0) {\n <div class=\"show-card__times\">\n @for (time of show.unique_start_times; track $index) {\n <app-badge\n [text]=\"dateService.formatDate(formatTimeDate(time), 'hh:mm a')\"\n [bordered]=\"false\"\n size=\"xs\"\n backgroundColor=\"#525252\"\n textColor=\"#e5e5e5\"\n />\n }\n </div>\n }\n\n <app-link-button\n class=\"show-card__link\"\n [route]=\"linkUrlFn ? linkUrlFn(show) : '#'\"\n [queryParams]=\"linkQueryParams ?? {}\"\n [text]=\"linkText\"\n icon=\"ri-calendar-line\"\n variant=\"primary\"\n size=\"sm\"\n />\n </div>\n</div>\n", styles: [".show-card{align-items:center;background-color:#171717;border-radius:.5rem;display:flex;flex-direction:column;gap:0;justify-content:space-between;overflow:hidden;padding:0;position:relative;transition:all .2s ease-in-out;max-width:320px;width:100%}.show-card:hover{border-color:#525252}.show-card--selected{background-color:#262626;border-color:#ef4444;box-shadow:0 0 0 1px #ef444480,0 0 16px #ef444459}.show-card--selected:hover{border-color:#ef4444}.show-card__image{aspect-ratio:1/1;display:flex;border-radius:.125rem;overflow:hidden;position:relative;width:100%}.show-card__image-img{object-fit:cover;object-position:center;max-height:100%;max-width:100%;margin-left:auto;margin-right:auto}.show-card__image-placeholder{display:flex;background-color:#1f2937;height:100%;width:100%}.show-card__badge{position:absolute;left:1rem;top:1rem}.show-card__info{display:flex;flex-direction:column;flex:1;gap:.5rem;padding:1.5rem;width:100%}.show-card__title{color:#e5e7eb;font-size:1.5rem;font-weight:800;line-height:130%;margin:0}.show-card__datetime{line-height:1}.show-card__datetime-title{color:#a3a3a3;font-size:.75rem;font-weight:700;width:100%}.show-card__date{color:#a3a3a3;font-size:.875rem}.show-card__days,.show-card__times{color:#a3a3a3;display:flex;flex-flow:row wrap;font-size:.875rem;gap:.25rem}.show-card__times{margin-bottom:.5rem}.show-card__link{margin-top:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppLinkButtonComponent, selector: "app-link-button", inputs: ["disabled", "loading", "target", "text", "icon", "loadingText", "route", "queryParams", "size", "variant", "tooltip"] }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: ShowTypeBadgeComponent, selector: "show-type-badge", inputs: ["show", "size"] }, { kind: "pipe", type: i1$1.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
4961
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ShowCardComponent, isStandalone: true, selector: "show-card", inputs: { show: "show", linkText: "linkText", linkUrlFn: "linkUrlFn", linkQueryParams: "linkQueryParams" }, ngImport: i0, template: "<div class=\"show-card\">\n <div class=\"show-card__image\">\n <show-type-badge [show]=\"show\" class=\"show-card__badge\" />\n\n @if (show.images && show.images.length > 0) {\n <img [src]=\"show.images[0].full_url\" class=\"show-card__image-img\" />\n } @else {\n <img\n [src]=\"`https://placehold.co/400x400/1f2937/737373?text=${show.title}`\"\n class=\"show-card__image-placeholder\"\n />\n }\n </div>\n\n <div class=\"show-card__info\">\n <p class=\"show-card__title\">\n {{ show.title }}\n </p>\n\n @if (show.next_performance) {\n <div class=\"show-card__datetime\">\n <span class=\"show-card__datetime-title\">\n {{ 'show.next_performance' | transloco }}\n </span>\n\n <br />\n\n <span class=\"show-card__date\">\n {{ show.next_performance.start_time | date: `EEEE` | titlecase }}\n {{ show.next_performance.start_time | date: `dd 'de' MMMM, hh:mm a` }}\n </span>\n </div>\n }\n\n @if (show.days_of_week && show.days_of_week.length > 0) {\n <div class=\"show-card__days\">\n @for (day of show.days_of_week; track $index) {\n <app-badge\n [text]=\"`common.daysOfWeekByNumber.${day}` | transloco\"\n [bordered]=\"false\"\n size=\"xs\"\n backgroundColor=\"#525252\"\n textColor=\"#e5e5e5\"\n />\n }\n </div>\n }\n\n @if (show.unique_start_times && show.unique_start_times.length > 0) {\n <div class=\"show-card__times\">\n @for (time of show.unique_start_times; track $index) {\n <app-badge\n [text]=\"dateService.formatDate(formatTimeDate(time), 'hh:mm a')\"\n [bordered]=\"false\"\n size=\"xs\"\n backgroundColor=\"#525252\"\n textColor=\"#e5e5e5\"\n />\n }\n </div>\n }\n\n <app-link-button\n class=\"show-card__link\"\n [route]=\"linkUrlFn ? linkUrlFn(show) : '#'\"\n [queryParams]=\"linkQueryParams ?? {}\"\n [text]=\"linkText\"\n icon=\"ri-calendar-line\"\n variant=\"primary\"\n size=\"sm\"\n />\n </div>\n</div>\n", styles: [".show-card{align-items:center;background-color:#171717;border-radius:.5rem;display:flex;flex-direction:column;gap:0;justify-content:space-between;overflow:hidden;padding:0;position:relative;transition:all .2s ease-in-out;max-width:320px;width:100%}.show-card:hover{border-color:#525252}.show-card--selected{background-color:#262626;border-color:#ef4444;box-shadow:0 0 0 1px #ef444480,0 0 16px #ef444459}.show-card--selected:hover{border-color:#ef4444}.show-card__image{aspect-ratio:1/1;display:flex;border-radius:.125rem;overflow:hidden;position:relative;width:100%}.show-card__image-img{object-fit:cover;object-position:center;max-height:100%;max-width:100%;margin-left:auto;margin-right:auto}.show-card__image-placeholder{display:flex;background-color:#1f2937;height:100%;width:100%}.show-card__badge{position:absolute;left:1rem;top:1rem}.show-card__info{display:flex;flex-direction:column;flex:1;gap:.5rem;padding:1.5rem;width:100%}.show-card__title{color:#e5e7eb;font-size:1.5rem;font-weight:800;line-height:130%;margin:0}.show-card__datetime{line-height:1}.show-card__datetime-title{color:#a3a3a3;font-size:.75rem;font-weight:700;width:100%}.show-card__date{color:#a3a3a3;font-size:.875rem}.show-card__days,.show-card__times{color:#a3a3a3;display:flex;flex-flow:row wrap;font-size:.875rem;gap:.25rem}.show-card__times{margin-bottom:.5rem}.show-card__link{margin-top:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppLinkButtonComponent, selector: "app-link-button", inputs: ["disabled", "loading", "target", "text", "icon", "loadingText", "route", "queryParams", "size", "variant", "tooltip"] }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: ShowTypeBadgeComponent, selector: "show-type-badge", inputs: ["show", "size"] }, { kind: "pipe", type: i1$1.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }] });
4717
4962
  }
4718
4963
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowCardComponent, decorators: [{
4719
4964
  type: Component,
@@ -4775,13 +5020,13 @@ class LanguageSwitcherComponent {
4775
5020
  this.transloco.setActiveLang(lang);
4776
5021
  setStoredLanguage(lang);
4777
5022
  }
4778
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: LanguageSwitcherComponent, deps: [{ token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
5023
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: LanguageSwitcherComponent, deps: [{ token: i1$3.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
4779
5024
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: LanguageSwitcherComponent, isStandalone: true, selector: "language-switcher", ngImport: i0, template: "<div class=\"lang-switcher\">\n @for (lang of availableLangs; track lang) {\n <button\n (click)=\"switchLang(lang)\"\n class=\"lang-switcher-btn\"\n [class.active]=\"activeLang === lang\"\n [class.inactive]=\"activeLang !== lang\"\n >\n {{ lang | uppercase }}\n </button>\n }\n</div>\n", styles: [".lang-switcher{display:flex;align-items:center;gap:.25rem}.lang-switcher-btn{cursor:pointer;padding:.25rem .5rem;font-size:.75rem;font-weight:500;border-radius:.125rem;transition:all .15s ease-in-out;border:none;background:transparent}.lang-switcher-btn.active{background-color:#1f2937;color:#fff}@media(prefers-color-scheme:dark){.lang-switcher-btn.active{background-color:#374151}}.lang-switcher-btn.inactive{color:#9ca3af}.lang-switcher-btn.inactive:hover{color:#fff}@media(prefers-color-scheme:dark){.lang-switcher-btn.inactive{color:#6b7280}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1$1.UpperCasePipe, name: "uppercase" }] });
4780
5025
  }
4781
5026
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
4782
5027
  type: Component,
4783
5028
  args: [{ selector: 'language-switcher', standalone: true, imports: [CommonModule, TranslocoModule], template: "<div class=\"lang-switcher\">\n @for (lang of availableLangs; track lang) {\n <button\n (click)=\"switchLang(lang)\"\n class=\"lang-switcher-btn\"\n [class.active]=\"activeLang === lang\"\n [class.inactive]=\"activeLang !== lang\"\n >\n {{ lang | uppercase }}\n </button>\n }\n</div>\n", styles: [".lang-switcher{display:flex;align-items:center;gap:.25rem}.lang-switcher-btn{cursor:pointer;padding:.25rem .5rem;font-size:.75rem;font-weight:500;border-radius:.125rem;transition:all .15s ease-in-out;border:none;background:transparent}.lang-switcher-btn.active{background-color:#1f2937;color:#fff}@media(prefers-color-scheme:dark){.lang-switcher-btn.active{background-color:#374151}}.lang-switcher-btn.inactive{color:#9ca3af}.lang-switcher-btn.inactive:hover{color:#fff}@media(prefers-color-scheme:dark){.lang-switcher-btn.inactive{color:#6b7280}}\n"] }]
4784
- }], ctorParameters: () => [{ type: i2.TranslocoService }] });
5029
+ }], ctorParameters: () => [{ type: i1$3.TranslocoService }] });
4785
5030
 
4786
5031
  class FormSelectComponent {
4787
5032
  ngControl;
@@ -4852,8 +5097,8 @@ class FormSelectComponent {
4852
5097
  }
4853
5098
  return baseClasses;
4854
5099
  }
4855
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormSelectComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
4856
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: FormSelectComponent, isStandalone: true, selector: "form-select", inputs: { label: "label", name: "name", id: "id", placeholder: "placeholder", required: "required", disabled: "disabled", readonly: "readonly", options: "options", fieldGroupClass: "fieldGroupClass", showDefaultOption: "showDefaultOption", defaultOptionLabel: "defaultOptionLabel" }, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"form-select-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"form-select-required\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <select\n [id]=\"inputId\"\n [name]=\"name\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onSelectChange($event)\"\n (blur)=\"onTouched()\"\n class=\"form-select\"\n [class.disabled]=\"readonly\"\n [class.error]=\"showError\"\n >\n @if (showDefaultOption && this.defaultOptionLabel) {\n <option [value]=\"null\" disabled selected>{{ this.defaultOptionLabel }}</option>\n } @else if (showDefaultOption) {\n <option [value]=\"null\" disabled selected>{{ 'common.selectOption' | transloco }}</option>\n }\n\n @for (option of options; track option.value) {\n <option [value]=\"option.value\" [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n </select>\n </div>\n\n @if (showError) {\n <div class=\"form-select-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".form-select-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-select-label{color:#d1d5db}}.form-select{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;padding:.375rem 2.5rem .375rem .75rem;outline:1px solid #d1d5db;outline-offset:1px;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url(\"data:image/svg+xml;charset=US-ASCII,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right .75rem center;background-size:1em}.form-select::-ms-expand{display:none}@-moz-document url-prefix(){.form-select{text-indent:.01px;text-overflow:\"\";padding-right:.75rem}}.form-select:focus{outline:2px solid #4f46e5;outline-offset:2px}.form-select.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-select.error{background-color:#374151;color:#fff;outline-color:#ef4444}}.form-select.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-select.disabled{background-color:#374151;color:#d1d5db}}@media(min-width:768px){.form-select{font-size:.875rem}}.form-select-required{color:#ef4444}.form-select-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
5100
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormSelectComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i1$3.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
5101
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: FormSelectComponent, isStandalone: true, selector: "form-select", inputs: { label: "label", name: "name", id: "id", placeholder: "placeholder", required: "required", disabled: "disabled", readonly: "readonly", options: "options", fieldGroupClass: "fieldGroupClass", showDefaultOption: "showDefaultOption", defaultOptionLabel: "defaultOptionLabel" }, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"form-select-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"form-select-required\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <select\n [id]=\"inputId\"\n [name]=\"name\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onSelectChange($event)\"\n (blur)=\"onTouched()\"\n class=\"form-select\"\n [class.disabled]=\"readonly\"\n [class.error]=\"showError\"\n >\n @if (showDefaultOption && this.defaultOptionLabel) {\n <option [value]=\"null\" disabled selected>{{ this.defaultOptionLabel }}</option>\n } @else if (showDefaultOption) {\n <option [value]=\"null\" disabled selected>{{ 'common.selectOption' | transloco }}</option>\n }\n\n @for (option of options; track option.value) {\n <option [value]=\"option.value\" [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n </select>\n </div>\n\n @if (showError) {\n <div class=\"form-select-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".form-select-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-select-label{color:#d1d5db}}.form-select{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;padding:.375rem 2.5rem .375rem .75rem;outline:1px solid #d1d5db;outline-offset:1px;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url(\"data:image/svg+xml;charset=US-ASCII,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right .75rem center;background-size:1em}.form-select::-ms-expand{display:none}@-moz-document url-prefix(){.form-select{text-indent:.01px;text-overflow:\"\";padding-right:.75rem}}.form-select:focus{outline:2px solid #4f46e5;outline-offset:2px}.form-select.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-select.error{background-color:#374151;color:#fff;outline-color:#ef4444}}.form-select.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-select.disabled{background-color:#374151;color:#d1d5db}}@media(min-width:768px){.form-select{font-size:.875rem}}.form-select-required{color:#ef4444}.form-select-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }] });
4857
5102
  }
4858
5103
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormSelectComponent, decorators: [{
4859
5104
  type: Component,
@@ -4862,7 +5107,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
4862
5107
  type: Self
4863
5108
  }, {
4864
5109
  type: Optional
4865
- }] }, { type: i2.TranslocoService }], propDecorators: { label: [{
5110
+ }] }, { type: i1$3.TranslocoService }], propDecorators: { label: [{
4866
5111
  type: Input
4867
5112
  }], name: [{
4868
5113
  type: Input
@@ -4966,7 +5211,7 @@ class FormTextareaComponent {
4966
5211
  }
4967
5212
  return baseClasses;
4968
5213
  }
4969
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormTextareaComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
5214
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormTextareaComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i1$3.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
4970
5215
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: FormTextareaComponent, isStandalone: true, selector: "form-textarea", inputs: { label: "label", name: "name", id: "id", placeholder: "placeholder", required: "required", readonly: "readonly", minlength: "minlength", maxlength: "maxlength", rows: "rows", cols: "cols", fieldGroupClass: "fieldGroupClass" }, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"form-textarea-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"form-textarea-required\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <textarea\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [minlength]=\"minlength\"\n [maxlength]=\"maxlength\"\n [rows]=\"rows\"\n [cols]=\"cols\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"form-textarea\"\n [class.disabled]=\"readonly\"\n [class.error]=\"showError\"\n ></textarea>\n </div>\n\n @if (showError) {\n <div class=\"form-textarea-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".form-textarea-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-textarea-label{color:#d1d5db}}.form-textarea{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;padding:.375rem .75rem;outline:1px solid #d1d5db;outline-offset:1px;width:100%}.form-textarea::placeholder{color:#9ca3af}.form-textarea:focus{outline:2px solid #4f46e5;outline-offset:2px}.form-textarea.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-textarea.error{background-color:#374151;color:#fff;outline-color:#ef4444}}.form-textarea.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-textarea.disabled{background-color:#374151;color:#d1d5db}}@media(min-width:768px){.form-textarea{font-size:.875rem}}.form-textarea-required{color:#ef4444}.form-textarea-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }] });
4971
5216
  }
4972
5217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormTextareaComponent, decorators: [{
@@ -4976,7 +5221,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
4976
5221
  type: Self
4977
5222
  }, {
4978
5223
  type: Optional
4979
- }] }, { type: i2.TranslocoService }], propDecorators: { label: [{
5224
+ }] }, { type: i1$3.TranslocoService }], propDecorators: { label: [{
4980
5225
  type: Input
4981
5226
  }], name: [{
4982
5227
  type: Input
@@ -5159,7 +5404,7 @@ class NumberInputComponent {
5159
5404
  return null;
5160
5405
  return num > this.max ? { max: { max: this.max, actual: num } } : null;
5161
5406
  }
5162
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: NumberInputComponent, deps: [{ token: i2.TranslocoService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
5407
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: NumberInputComponent, deps: [{ token: i1$3.TranslocoService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
5163
5408
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: NumberInputComponent, isStandalone: true, selector: "number-input", inputs: { label: "label", name: "name", id: "id", placeholder: "placeholder", required: "required", readonly: "readonly", min: "min", max: "max", step: "step", fieldGroupClass: "fieldGroupClass" }, providers: [
5164
5409
  {
5165
5410
  provide: NG_VALUE_ACCESSOR,
@@ -5167,7 +5412,7 @@ class NumberInputComponent {
5167
5412
  multi: true,
5168
5413
  },
5169
5414
  { provide: NG_VALIDATORS, useExisting: forwardRef(() => NumberInputComponent), multi: true },
5170
- ], usesOnChanges: true, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"number-input-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"number-input-required\">*</span>\n }\n </label>\n }\n\n <div class=\"number-input-group\" [class.error]=\"showError\">\n <button\n type=\"button\"\n class=\"number-input-button\"\n [attr.aria-label]=\"transloco.translate('numberInput.decrement')\"\n [disabled]=\"!canDecrement\"\n (click)=\"decrement()\"\n >\n <i class=\"ri-subtract-line\"></i>\n </button>\n\n <input\n type=\"number\"\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [value]=\"value ?? ''\"\n (input)=\"onInput($event.target.value)\"\n (blur)=\"onTouched()\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [class.disabled]=\"readonly\"\n class=\"number-input\"\n />\n\n <button\n type=\"button\"\n class=\"number-input-button\"\n [attr.aria-label]=\"transloco.translate('numberInput.increment')\"\n [disabled]=\"!canIncrement\"\n (click)=\"increment()\"\n >\n <i class=\"ri-add-line\"></i>\n </button>\n </div>\n\n @if (showError) {\n <div class=\"number-input-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".number-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.number-input-label{color:#d1d5db}}.number-input-group{display:flex;align-items:stretch}.number-input-group.error .number-input{outline-color:#ef4444}@media(prefers-color-scheme:dark){.number-input-group.error .number-input{background-color:#374151;color:#fff;outline-color:#ef4444}}.number-input-group.error .number-input-button{border-color:#ef4444}@media(prefers-color-scheme:dark){.number-input-group.error .number-input-button{background-color:#374151;color:#fff}}.number-input-button{align-items:center;background-color:#fff;border:1px solid #d1d5db;color:#4b5563;cursor:pointer;display:flex;justify-content:center;padding:0;width:2.5rem;transition:background-color .15s ease}.number-input-button:first-child{border-radius:.375rem 0 0 .375rem;margin-right:-1px}.number-input-button:last-child{border-radius:0 .375rem .375rem 0;margin-left:-1px}.number-input-button i{font-size:1.125rem;line-height:1}.number-input-button:hover:not(:disabled){background-color:#f3f4f6;color:#111827}.number-input-button:focus-visible{outline:2px solid #4f46e5;outline-offset:-2px;z-index:1}.number-input-button:disabled{background-color:#e5e7eb;color:#9ca3af;cursor:not-allowed}@media(prefers-color-scheme:dark){.number-input-button{background-color:#1f2937;border-color:#4b5563;color:#d1d5db}.number-input-button:hover:not(:disabled){background-color:#374151;color:#fff}.number-input-button:disabled{background-color:#374151;color:#6b7280}}.number-input{background-color:#fff;border:1px solid #d1d5db;color:#111827;display:block;font-weight:500;outline:1px solid #d1d5db;outline-offset:-1px;padding:.375rem .75rem;text-align:center;width:100%}.number-input::placeholder{color:#9ca3af}.number-input:focus{outline:2px solid #4f46e5;outline-offset:-2px}.number-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.number-input.disabled{background-color:#374151;color:#d1d5db}}.number-input::-webkit-inner-spin-button,.number-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.number-input[type=number]{-moz-appearance:textfield;appearance:textfield}@media(prefers-color-scheme:dark){.number-input{background-color:#1f2937;border-color:#4b5563;color:#f3f4f6}.number-input::placeholder{color:#6b7280}}@media(min-width:768px){.number-input{font-size:.875rem}}.number-input-required{color:#ef4444}.number-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }] });
5415
+ ], usesOnChanges: true, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"number-input-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"number-input-required\">*</span>\n }\n </label>\n }\n\n <div class=\"number-input-group\" [class.error]=\"showError\">\n <button\n type=\"button\"\n class=\"number-input-button\"\n [attr.aria-label]=\"transloco.translate('numberInput.decrement')\"\n [disabled]=\"!canDecrement\"\n (click)=\"decrement()\"\n >\n <i class=\"ri-subtract-line\"></i>\n </button>\n\n <input\n type=\"number\"\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [value]=\"value ?? ''\"\n (input)=\"onInput($event.target.value)\"\n (blur)=\"onTouched()\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [class.disabled]=\"readonly\"\n class=\"number-input\"\n />\n\n <button\n type=\"button\"\n class=\"number-input-button\"\n [attr.aria-label]=\"transloco.translate('numberInput.increment')\"\n [disabled]=\"!canIncrement\"\n (click)=\"increment()\"\n >\n <i class=\"ri-add-line\"></i>\n </button>\n </div>\n\n @if (showError) {\n <div class=\"number-input-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".number-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.number-input-label{color:#d1d5db}}.number-input-group{display:flex;align-items:stretch}.number-input-group.error .number-input{outline-color:#ef4444}@media(prefers-color-scheme:dark){.number-input-group.error .number-input{background-color:#374151;color:#fff;outline-color:#ef4444}}.number-input-group.error .number-input-button{border-color:#ef4444}@media(prefers-color-scheme:dark){.number-input-group.error .number-input-button{background-color:#374151;color:#fff}}.number-input-button{align-items:center;background-color:#fff;border:1px solid #d1d5db;color:#4b5563;cursor:pointer;display:flex;justify-content:center;padding:0;width:2.5rem;transition:background-color .15s ease}.number-input-button:first-child{border-radius:.375rem 0 0 .375rem;margin-right:-1px}.number-input-button:last-child{border-radius:0 .375rem .375rem 0;margin-left:-1px}.number-input-button i{font-size:1.125rem;line-height:1}.number-input-button:hover:not(:disabled){background-color:#f3f4f6;color:#111827}.number-input-button:disabled{background-color:#e5e7eb;color:#9ca3af;cursor:not-allowed}@media(prefers-color-scheme:dark){.number-input-button{background-color:#1f2937;border-color:#4b5563;color:#d1d5db}.number-input-button:hover:not(:disabled){background-color:#374151;color:#fff}.number-input-button:disabled{background-color:#374151;color:#6b7280}}.number-input{background-color:#fff;border:1px solid #d1d5db;color:#111827;display:block;font-weight:500;outline:1px solid #d1d5db;outline-offset:-1px;padding:.375rem .75rem;text-align:center;width:100%}.number-input::placeholder{color:#9ca3af}.number-input:focus{outline:2px solid #4f46e5;outline-offset:-2px}.number-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.number-input.disabled{background-color:#374151;color:#d1d5db}}.number-input::-webkit-inner-spin-button,.number-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.number-input[type=number]{-moz-appearance:textfield;appearance:textfield}@media(prefers-color-scheme:dark){.number-input{background-color:#1f2937;border-color:#4b5563;color:#f3f4f6}.number-input::placeholder{color:#6b7280}}@media(min-width:768px){.number-input{font-size:.875rem}}.number-input-required{color:#ef4444}.number-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }] });
5171
5416
  }
5172
5417
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: NumberInputComponent, decorators: [{
5173
5418
  type: Component,
@@ -5178,8 +5423,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
5178
5423
  multi: true,
5179
5424
  },
5180
5425
  { provide: NG_VALIDATORS, useExisting: forwardRef(() => NumberInputComponent), multi: true },
5181
- ], template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"number-input-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"number-input-required\">*</span>\n }\n </label>\n }\n\n <div class=\"number-input-group\" [class.error]=\"showError\">\n <button\n type=\"button\"\n class=\"number-input-button\"\n [attr.aria-label]=\"transloco.translate('numberInput.decrement')\"\n [disabled]=\"!canDecrement\"\n (click)=\"decrement()\"\n >\n <i class=\"ri-subtract-line\"></i>\n </button>\n\n <input\n type=\"number\"\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [value]=\"value ?? ''\"\n (input)=\"onInput($event.target.value)\"\n (blur)=\"onTouched()\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [class.disabled]=\"readonly\"\n class=\"number-input\"\n />\n\n <button\n type=\"button\"\n class=\"number-input-button\"\n [attr.aria-label]=\"transloco.translate('numberInput.increment')\"\n [disabled]=\"!canIncrement\"\n (click)=\"increment()\"\n >\n <i class=\"ri-add-line\"></i>\n </button>\n </div>\n\n @if (showError) {\n <div class=\"number-input-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".number-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.number-input-label{color:#d1d5db}}.number-input-group{display:flex;align-items:stretch}.number-input-group.error .number-input{outline-color:#ef4444}@media(prefers-color-scheme:dark){.number-input-group.error .number-input{background-color:#374151;color:#fff;outline-color:#ef4444}}.number-input-group.error .number-input-button{border-color:#ef4444}@media(prefers-color-scheme:dark){.number-input-group.error .number-input-button{background-color:#374151;color:#fff}}.number-input-button{align-items:center;background-color:#fff;border:1px solid #d1d5db;color:#4b5563;cursor:pointer;display:flex;justify-content:center;padding:0;width:2.5rem;transition:background-color .15s ease}.number-input-button:first-child{border-radius:.375rem 0 0 .375rem;margin-right:-1px}.number-input-button:last-child{border-radius:0 .375rem .375rem 0;margin-left:-1px}.number-input-button i{font-size:1.125rem;line-height:1}.number-input-button:hover:not(:disabled){background-color:#f3f4f6;color:#111827}.number-input-button:focus-visible{outline:2px solid #4f46e5;outline-offset:-2px;z-index:1}.number-input-button:disabled{background-color:#e5e7eb;color:#9ca3af;cursor:not-allowed}@media(prefers-color-scheme:dark){.number-input-button{background-color:#1f2937;border-color:#4b5563;color:#d1d5db}.number-input-button:hover:not(:disabled){background-color:#374151;color:#fff}.number-input-button:disabled{background-color:#374151;color:#6b7280}}.number-input{background-color:#fff;border:1px solid #d1d5db;color:#111827;display:block;font-weight:500;outline:1px solid #d1d5db;outline-offset:-1px;padding:.375rem .75rem;text-align:center;width:100%}.number-input::placeholder{color:#9ca3af}.number-input:focus{outline:2px solid #4f46e5;outline-offset:-2px}.number-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.number-input.disabled{background-color:#374151;color:#d1d5db}}.number-input::-webkit-inner-spin-button,.number-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.number-input[type=number]{-moz-appearance:textfield;appearance:textfield}@media(prefers-color-scheme:dark){.number-input{background-color:#1f2937;border-color:#4b5563;color:#f3f4f6}.number-input::placeholder{color:#6b7280}}@media(min-width:768px){.number-input{font-size:.875rem}}.number-input-required{color:#ef4444}.number-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"] }]
5182
- }], ctorParameters: () => [{ type: i2.TranslocoService }, { type: i0.Injector }], propDecorators: { label: [{
5426
+ ], template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"number-input-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"number-input-required\">*</span>\n }\n </label>\n }\n\n <div class=\"number-input-group\" [class.error]=\"showError\">\n <button\n type=\"button\"\n class=\"number-input-button\"\n [attr.aria-label]=\"transloco.translate('numberInput.decrement')\"\n [disabled]=\"!canDecrement\"\n (click)=\"decrement()\"\n >\n <i class=\"ri-subtract-line\"></i>\n </button>\n\n <input\n type=\"number\"\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [value]=\"value ?? ''\"\n (input)=\"onInput($event.target.value)\"\n (blur)=\"onTouched()\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [class.disabled]=\"readonly\"\n class=\"number-input\"\n />\n\n <button\n type=\"button\"\n class=\"number-input-button\"\n [attr.aria-label]=\"transloco.translate('numberInput.increment')\"\n [disabled]=\"!canIncrement\"\n (click)=\"increment()\"\n >\n <i class=\"ri-add-line\"></i>\n </button>\n </div>\n\n @if (showError) {\n <div class=\"number-input-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".number-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.number-input-label{color:#d1d5db}}.number-input-group{display:flex;align-items:stretch}.number-input-group.error .number-input{outline-color:#ef4444}@media(prefers-color-scheme:dark){.number-input-group.error .number-input{background-color:#374151;color:#fff;outline-color:#ef4444}}.number-input-group.error .number-input-button{border-color:#ef4444}@media(prefers-color-scheme:dark){.number-input-group.error .number-input-button{background-color:#374151;color:#fff}}.number-input-button{align-items:center;background-color:#fff;border:1px solid #d1d5db;color:#4b5563;cursor:pointer;display:flex;justify-content:center;padding:0;width:2.5rem;transition:background-color .15s ease}.number-input-button:first-child{border-radius:.375rem 0 0 .375rem;margin-right:-1px}.number-input-button:last-child{border-radius:0 .375rem .375rem 0;margin-left:-1px}.number-input-button i{font-size:1.125rem;line-height:1}.number-input-button:hover:not(:disabled){background-color:#f3f4f6;color:#111827}.number-input-button:disabled{background-color:#e5e7eb;color:#9ca3af;cursor:not-allowed}@media(prefers-color-scheme:dark){.number-input-button{background-color:#1f2937;border-color:#4b5563;color:#d1d5db}.number-input-button:hover:not(:disabled){background-color:#374151;color:#fff}.number-input-button:disabled{background-color:#374151;color:#6b7280}}.number-input{background-color:#fff;border:1px solid #d1d5db;color:#111827;display:block;font-weight:500;outline:1px solid #d1d5db;outline-offset:-1px;padding:.375rem .75rem;text-align:center;width:100%}.number-input::placeholder{color:#9ca3af}.number-input:focus{outline:2px solid #4f46e5;outline-offset:-2px}.number-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.number-input.disabled{background-color:#374151;color:#d1d5db}}.number-input::-webkit-inner-spin-button,.number-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.number-input[type=number]{-moz-appearance:textfield;appearance:textfield}@media(prefers-color-scheme:dark){.number-input{background-color:#1f2937;border-color:#4b5563;color:#f3f4f6}.number-input::placeholder{color:#6b7280}}@media(min-width:768px){.number-input{font-size:.875rem}}.number-input-required{color:#ef4444}.number-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"] }]
5427
+ }], ctorParameters: () => [{ type: i1$3.TranslocoService }, { type: i0.Injector }], propDecorators: { label: [{
5183
5428
  type: Input
5184
5429
  }], name: [{
5185
5430
  type: Input
@@ -5201,6 +5446,206 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
5201
5446
  type: Input
5202
5447
  }] } });
5203
5448
 
5449
+ class PhoneInputComponent {
5450
+ transloco;
5451
+ injector;
5452
+ label = '';
5453
+ name = '';
5454
+ id = '';
5455
+ placeholder = '';
5456
+ required = false;
5457
+ readonly = false;
5458
+ maxlength = null;
5459
+ minlength = null;
5460
+ defaultCountry = 'CO';
5461
+ fieldGroupClass = '';
5462
+ countries = PHONE_COUNTRIES;
5463
+ phoneOptions = PHONE_COUNTRIES.map((country) => ({
5464
+ ...country,
5465
+ search: `${phoneCountryFlag(country.isoCode)} ${country.name} (${country.dialCode})`,
5466
+ }));
5467
+ selectedIso = this.defaultCountry;
5468
+ nationalNumber = '';
5469
+ disabled = false;
5470
+ onChange = () => { };
5471
+ onTouched = () => { };
5472
+ _ngControl;
5473
+ constructor(transloco, injector) {
5474
+ this.transloco = transloco;
5475
+ this.injector = injector;
5476
+ }
5477
+ get ngControl() {
5478
+ if (this._ngControl === undefined) {
5479
+ this._ngControl = this.injector.get(NgControl, null, { self: true });
5480
+ }
5481
+ return this._ngControl;
5482
+ }
5483
+ get selectedCountry() {
5484
+ return (this.countries.find((country) => country.isoCode === this.selectedIso) ?? this.countries[0]);
5485
+ }
5486
+ get dialCode() {
5487
+ return this.selectedCountry?.dialCode ?? '';
5488
+ }
5489
+ dialCodeOf(isoCode) {
5490
+ return this.countries.find((country) => country.isoCode === isoCode)?.dialCode ?? '';
5491
+ }
5492
+ get value() {
5493
+ return this.nationalNumber ? `${this.dialCode}${this.nationalNumber}` : '';
5494
+ }
5495
+ ngOnChanges(changes) {
5496
+ if (changes['required'] ||
5497
+ changes['defaultCountry'] ||
5498
+ changes['minlength'] ||
5499
+ changes['maxlength']) {
5500
+ this.ngControl?.control?.updateValueAndValidity();
5501
+ }
5502
+ }
5503
+ validate(control) {
5504
+ if (this.required && !control.value) {
5505
+ return { required: true };
5506
+ }
5507
+ if (!control.value) {
5508
+ return null;
5509
+ }
5510
+ const length = this.nationalDigits(control.value).length;
5511
+ const errors = {};
5512
+ if (this.minlength !== null && length < this.minlength) {
5513
+ errors['minlength'] = { requiredLength: this.minlength, actualLength: length };
5514
+ }
5515
+ if (this.maxlength !== null && length > this.maxlength) {
5516
+ errors['maxlength'] = { requiredLength: this.maxlength, actualLength: length };
5517
+ }
5518
+ return Object.keys(errors).length ? errors : null;
5519
+ }
5520
+ writeValue(value) {
5521
+ if (!value) {
5522
+ this.selectedIso = this.defaultCountry;
5523
+ this.nationalNumber = '';
5524
+ return;
5525
+ }
5526
+ const parsed = value.replace(/\D/g, '');
5527
+ const matched = this.countries.find((country) => parsed.startsWith(country.dialCode.replace('+', '')));
5528
+ if (matched) {
5529
+ this.selectedIso = matched.isoCode;
5530
+ this.nationalNumber = parsed.slice(matched.dialCode.replace('+', '').length);
5531
+ }
5532
+ else {
5533
+ this.selectedIso = this.defaultCountry;
5534
+ this.nationalNumber = parsed;
5535
+ }
5536
+ }
5537
+ registerOnChange(fn) {
5538
+ this.onChange = fn;
5539
+ }
5540
+ registerOnTouched(fn) {
5541
+ this.onTouched = fn;
5542
+ }
5543
+ setDisabledState(isDisabled) {
5544
+ this.disabled = isDisabled;
5545
+ }
5546
+ onInput(event) {
5547
+ const input = event.target;
5548
+ const sanitized = this.sanitize(input.value);
5549
+ input.value = sanitized;
5550
+ this.nationalNumber = sanitized;
5551
+ this.onChange(this.value);
5552
+ this.onTouched();
5553
+ }
5554
+ onCountryChange(isoCode) {
5555
+ this.selectedIso = isoCode;
5556
+ this.onChange(this.value);
5557
+ this.onTouched();
5558
+ }
5559
+ get inputId() {
5560
+ return this.id || this.name;
5561
+ }
5562
+ get showError() {
5563
+ if (!this.ngControl || !this.ngControl.control)
5564
+ return false;
5565
+ const control = this.ngControl.control;
5566
+ const dirty = control.dirty;
5567
+ const touched = control.touched;
5568
+ return control.invalid ? dirty || touched : false;
5569
+ }
5570
+ get errorMessage() {
5571
+ if (!this.ngControl?.errors)
5572
+ return '';
5573
+ const errors = this.ngControl.errors;
5574
+ const errorKey = Object.keys(errors)[0];
5575
+ if (errorKey === 'minlength' || errorKey === 'maxlength') {
5576
+ return this.transloco.translate(`formErrors.${errorKey}`, {
5577
+ length: errors[errorKey].requiredLength,
5578
+ });
5579
+ }
5580
+ return this.transloco.translate(`formErrors.${errorKey}`);
5581
+ }
5582
+ get effectivePlaceholder() {
5583
+ return this.placeholder || this.transloco.translate('phoneInput.placeholder');
5584
+ }
5585
+ get fieldGroupClasses() {
5586
+ let baseClasses = '';
5587
+ if (this.fieldGroupClass) {
5588
+ baseClasses += ` ${this.fieldGroupClass}`;
5589
+ }
5590
+ else {
5591
+ baseClasses += ' phone-input-group';
5592
+ }
5593
+ return baseClasses;
5594
+ }
5595
+ flag(isoCode) {
5596
+ return phoneCountryFlag(isoCode);
5597
+ }
5598
+ sanitize(value) {
5599
+ const digits = value.replace(/\D/g, '');
5600
+ return this.maxlength !== null ? digits.slice(0, this.maxlength) : digits;
5601
+ }
5602
+ nationalDigits(value) {
5603
+ const digits = String(value ?? '').replace(/\D/g, '');
5604
+ const dialDigits = this.dialCode.replace('+', '');
5605
+ return digits.startsWith(dialDigits) ? digits.slice(dialDigits.length) : digits;
5606
+ }
5607
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PhoneInputComponent, deps: [{ token: i1$3.TranslocoService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
5608
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: PhoneInputComponent, isStandalone: true, selector: "phone-input", inputs: { label: "label", name: "name", id: "id", placeholder: "placeholder", required: "required", readonly: "readonly", maxlength: "maxlength", minlength: "minlength", defaultCountry: "defaultCountry", fieldGroupClass: "fieldGroupClass" }, providers: [
5609
+ {
5610
+ provide: NG_VALUE_ACCESSOR,
5611
+ useExisting: forwardRef(() => PhoneInputComponent),
5612
+ multi: true,
5613
+ },
5614
+ { provide: NG_VALIDATORS, useExisting: forwardRef(() => PhoneInputComponent), multi: true },
5615
+ ], usesOnChanges: true, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"phone-input-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"phone-input-required\">*</span>\n }\n </label>\n }\n\n <div class=\"phone-input-field\">\n <div class=\"phone-prefix-wrapper\">\n <ng-select\n class=\"phone-prefix-select\"\n [items]=\"phoneOptions\"\n bindValue=\"isoCode\"\n bindLabel=\"search\"\n [searchable]=\"true\"\n [clearable]=\"false\"\n [virtualScroll]=\"true\"\n placeholder=\"\"\n [disabled]=\"disabled || readonly\"\n [ngModel]=\"selectedIso\"\n (ngModelChange)=\"onCountryChange($event)\"\n >\n <ng-template ng-label-tmp let-item=\"item\">\n {{ flag(item.isoCode) }} {{ item.dialCode }}\n </ng-template>\n <ng-template ng-option-tmp let-item=\"item\">\n {{ flag(item.isoCode) }} {{ item.name }} ({{ item.dialCode }})\n </ng-template>\n </ng-select>\n </div>\n\n <input\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"effectivePlaceholder\"\n [required]=\"required\"\n [attr.minlength]=\"minlength\"\n [attr.maxlength]=\"maxlength\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [value]=\"nationalNumber\"\n [class.error]=\"showError\"\n [class.disabled]=\"disabled || readonly\"\n [attr.inputmode]=\"'numeric'\"\n [autocomplete]=\"'tel-national'\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n class=\"phone-input form-input\"\n />\n </div>\n\n @if (showError) {\n <div class=\"phone-input-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".phone-input-group{width:100%}.phone-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}.phone-input-field{position:relative}.phone-prefix-wrapper{align-items:stretch;bottom:0;display:flex;left:0;position:absolute;top:0;z-index:10}.phone-prefix-wrapper .ng-select.phone-prefix-select{width:6rem}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container{background-color:transparent;border:none;border-radius:0;border-right:1px solid #d1d5db;box-shadow:none;height:100%;min-height:0}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container .ng-value-container{align-items:center;padding:0 .25rem 0 .5rem;white-space:nowrap}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container .ng-value-container .ng-placeholder{color:#9ca3af}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container .ng-value-container .ng-value{color:#374151;display:inline-flex;font-size:.75rem;height:auto;line-height:normal}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container .ng-value-container .ng-value .ng-value-label{color:#374151;font-size:.75rem;white-space:nowrap}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container .ng-value-container .ng-input>input{color:#111827;font-size:.75rem;padding-left:.5rem;height:100%}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-arrow-wrapper{padding-right:.25rem}.phone-prefix-wrapper .ng-select.phone-prefix-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{outline:none}.form-input.phone-input{padding-left:7rem}.phone-input-required{color:#ef4444}.phone-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}.ng-select.ng-select-opened>.ng-select-container{background-color:#fff;border-color:#d1d5db}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{border-top-color:#6b7280}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#d1d5db;outline:2px solid #4f46e5;outline-offset:2px}.ng-select.ng-select-disabled>.ng-select-container{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}.ng-select.error>.ng-select-container{outline:2px solid #ef4444;outline-offset:2px}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{color:#111827;background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;min-height:0}.ng-select .ng-select-container .ng-value-container{padding:.375rem 0 .375rem .75rem}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#9ca3af}.ng-select.ng-select-single .ng-select-container{display:flex;gap:.25rem;height:auto;height:33px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:50%;transform:translateY(-50%);left:.75rem}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input>input{font-size:.75rem;height:20px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value{height:auto;line-height:100%}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{gap:.25rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input>input{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{align-items:center;background-color:#eef2ff;border-radius:.125rem;display:flex;color:#4338ca;flex-flow:row nowrap;font-size:.75rem;height:22px;line-height:100%;gap:.25rem;overflow:hidden;padding:.25rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#e0e7ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{color:#6b7280;background-color:#f3f4f6}.ng-select .ng-clear-wrapper{align-items:center;color:#9ca3af;display:flex;flex-flow:column nowrap;justify-content:center}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#ef4444}.ng-select .ng-spinner-loader{border-top-color:#4f46e533;border-right-color:#4f46e533;border-bottom-color:#4f46e533;border-left-color:#4f46e5}.ng-select .ng-arrow-wrapper .ng-arrow{border-top-color:#9ca3af}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#4b5563}@media(prefers-color-scheme:dark){.ng-select.ng-select-opened>.ng-select-container{background-color:#1f2937;border-color:#4b5563}.ng-select.ng-select-disabled>.ng-select-container{background-color:#374151;color:#d1d5db}.ng-select .ng-select-container{color:#fff;background-color:#1f2937;border-color:#4b5563}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#6b7280}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{color:#a5b4fc;background-color:#4f46e533}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{color:#9ca3af;background-color:#374151}}.ng-dropdown-panel{background-color:#fff;border:1px solid #e5e7eb;border-radius:.375rem;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}.ng-dropdown-panel.ng-select-bottom{margin-top:.25rem}.ng-dropdown-panel.ng-select-top{margin-bottom:.25rem}.ng-dropdown-panel .ng-dropdown-header,.ng-dropdown-panel .ng-dropdown-footer{border-color:#e5e7eb;padding:.5rem}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar{width:4px;height:4px}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-track{background:transparent}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:9999px}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-thumb:hover{background:#9ca3af}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{font-weight:500;color:#6b7280}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f9fafb;font-size:.75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{color:#374151;background-color:#eef2ff;font-weight:600;font-size:.75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff!important;color:#111827!important;font-size:.75rem!important;padding:.5rem .75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{color:#4338ca!important;background-color:#eef2ff!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f9fafb!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#d1d5db!important}@media(prefers-color-scheme:dark){.ng-dropdown-panel{background-color:#1f2937;border-color:#374151}.ng-dropdown-panel .ng-dropdown-header,.ng-dropdown-panel .ng-dropdown-footer{border-color:#374151}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{color:#9ca3af}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#374151}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{color:#fff;background-color:#4f46e533}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#1f2937!important;color:#f3f4f6!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{color:#a5b4fc;background-color:#4f46e533}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#374151!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#4b5563!important}}\n", ".form-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-input-label{color:#d1d5db}}.form-input{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;outline:0;padding:.375rem .75rem;width:100%}.form-input::placeholder{color:#9ca3af}.form-input:focus{border-color:#1f2937}.form-input.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-input.error{background-color:#374151;outline-color:#ef4444}}.form-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-input.disabled{background-color:#374151;color:#d1d5db}}@media screen and (min-width:768px){.form-input{font-size:.875rem}}.form-input-required{color:#ef4444}.form-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }, { kind: "directive", type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }], encapsulation: i0.ViewEncapsulation.None });
5616
+ }
5617
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PhoneInputComponent, decorators: [{
5618
+ type: Component,
5619
+ args: [{ selector: 'phone-input', standalone: true, imports: [CommonModule, FormsModule, NgSelectModule], encapsulation: ViewEncapsulation.None, providers: [
5620
+ {
5621
+ provide: NG_VALUE_ACCESSOR,
5622
+ useExisting: forwardRef(() => PhoneInputComponent),
5623
+ multi: true,
5624
+ },
5625
+ { provide: NG_VALIDATORS, useExisting: forwardRef(() => PhoneInputComponent), multi: true },
5626
+ ], template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"phone-input-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"phone-input-required\">*</span>\n }\n </label>\n }\n\n <div class=\"phone-input-field\">\n <div class=\"phone-prefix-wrapper\">\n <ng-select\n class=\"phone-prefix-select\"\n [items]=\"phoneOptions\"\n bindValue=\"isoCode\"\n bindLabel=\"search\"\n [searchable]=\"true\"\n [clearable]=\"false\"\n [virtualScroll]=\"true\"\n placeholder=\"\"\n [disabled]=\"disabled || readonly\"\n [ngModel]=\"selectedIso\"\n (ngModelChange)=\"onCountryChange($event)\"\n >\n <ng-template ng-label-tmp let-item=\"item\">\n {{ flag(item.isoCode) }} {{ item.dialCode }}\n </ng-template>\n <ng-template ng-option-tmp let-item=\"item\">\n {{ flag(item.isoCode) }} {{ item.name }} ({{ item.dialCode }})\n </ng-template>\n </ng-select>\n </div>\n\n <input\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"effectivePlaceholder\"\n [required]=\"required\"\n [attr.minlength]=\"minlength\"\n [attr.maxlength]=\"maxlength\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [value]=\"nationalNumber\"\n [class.error]=\"showError\"\n [class.disabled]=\"disabled || readonly\"\n [attr.inputmode]=\"'numeric'\"\n [autocomplete]=\"'tel-national'\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n class=\"phone-input form-input\"\n />\n </div>\n\n @if (showError) {\n <div class=\"phone-input-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".phone-input-group{width:100%}.phone-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}.phone-input-field{position:relative}.phone-prefix-wrapper{align-items:stretch;bottom:0;display:flex;left:0;position:absolute;top:0;z-index:10}.phone-prefix-wrapper .ng-select.phone-prefix-select{width:6rem}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container{background-color:transparent;border:none;border-radius:0;border-right:1px solid #d1d5db;box-shadow:none;height:100%;min-height:0}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container .ng-value-container{align-items:center;padding:0 .25rem 0 .5rem;white-space:nowrap}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container .ng-value-container .ng-placeholder{color:#9ca3af}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container .ng-value-container .ng-value{color:#374151;display:inline-flex;font-size:.75rem;height:auto;line-height:normal}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container .ng-value-container .ng-value .ng-value-label{color:#374151;font-size:.75rem;white-space:nowrap}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-select-container .ng-value-container .ng-input>input{color:#111827;font-size:.75rem;padding-left:.5rem;height:100%}.phone-prefix-wrapper .ng-select.phone-prefix-select .ng-arrow-wrapper{padding-right:.25rem}.phone-prefix-wrapper .ng-select.phone-prefix-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{outline:none}.form-input.phone-input{padding-left:7rem}.phone-input-required{color:#ef4444}.phone-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}.ng-select.ng-select-opened>.ng-select-container{background-color:#fff;border-color:#d1d5db}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{border-top-color:#6b7280}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#d1d5db;outline:2px solid #4f46e5;outline-offset:2px}.ng-select.ng-select-disabled>.ng-select-container{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}.ng-select.error>.ng-select-container{outline:2px solid #ef4444;outline-offset:2px}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{color:#111827;background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;min-height:0}.ng-select .ng-select-container .ng-value-container{padding:.375rem 0 .375rem .75rem}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#9ca3af}.ng-select.ng-select-single .ng-select-container{display:flex;gap:.25rem;height:auto;height:33px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:50%;transform:translateY(-50%);left:.75rem}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input>input{font-size:.75rem;height:20px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value{height:auto;line-height:100%}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{gap:.25rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input>input{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{align-items:center;background-color:#eef2ff;border-radius:.125rem;display:flex;color:#4338ca;flex-flow:row nowrap;font-size:.75rem;height:22px;line-height:100%;gap:.25rem;overflow:hidden;padding:.25rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#e0e7ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{color:#6b7280;background-color:#f3f4f6}.ng-select .ng-clear-wrapper{align-items:center;color:#9ca3af;display:flex;flex-flow:column nowrap;justify-content:center}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#ef4444}.ng-select .ng-spinner-loader{border-top-color:#4f46e533;border-right-color:#4f46e533;border-bottom-color:#4f46e533;border-left-color:#4f46e5}.ng-select .ng-arrow-wrapper .ng-arrow{border-top-color:#9ca3af}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#4b5563}@media(prefers-color-scheme:dark){.ng-select.ng-select-opened>.ng-select-container{background-color:#1f2937;border-color:#4b5563}.ng-select.ng-select-disabled>.ng-select-container{background-color:#374151;color:#d1d5db}.ng-select .ng-select-container{color:#fff;background-color:#1f2937;border-color:#4b5563}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#6b7280}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{color:#a5b4fc;background-color:#4f46e533}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{color:#9ca3af;background-color:#374151}}.ng-dropdown-panel{background-color:#fff;border:1px solid #e5e7eb;border-radius:.375rem;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}.ng-dropdown-panel.ng-select-bottom{margin-top:.25rem}.ng-dropdown-panel.ng-select-top{margin-bottom:.25rem}.ng-dropdown-panel .ng-dropdown-header,.ng-dropdown-panel .ng-dropdown-footer{border-color:#e5e7eb;padding:.5rem}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar{width:4px;height:4px}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-track{background:transparent}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:9999px}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-thumb:hover{background:#9ca3af}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{font-weight:500;color:#6b7280}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f9fafb;font-size:.75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{color:#374151;background-color:#eef2ff;font-weight:600;font-size:.75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff!important;color:#111827!important;font-size:.75rem!important;padding:.5rem .75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{color:#4338ca!important;background-color:#eef2ff!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f9fafb!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#d1d5db!important}@media(prefers-color-scheme:dark){.ng-dropdown-panel{background-color:#1f2937;border-color:#374151}.ng-dropdown-panel .ng-dropdown-header,.ng-dropdown-panel .ng-dropdown-footer{border-color:#374151}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{color:#9ca3af}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#374151}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{color:#fff;background-color:#4f46e533}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#1f2937!important;color:#f3f4f6!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{color:#a5b4fc;background-color:#4f46e533}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#374151!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#4b5563!important}}\n", ".form-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-input-label{color:#d1d5db}}.form-input{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;outline:0;padding:.375rem .75rem;width:100%}.form-input::placeholder{color:#9ca3af}.form-input:focus{border-color:#1f2937}.form-input.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.form-input.error{background-color:#374151;outline-color:#ef4444}}.form-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.form-input.disabled{background-color:#374151;color:#d1d5db}}@media screen and (min-width:768px){.form-input{font-size:.875rem}}.form-input-required{color:#ef4444}.form-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"] }]
5627
+ }], ctorParameters: () => [{ type: i1$3.TranslocoService }, { type: i0.Injector }], propDecorators: { label: [{
5628
+ type: Input
5629
+ }], name: [{
5630
+ type: Input
5631
+ }], id: [{
5632
+ type: Input
5633
+ }], placeholder: [{
5634
+ type: Input
5635
+ }], required: [{
5636
+ type: Input
5637
+ }], readonly: [{
5638
+ type: Input
5639
+ }], maxlength: [{
5640
+ type: Input
5641
+ }], minlength: [{
5642
+ type: Input
5643
+ }], defaultCountry: [{
5644
+ type: Input
5645
+ }], fieldGroupClass: [{
5646
+ type: Input
5647
+ }] } });
5648
+
5204
5649
  class FormEditorComponent {
5205
5650
  ngControl;
5206
5651
  transloco;
@@ -5297,7 +5742,7 @@ class FormEditorComponent {
5297
5742
  }
5298
5743
  return baseClasses;
5299
5744
  }
5300
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormEditorComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i2.TranslocoService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
5745
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormEditorComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i1$3.TranslocoService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
5301
5746
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: FormEditorComponent, isStandalone: true, selector: "form-editor", inputs: { label: "label", name: "name", id: "id", placeholder: "placeholder", required: "required", readonly: "readonly", toolbar: "toolbar", fieldGroupClass: "fieldGroupClass" }, host: { attributes: { "ngSkipHydration": "true" } }, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"form-editor-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"form-editor-required\">*</span>\n }\n </label>\n }\n\n @if (isBrowser) {\n <div class=\"form-editor-wrapper\" [class.disabled]=\"disabled\">\n <ngx-editor [editor]=\"editor\" outputFormat=\"html\" [placeholder]=\"placeholder\">\n <ngx-editor-menu\n [editor]=\"editor\"\n [toolbar]=\"toolbar\"\n [disabled]=\"disabled\"\n ></ngx-editor-menu>\n </ngx-editor>\n </div>\n }\n\n @if (showError) {\n <div class=\"form-editor-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".form-editor-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.form-editor-label{color:#d1d5db}}.form-editor-wrapper{position:relative}.form-editor-wrapper.disabled{opacity:.5;pointer-events:none;cursor:not-allowed}.form-editor-required{color:#ef4444}.form-editor-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: NgxEditorComponent, selector: "ngx-editor", inputs: ["editor", "outputFormat", "placeholder"], outputs: ["focusOut", "focusIn"] }, { kind: "component", type: NgxEditorMenuComponent, selector: "ngx-editor-menu", inputs: ["toolbar", "colorPresets", "disabled", "editor", "customMenuRef", "dropdownPlacement"] }] });
5302
5747
  }
5303
5748
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FormEditorComponent, decorators: [{
@@ -5313,7 +5758,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
5313
5758
  type: Self
5314
5759
  }, {
5315
5760
  type: Optional
5316
- }] }, { type: i2.TranslocoService }, { type: undefined, decorators: [{
5761
+ }] }, { type: i1$3.TranslocoService }, { type: undefined, decorators: [{
5317
5762
  type: Inject,
5318
5763
  args: [PLATFORM_ID]
5319
5764
  }] }], propDecorators: { label: [{
@@ -5589,7 +6034,7 @@ class DateInputComponent {
5589
6034
  }
5590
6035
  return baseClasses;
5591
6036
  }
5592
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DateInputComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
6037
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DateInputComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i1$3.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
5593
6038
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: DateInputComponent, isStandalone: true, selector: "date-input", inputs: { label: "label", type: "type", includeTime: "includeTime", name: "name", id: "id", placeholder: "placeholder", required: "required", readonly: "readonly", min: "min", max: "max", fieldGroupClass: "fieldGroupClass", dateFormat: "dateFormat" }, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"date-input-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"date-input-required\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <input\n [type]=\"includeTime ? 'datetime-local' : type\"\n [id]=\"inputId\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [min]=\"min\"\n [max]=\"max\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n [disabled]=\"disabled\"\n class=\"date-input\"\n [class.disabled]=\"readonly\"\n [class.error]=\"showError\"\n [readonly]=\"readonly\"\n />\n </div>\n\n @if (showError) {\n <div class=\"date-input-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".date-input-label{color:#374151;display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.date-input-label{color:#d1d5db}}.date-input{background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;color:#111827;display:block;padding:.375rem .75rem;outline:1px solid #d1d5db;outline-offset:1px;width:100%}.date-input::placeholder{color:#9ca3af}.date-input:focus{outline:2px solid #4f46e5;outline-offset:2px}.date-input.error{outline-color:#ef4444}@media(prefers-color-scheme:dark){.date-input.error{background-color:#374151;color:#fff;outline-color:#ef4444}}.date-input.disabled{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}@media(prefers-color-scheme:dark){.date-input.disabled{background-color:#374151;color:#d1d5db}}@media(min-width:768px){.date-input{font-size:.875rem}}.date-input-required{color:#ef4444}.date-input-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }] });
5594
6039
  }
5595
6040
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DateInputComponent, decorators: [{
@@ -5599,7 +6044,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
5599
6044
  type: Self
5600
6045
  }, {
5601
6046
  type: Optional
5602
- }] }, { type: i2.TranslocoService }], propDecorators: { label: [{
6047
+ }] }, { type: i1$3.TranslocoService }], propDecorators: { label: [{
5603
6048
  type: Input
5604
6049
  }], type: [{
5605
6050
  type: Input
@@ -6003,8 +6448,8 @@ class FileUploadComponent {
6003
6448
  }
6004
6449
  return baseClasses;
6005
6450
  }
6006
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FileUploadComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
6007
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: FileUploadComponent, isStandalone: true, selector: "file-upload", inputs: { label: "label", name: "name", id: "id", required: "required", readonly: "readonly", fieldGroupClass: "fieldGroupClass", config: "config", accept: "accept" }, outputs: { fileSelected: "fileSelected", fileRemoved: "fileRemoved", validationError: "validationError" }, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"file-upload-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"file-upload-required\">*</span>\n }\n </label>\n }\n\n <!-- Upload Area -->\n <div\n class=\"file-upload-container\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n >\n <div [class]=\"uploadAreaClasses\" (click)=\"!disabled && triggerFileInput()\">\n <input\n [id]=\"inputId\"\n [name]=\"name\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"config.multiple\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (change)=\"onFileSelect($event)\"\n (blur)=\"onTouched()\"\n class=\"file-upload-hidden\"\n />\n\n <div class=\"file-upload-content\">\n <i class=\"ri-upload-cloud-2-line file-upload-icon\"></i>\n <div class=\"file-upload-text\">\n <p class=\"file-upload-primary-text\">\n @if (config.multiple) {\n {{ 'fileUpload.dropMultiple' | transloco }}\n } @else {\n {{ 'fileUpload.dropSingle' | transloco }}\n }\n </p>\n <p class=\"file-upload-secondary-text\">\n @if (config.allowedExtensions && config.allowedExtensions.length > 0) {\n {{ 'fileUpload.allowedExtensions' | transloco }}\n {{ config.allowedExtensions.join(', ') }}\n }\n @if (config.maxFileSize) {\n \u2022 {{ 'fileUpload.maxSize' | transloco }} {{ formatFileSize(config.maxFileSize) }}\n }\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Files Preview -->\n @if (files.length > 0) {\n <div class=\"file-upload-list\">\n @for (file of files; track file; let i = $index) {\n <file-upload-preview [file]=\"file\" (remove)=\"removeFile(i)\" />\n }\n </div>\n }\n\n <!-- Validation Error -->\n @if (showError) {\n <div class=\"file-upload-error\">\n {{ errorMessage }}\n </div>\n }\n\n <!-- File Type Legend -->\n @if (files.length === 0) {\n <div class=\"file-upload-legend\">\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-image-line file-upload-legend-icon-blue\"></i>\n <span>{{ 'fileUpload.fileTypeImages' | transloco }}</span>\n </div>\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-file-pdf-line file-upload-legend-icon-red\"></i>\n <span>PDF</span>\n </div>\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-file-excel-line file-upload-legend-icon-green\"></i>\n <span>{{ 'fileUpload.fileTypeExcel' | transloco }}</span>\n </div>\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-file-word-line file-upload-legend-icon-word\"></i>\n <span>{{ 'fileUpload.fileTypeWord' | transloco }}</span>\n </div>\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-file-text-line file-upload-legend-icon-gray\"></i>\n <span>{{ 'fileUpload.fileTypeText' | transloco }}</span>\n </div>\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-file-line file-upload-legend-icon-muted\"></i>\n <span>{{ 'fileUpload.fileTypeOther' | transloco }}</span>\n </div>\n </div>\n }\n</div>\n", styles: [".file-upload-label{display:block;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:500;color:#374151;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.file-upload-label{color:#d1d5db}}.file-upload-required{color:#ef4444}.file-upload-container{position:relative;width:100%}.file-upload-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.file-upload-content{display:flex;flex-direction:column;align-items:center;gap:.5rem}.file-upload-icon{font-size:1.875rem;color:#9ca3af}.file-upload-text{font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.875rem;color:#4b5563}.file-upload-primary-text{font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:500;margin:0}.file-upload-secondary-text{color:#6b7280;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.75rem;margin-top:.25rem;margin-bottom:0}.file-upload-area{border:2px dashed #d1d5db;border-radius:.5rem;padding:1.5rem;text-align:center;transition:all .2s ease-in-out;cursor:pointer}.file-upload-area:hover:not(.disabled):not(.drag-over){border-color:#9ca3af;background-color:#f9fafb}.file-upload-area.drag-over{border-color:#60a5fa;background-color:#eff6ff}.file-upload-area.disabled{border-color:#e5e7eb;background-color:#f9fafb;cursor:not-allowed}.file-upload-list{display:flex;flex-direction:column;gap:.5rem;margin-top:1rem}.file-upload-error{color:#ef4444;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.75rem;margin-top:.25rem}.file-upload-legend{display:flex;flex-wrap:wrap;gap:1rem;margin-top:.75rem;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.75rem;color:#6b7280}@media(prefers-color-scheme:dark){.file-upload-legend{color:#9ca3af}}.file-upload-legend-item{display:flex;align-items:center;gap:.25rem}.file-upload-legend-icon-blue{color:#3b82f6}.file-upload-legend-icon-red{color:#ef4444}.file-upload-legend-icon-green{color:#10b981}.file-upload-legend-icon-word{color:#2563eb}.file-upload-legend-icon-gray{color:#6b7280}.file-upload-legend-icon-muted{color:#9ca3af}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.file-upload-drag-active{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.file-upload-file-list{max-height:15rem;overflow-y:auto}.file-upload-file-list::-webkit-scrollbar{width:.5rem}.file-upload-file-list::-webkit-scrollbar-track{background-color:#f3f4f6;border-radius:9999px}.file-upload-file-list::-webkit-scrollbar-thumb{background-color:#d1d5db;border-radius:9999px}.file-upload-file-list::-webkit-scrollbar-thumb:hover{background-color:#9ca3af}.file-type-icon--image{color:#3b82f6}.file-type-icon--pdf{color:#ef4444}.file-type-icon--excel{color:#10b981}.file-type-icon--word{color:#2563eb}.file-type-icon--text{color:#6b7280}.file-type-icon--default{color:#9ca3af}@media(max-width:640px){.file-upload-area{padding:1rem}.file-upload-icon{font-size:1.25rem}.file-upload-text{font-size:.75rem}}@media(prefers-color-scheme:dark){.file-upload-area{border-color:#4b5563;background-color:#1f2937}.file-upload-area:hover:not(.disabled):not(.drag-over){border-color:#6b7280;background-color:#374151}.file-upload-area.drag-over{border-color:#60a5fa;background-color:#eff6ff}.file-upload-area.disabled{border-color:#374151;background-color:#111827}.file-upload-text{color:#d1d5db}.file-upload-primary-text{color:#f3f4f6}.file-upload-secondary-text{color:#9ca3af}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: FileUploadPreviewComponent, selector: "file-upload-preview", inputs: ["file"], outputs: ["remove"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
6451
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FileUploadComponent, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i1$3.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
6452
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: FileUploadComponent, isStandalone: true, selector: "file-upload", inputs: { label: "label", name: "name", id: "id", required: "required", readonly: "readonly", fieldGroupClass: "fieldGroupClass", config: "config", accept: "accept" }, outputs: { fileSelected: "fileSelected", fileRemoved: "fileRemoved", validationError: "validationError" }, ngImport: i0, template: "<div [class]=\"fieldGroupClasses\">\n @if (label) {\n <label [for]=\"inputId\" class=\"file-upload-label\">\n {{ label }}\n\n @if (required) {\n <span class=\"file-upload-required\">*</span>\n }\n </label>\n }\n\n <!-- Upload Area -->\n <div\n class=\"file-upload-container\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n >\n <div [class]=\"uploadAreaClasses\" (click)=\"!disabled && triggerFileInput()\">\n <input\n [id]=\"inputId\"\n [name]=\"name\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"config.multiple\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (change)=\"onFileSelect($event)\"\n (blur)=\"onTouched()\"\n class=\"file-upload-hidden\"\n />\n\n <div class=\"file-upload-content\">\n <i class=\"ri-upload-cloud-2-line file-upload-icon\"></i>\n <div class=\"file-upload-text\">\n <p class=\"file-upload-primary-text\">\n @if (config.multiple) {\n {{ 'fileUpload.dropMultiple' | transloco }}\n } @else {\n {{ 'fileUpload.dropSingle' | transloco }}\n }\n </p>\n <p class=\"file-upload-secondary-text\">\n @if (config.allowedExtensions && config.allowedExtensions.length > 0) {\n {{ 'fileUpload.allowedExtensions' | transloco }}\n {{ config.allowedExtensions.join(', ') }}\n }\n @if (config.maxFileSize) {\n \u2022 {{ 'fileUpload.maxSize' | transloco }} {{ formatFileSize(config.maxFileSize) }}\n }\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Files Preview -->\n @if (files.length > 0) {\n <div class=\"file-upload-list\">\n @for (file of files; track file; let i = $index) {\n <file-upload-preview [file]=\"file\" (remove)=\"removeFile(i)\" />\n }\n </div>\n }\n\n <!-- Validation Error -->\n @if (showError) {\n <div class=\"file-upload-error\">\n {{ errorMessage }}\n </div>\n }\n\n <!-- File Type Legend -->\n @if (files.length === 0) {\n <div class=\"file-upload-legend\">\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-image-line file-upload-legend-icon-blue\"></i>\n <span>{{ 'fileUpload.fileTypeImages' | transloco }}</span>\n </div>\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-file-pdf-line file-upload-legend-icon-red\"></i>\n <span>PDF</span>\n </div>\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-file-excel-line file-upload-legend-icon-green\"></i>\n <span>{{ 'fileUpload.fileTypeExcel' | transloco }}</span>\n </div>\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-file-word-line file-upload-legend-icon-word\"></i>\n <span>{{ 'fileUpload.fileTypeWord' | transloco }}</span>\n </div>\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-file-text-line file-upload-legend-icon-gray\"></i>\n <span>{{ 'fileUpload.fileTypeText' | transloco }}</span>\n </div>\n <div class=\"file-upload-legend-item\">\n <i class=\"ri-file-line file-upload-legend-icon-muted\"></i>\n <span>{{ 'fileUpload.fileTypeOther' | transloco }}</span>\n </div>\n </div>\n }\n</div>\n", styles: [".file-upload-label{display:block;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:500;color:#374151;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.file-upload-label{color:#d1d5db}}.file-upload-required{color:#ef4444}.file-upload-container{position:relative;width:100%}.file-upload-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.file-upload-content{display:flex;flex-direction:column;align-items:center;gap:.5rem}.file-upload-icon{font-size:1.875rem;color:#9ca3af}.file-upload-text{font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.875rem;color:#4b5563}.file-upload-primary-text{font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:500;margin:0}.file-upload-secondary-text{color:#6b7280;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.75rem;margin-top:.25rem;margin-bottom:0}.file-upload-area{border:2px dashed #d1d5db;border-radius:.5rem;padding:1.5rem;text-align:center;transition:all .2s ease-in-out;cursor:pointer}.file-upload-area:hover:not(.disabled):not(.drag-over){border-color:#9ca3af;background-color:#f9fafb}.file-upload-area.drag-over{border-color:#60a5fa;background-color:#eff6ff}.file-upload-area.disabled{border-color:#e5e7eb;background-color:#f9fafb;cursor:not-allowed}.file-upload-list{display:flex;flex-direction:column;gap:.5rem;margin-top:1rem}.file-upload-error{color:#ef4444;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.75rem;margin-top:.25rem}.file-upload-legend{display:flex;flex-wrap:wrap;gap:1rem;margin-top:.75rem;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.75rem;color:#6b7280}@media(prefers-color-scheme:dark){.file-upload-legend{color:#9ca3af}}.file-upload-legend-item{display:flex;align-items:center;gap:.25rem}.file-upload-legend-icon-blue{color:#3b82f6}.file-upload-legend-icon-red{color:#ef4444}.file-upload-legend-icon-green{color:#10b981}.file-upload-legend-icon-word{color:#2563eb}.file-upload-legend-icon-gray{color:#6b7280}.file-upload-legend-icon-muted{color:#9ca3af}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.file-upload-drag-active{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.file-upload-file-list{max-height:15rem;overflow-y:auto}.file-upload-file-list::-webkit-scrollbar{width:.5rem}.file-upload-file-list::-webkit-scrollbar-track{background-color:#f3f4f6;border-radius:9999px}.file-upload-file-list::-webkit-scrollbar-thumb{background-color:#d1d5db;border-radius:9999px}.file-upload-file-list::-webkit-scrollbar-thumb:hover{background-color:#9ca3af}.file-type-icon--image{color:#3b82f6}.file-type-icon--pdf{color:#ef4444}.file-type-icon--excel{color:#10b981}.file-type-icon--word{color:#2563eb}.file-type-icon--text{color:#6b7280}.file-type-icon--default{color:#9ca3af}@media(max-width:640px){.file-upload-area{padding:1rem}.file-upload-icon{font-size:1.25rem}.file-upload-text{font-size:.75rem}}@media(prefers-color-scheme:dark){.file-upload-area{border-color:#4b5563;background-color:#1f2937}.file-upload-area:hover:not(.disabled):not(.drag-over){border-color:#6b7280;background-color:#374151}.file-upload-area.drag-over{border-color:#60a5fa;background-color:#eff6ff}.file-upload-area.disabled{border-color:#374151;background-color:#111827}.file-upload-text{color:#d1d5db}.file-upload-primary-text{color:#f3f4f6}.file-upload-secondary-text{color:#9ca3af}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: FileUploadPreviewComponent, selector: "file-upload-preview", inputs: ["file"], outputs: ["remove"] }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }] });
6008
6453
  }
6009
6454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FileUploadComponent, decorators: [{
6010
6455
  type: Component,
@@ -6019,7 +6464,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
6019
6464
  type: Self
6020
6465
  }, {
6021
6466
  type: Optional
6022
- }] }, { type: i2.TranslocoService }], propDecorators: { label: [{
6467
+ }] }, { type: i1$3.TranslocoService }], propDecorators: { label: [{
6023
6468
  type: Input
6024
6469
  }], name: [{
6025
6470
  type: Input
@@ -6197,7 +6642,7 @@ class AsyncSelectComponent {
6197
6642
  useExisting: forwardRef(() => AsyncSelectComponent),
6198
6643
  multi: true,
6199
6644
  },
6200
- ], usesOnChanges: true, ngImport: i0, template: "<div class=\"async-select-wrapper\">\n @if (label) {\n <label class=\"async-select-label\">\n {{ label }}\n @if (required) {\n <span class=\"async-select-required\">*</span>\n }\n </label>\n }\n\n <ng-select\n [items]=\"displayItems\"\n [multiple]=\"multiple\"\n [searchable]=\"searchable\"\n [clearable]=\"clearable\"\n [placeholder]=\"placeholder\"\n [loading]=\"loading || loadingSignal()\"\n [virtualScroll]=\"virtualScroll\"\n [notFoundText]=\"notFoundText\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [ngModel]=\"value\"\n [typeahead]=\"typeahead$\"\n [closeOnSelect]=\"!multiple\"\n [disabled]=\"disabled\"\n [class.error]=\"showError\"\n (ngModelChange)=\"onSelectChange($event)\"\n (blur)=\"onTouched()\"\n (search)=\"onSearch($event)\"\n />\n\n @if (showError) {\n <div class=\"async-select-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".async-select-wrapper{width:100%}.async-select-label{display:block;font-size:.875rem;font-weight:500;color:#374151;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.async-select-label{color:#d1d5db}}.async-select-required{color:#ef4444}.async-select-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}.ng-select.ng-select-opened>.ng-select-container{background-color:#fff;border-color:#d1d5db}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{border-top-color:#6b7280}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#d1d5db;outline:2px solid #4f46e5;outline-offset:2px}.ng-select.ng-select-disabled>.ng-select-container{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}.ng-select.error>.ng-select-container{outline:2px solid #ef4444;outline-offset:2px}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{color:#111827;background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;min-height:0}.ng-select .ng-select-container .ng-value-container{padding:.375rem 0 .375rem .75rem}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#9ca3af}.ng-select.ng-select-single .ng-select-container{display:flex;gap:.25rem;height:auto;height:33px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:50%;transform:translateY(-50%);left:.75rem}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input>input{font-size:.75rem;height:20px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value{height:auto;line-height:100%}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{gap:.25rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input>input{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{align-items:center;background-color:#eef2ff;border-radius:.125rem;display:flex;color:#4338ca;flex-flow:row nowrap;font-size:.75rem;height:22px;line-height:100%;gap:.25rem;overflow:hidden;padding:.25rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#e0e7ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{color:#6b7280;background-color:#f3f4f6}.ng-select .ng-clear-wrapper{align-items:center;color:#9ca3af;display:flex;flex-flow:column nowrap;justify-content:center}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#ef4444}.ng-select .ng-spinner-loader{border-top-color:#4f46e533;border-right-color:#4f46e533;border-bottom-color:#4f46e533;border-left-color:#4f46e5}.ng-select .ng-arrow-wrapper .ng-arrow{border-top-color:#9ca3af}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#4b5563}@media(prefers-color-scheme:dark){.ng-select.ng-select-opened>.ng-select-container{background-color:#1f2937;border-color:#4b5563}.ng-select.ng-select-disabled>.ng-select-container{background-color:#374151;color:#d1d5db}.ng-select .ng-select-container{color:#fff;background-color:#1f2937;border-color:#4b5563}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#6b7280}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{color:#a5b4fc;background-color:#4f46e533}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{color:#9ca3af;background-color:#374151}}.ng-dropdown-panel{background-color:#fff;border:1px solid #e5e7eb;border-radius:.375rem;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}.ng-dropdown-panel.ng-select-bottom{margin-top:.25rem}.ng-dropdown-panel.ng-select-top{margin-bottom:.25rem}.ng-dropdown-panel .ng-dropdown-header,.ng-dropdown-panel .ng-dropdown-footer{border-color:#e5e7eb;padding:.5rem}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar{width:4px;height:4px}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-track{background:transparent}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:9999px}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-thumb:hover{background:#9ca3af}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{font-weight:500;color:#6b7280}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f9fafb;font-size:.75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{color:#374151;background-color:#eef2ff;font-weight:600;font-size:.75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff!important;color:#111827!important;font-size:.75rem!important;padding:.5rem .75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{color:#4338ca!important;background-color:#eef2ff!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f9fafb!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#d1d5db!important}@media(prefers-color-scheme:dark){.ng-dropdown-panel{background-color:#1f2937;border-color:#374151}.ng-dropdown-panel .ng-dropdown-header,.ng-dropdown-panel .ng-dropdown-footer{border-color:#374151}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{color:#9ca3af}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#374151}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{color:#fff;background-color:#4f46e533}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#1f2937!important;color:#f3f4f6!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{color:#a5b4fc;background-color:#4f46e533}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#374151!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#4b5563!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i2$1.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }], encapsulation: i0.ViewEncapsulation.None });
6645
+ ], usesOnChanges: true, ngImport: i0, template: "<div class=\"async-select-wrapper\">\n @if (label) {\n <label class=\"async-select-label\">\n {{ label }}\n @if (required) {\n <span class=\"async-select-required\">*</span>\n }\n </label>\n }\n\n <ng-select\n [items]=\"displayItems\"\n [multiple]=\"multiple\"\n [searchable]=\"searchable\"\n [clearable]=\"clearable\"\n [placeholder]=\"placeholder\"\n [loading]=\"loading || loadingSignal()\"\n [virtualScroll]=\"virtualScroll\"\n [notFoundText]=\"notFoundText\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [ngModel]=\"value\"\n [typeahead]=\"typeahead$\"\n [closeOnSelect]=\"!multiple\"\n [disabled]=\"disabled\"\n [class.error]=\"showError\"\n (ngModelChange)=\"onSelectChange($event)\"\n (blur)=\"onTouched()\"\n (search)=\"onSearch($event)\"\n />\n\n @if (showError) {\n <div class=\"async-select-error-message\">\n {{ errorMessage }}\n </div>\n }\n</div>\n", styles: [".async-select-wrapper{width:100%}.async-select-label{display:block;font-size:.875rem;font-weight:500;color:#374151;margin-bottom:.25rem}@media(prefers-color-scheme:dark){.async-select-label{color:#d1d5db}}.async-select-required{color:#ef4444}.async-select-error-message{color:#ef4444;font-size:.75rem;margin-top:.25rem}.ng-select.ng-select-opened>.ng-select-container{background-color:#fff;border-color:#d1d5db}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{border-top-color:#6b7280}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#d1d5db;outline:2px solid #4f46e5;outline-offset:2px}.ng-select.ng-select-disabled>.ng-select-container{background-color:#e5e7eb;color:#6b7280;cursor:not-allowed}.ng-select.error>.ng-select-container{outline:2px solid #ef4444;outline-offset:2px}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{color:#111827;background-color:#fff;border:1px solid #d1d5db;border-radius:.375rem;min-height:0}.ng-select .ng-select-container .ng-value-container{padding:.375rem 0 .375rem .75rem}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#9ca3af}.ng-select.ng-select-single .ng-select-container{display:flex;gap:.25rem;height:auto;height:33px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:50%;transform:translateY(-50%);left:.75rem}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input>input{font-size:.75rem;height:20px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value{height:auto;line-height:100%}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{gap:.25rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input>input{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{align-items:center;background-color:#eef2ff;border-radius:.125rem;display:flex;color:#4338ca;flex-flow:row nowrap;font-size:.75rem;height:22px;line-height:100%;gap:.25rem;overflow:hidden;padding:.25rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:.75rem}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#e0e7ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{color:#6b7280;background-color:#f3f4f6}.ng-select .ng-clear-wrapper{align-items:center;color:#9ca3af;display:flex;flex-flow:column nowrap;justify-content:center}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#ef4444}.ng-select .ng-spinner-loader{border-top-color:#4f46e533;border-right-color:#4f46e533;border-bottom-color:#4f46e533;border-left-color:#4f46e5}.ng-select .ng-arrow-wrapper .ng-arrow{border-top-color:#9ca3af}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#4b5563}@media(prefers-color-scheme:dark){.ng-select.ng-select-opened>.ng-select-container{background-color:#1f2937;border-color:#4b5563}.ng-select.ng-select-disabled>.ng-select-container{background-color:#374151;color:#d1d5db}.ng-select .ng-select-container{color:#fff;background-color:#1f2937;border-color:#4b5563}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#6b7280}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{color:#a5b4fc;background-color:#4f46e533}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{color:#9ca3af;background-color:#374151}}.ng-dropdown-panel{background-color:#fff;border:1px solid #e5e7eb;border-radius:.375rem;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}.ng-dropdown-panel.ng-select-bottom{margin-top:.25rem}.ng-dropdown-panel.ng-select-top{margin-bottom:.25rem}.ng-dropdown-panel .ng-dropdown-header,.ng-dropdown-panel .ng-dropdown-footer{border-color:#e5e7eb;padding:.5rem}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar{width:4px;height:4px}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-track{background:transparent}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:9999px}.ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-thumb:hover{background:#9ca3af}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{font-weight:500;color:#6b7280}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f9fafb;font-size:.75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{color:#374151;background-color:#eef2ff;font-weight:600;font-size:.75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff!important;color:#111827!important;font-size:.75rem!important;padding:.5rem .75rem}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{color:#4338ca!important;background-color:#eef2ff!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f9fafb!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#d1d5db!important}@media(prefers-color-scheme:dark){.ng-dropdown-panel{background-color:#1f2937;border-color:#374151}.ng-dropdown-panel .ng-dropdown-header,.ng-dropdown-panel .ng-dropdown-footer{border-color:#374151}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{color:#9ca3af}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#374151}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{color:#fff;background-color:#4f46e533}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#1f2937!important;color:#f3f4f6!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{color:#a5b4fc;background-color:#4f46e533}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#374151!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#4b5563!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }], encapsulation: i0.ViewEncapsulation.None });
6201
6646
  }
6202
6647
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AsyncSelectComponent, decorators: [{
6203
6648
  type: Component,
@@ -6297,8 +6742,8 @@ class ChangePasswordFormComponent {
6297
6742
  },
6298
6743
  });
6299
6744
  }
6300
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ChangePasswordFormComponent, deps: [{ token: i1$2.FormBuilder }, { token: ChangePasswordFormService }, { token: CustomerService }, { token: AdminService }, { token: ToastService }, { token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
6301
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ChangePasswordFormComponent, isStandalone: true, selector: "change-password-form", providers: [AdminService, CustomerService], ngImport: i0, template: "@if (isOpen()) {\n <app-modal\n [title]=\"'changePassword.title' | transloco\"\n [isOpen]=\"isOpen\"\n (closeModal)=\"onCloseModal()\"\n >\n <form\n [formGroup]=\"changePasswordForm\"\n method=\"POST\"\n class=\"change-password-form-body\"\n (ngSubmit)=\"onConfirmDelete()\"\n >\n <form-input\n [label]=\"'changePassword.newPasswordLabel' | transloco\"\n [placeholder]=\"'changePassword.newPasswordPlaceholder' | transloco\"\n name=\"password\"\n type=\"password\"\n class=\"change-password-form-field\"\n [required]=\"true\"\n [autocomplete]=\"false\"\n formControlName=\"password\"\n />\n\n <form-input\n [label]=\"'changePassword.confirmPasswordLabel' | transloco\"\n [placeholder]=\"'changePassword.confirmPasswordPlaceholder' | transloco\"\n name=\"confirm_password\"\n type=\"password\"\n class=\"change-password-form-field\"\n [required]=\"true\"\n [autocomplete]=\"false\"\n formControlName=\"confirm_password\"\n />\n\n <div class=\"change-password-form-actions\">\n <app-button\n variant=\"tertiary\"\n [text]=\"'changePassword.cancel' | transloco\"\n (click)=\"onCloseModal()\"\n size=\"sm\"\n />\n\n <app-button\n [disabled]=\"loading() || changePasswordForm.invalid || changePasswordForm.pristine\"\n [loading]=\"loading()\"\n type=\"submit\"\n variant=\"primary\"\n [text]=\"'changePassword.save' | transloco\"\n [loadingText]=\"'changePassword.saving' | transloco\"\n size=\"sm\"\n />\n </div>\n </form>\n </app-modal>\n}\n", styles: [".change-password-form-body{display:flex;flex-direction:column;gap:1rem}.change-password-form-field{flex:1}.change-password-form-actions{display:flex;gap:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: FormInputComponent, selector: "form-input", inputs: ["label", "type", "name", "id", "placeholder", "required", "readonly", "maxlength", "minlength", "max", "min", "step", "pattern", "fieldGroupClass", "autocomplete"] }, { kind: "component", type: AppModalComponent, selector: "app-modal", inputs: ["title", "disableClose", "showHeader", "showCloseButton", "showTitle", "interactiveClose", "isOpen", "size"], outputs: ["closeModal"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
6745
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ChangePasswordFormComponent, deps: [{ token: i1$2.FormBuilder }, { token: ChangePasswordFormService }, { token: CustomerService }, { token: AdminService }, { token: ToastService }, { token: i1$3.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
6746
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ChangePasswordFormComponent, isStandalone: true, selector: "change-password-form", providers: [AdminService, CustomerService], ngImport: i0, template: "@if (isOpen()) {\n <app-modal\n [title]=\"'changePassword.title' | transloco\"\n [isOpen]=\"isOpen\"\n (closeModal)=\"onCloseModal()\"\n >\n <form\n [formGroup]=\"changePasswordForm\"\n method=\"POST\"\n class=\"change-password-form-body\"\n (ngSubmit)=\"onConfirmDelete()\"\n >\n <form-input\n [label]=\"'changePassword.newPasswordLabel' | transloco\"\n [placeholder]=\"'changePassword.newPasswordPlaceholder' | transloco\"\n name=\"password\"\n type=\"password\"\n class=\"change-password-form-field\"\n [required]=\"true\"\n [autocomplete]=\"false\"\n formControlName=\"password\"\n />\n\n <form-input\n [label]=\"'changePassword.confirmPasswordLabel' | transloco\"\n [placeholder]=\"'changePassword.confirmPasswordPlaceholder' | transloco\"\n name=\"confirm_password\"\n type=\"password\"\n class=\"change-password-form-field\"\n [required]=\"true\"\n [autocomplete]=\"false\"\n formControlName=\"confirm_password\"\n />\n\n <div class=\"change-password-form-actions\">\n <app-button\n variant=\"tertiary\"\n [text]=\"'changePassword.cancel' | transloco\"\n (click)=\"onCloseModal()\"\n size=\"sm\"\n />\n\n <app-button\n [disabled]=\"loading() || changePasswordForm.invalid || changePasswordForm.pristine\"\n [loading]=\"loading()\"\n type=\"submit\"\n variant=\"primary\"\n [text]=\"'changePassword.save' | transloco\"\n [loadingText]=\"'changePassword.saving' | transloco\"\n size=\"sm\"\n />\n </div>\n </form>\n </app-modal>\n}\n", styles: [".change-password-form-body{display:flex;flex-direction:column;gap:1rem}.change-password-form-field{flex:1}.change-password-form-actions{display:flex;gap:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: FormInputComponent, selector: "form-input", inputs: ["label", "type", "name", "id", "placeholder", "required", "readonly", "maxlength", "minlength", "max", "min", "step", "pattern", "fieldGroupClass", "autocomplete"] }, { kind: "component", type: AppModalComponent, selector: "app-modal", inputs: ["title", "disableClose", "showHeader", "showCloseButton", "showTitle", "interactiveClose", "isOpen", "size"], outputs: ["closeModal"] }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
6302
6747
  }
6303
6748
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ChangePasswordFormComponent, decorators: [{
6304
6749
  type: Component,
@@ -6310,7 +6755,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
6310
6755
  FormInputComponent,
6311
6756
  AppModalComponent,
6312
6757
  ], providers: [AdminService, CustomerService], encapsulation: ViewEncapsulation.None, template: "@if (isOpen()) {\n <app-modal\n [title]=\"'changePassword.title' | transloco\"\n [isOpen]=\"isOpen\"\n (closeModal)=\"onCloseModal()\"\n >\n <form\n [formGroup]=\"changePasswordForm\"\n method=\"POST\"\n class=\"change-password-form-body\"\n (ngSubmit)=\"onConfirmDelete()\"\n >\n <form-input\n [label]=\"'changePassword.newPasswordLabel' | transloco\"\n [placeholder]=\"'changePassword.newPasswordPlaceholder' | transloco\"\n name=\"password\"\n type=\"password\"\n class=\"change-password-form-field\"\n [required]=\"true\"\n [autocomplete]=\"false\"\n formControlName=\"password\"\n />\n\n <form-input\n [label]=\"'changePassword.confirmPasswordLabel' | transloco\"\n [placeholder]=\"'changePassword.confirmPasswordPlaceholder' | transloco\"\n name=\"confirm_password\"\n type=\"password\"\n class=\"change-password-form-field\"\n [required]=\"true\"\n [autocomplete]=\"false\"\n formControlName=\"confirm_password\"\n />\n\n <div class=\"change-password-form-actions\">\n <app-button\n variant=\"tertiary\"\n [text]=\"'changePassword.cancel' | transloco\"\n (click)=\"onCloseModal()\"\n size=\"sm\"\n />\n\n <app-button\n [disabled]=\"loading() || changePasswordForm.invalid || changePasswordForm.pristine\"\n [loading]=\"loading()\"\n type=\"submit\"\n variant=\"primary\"\n [text]=\"'changePassword.save' | transloco\"\n [loadingText]=\"'changePassword.saving' | transloco\"\n size=\"sm\"\n />\n </div>\n </form>\n </app-modal>\n}\n", styles: [".change-password-form-body{display:flex;flex-direction:column;gap:1rem}.change-password-form-field{flex:1}.change-password-form-actions{display:flex;gap:.75rem}\n"] }]
6313
- }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: ChangePasswordFormService }, { type: CustomerService }, { type: AdminService }, { type: ToastService }, { type: i2.TranslocoService }] });
6758
+ }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: ChangePasswordFormService }, { type: CustomerService }, { type: AdminService }, { type: ToastService }, { type: i1$3.TranslocoService }] });
6314
6759
 
6315
6760
  class AdminSelectComponent {
6316
6761
  platformId;
@@ -7806,7 +8251,7 @@ class PerformanceTicketStatusBadgeComponent {
7806
8251
  return PERFORMANCE_TICKET_STATUS_COLORS[this.ticket.status];
7807
8252
  }
7808
8253
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceTicketStatusBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7809
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: PerformanceTicketStatusBadgeComponent, isStandalone: true, selector: "performance-ticket-status-badge", inputs: { ticket: "ticket", size: "size" }, ngImport: i0, template: "<app-badge\n [text]=\"`performance.ticketStatus.${ticket.status}` | transloco\"\n [backgroundColor]=\"statusColors.bg\"\n [textColor]=\"statusColors.text\"\n [size]=\"size\"\n/>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
8254
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: PerformanceTicketStatusBadgeComponent, isStandalone: true, selector: "performance-ticket-status-badge", inputs: { ticket: "ticket", size: "size" }, ngImport: i0, template: "<app-badge\n [text]=\"`performance.ticketStatus.${ticket.status}` | transloco\"\n [backgroundColor]=\"statusColors.bg\"\n [textColor]=\"statusColors.text\"\n [size]=\"size\"\n/>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }] });
7810
8255
  }
7811
8256
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceTicketStatusBadgeComponent, decorators: [{
7812
8257
  type: Component,
@@ -7825,7 +8270,7 @@ class PerformanceStatusBadgeComponent {
7825
8270
  return PERFORMANCE_STATUS_COLORS[this.performance.status];
7826
8271
  }
7827
8272
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceStatusBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7828
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: PerformanceStatusBadgeComponent, isStandalone: true, selector: "performance-status-badge", inputs: { performance: "performance", size: "size" }, ngImport: i0, template: "<app-badge\n [text]=\"`performance.status.${performance.status}` | transloco\"\n [backgroundColor]=\"statusColors.bg\"\n [textColor]=\"statusColors.text\"\n [size]=\"size\"\n/>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
8273
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: PerformanceStatusBadgeComponent, isStandalone: true, selector: "performance-status-badge", inputs: { performance: "performance", size: "size" }, ngImport: i0, template: "<app-badge\n [text]=\"`performance.status.${performance.status}` | transloco\"\n [backgroundColor]=\"statusColors.bg\"\n [textColor]=\"statusColors.text\"\n [size]=\"size\"\n/>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }] });
7829
8274
  }
7830
8275
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PerformanceStatusBadgeComponent, decorators: [{
7831
8276
  type: Component,
@@ -8095,7 +8540,7 @@ class ShowsFilterComponent {
8095
8540
  this.listEventService.setSelectedDay(null);
8096
8541
  this.listEventService.setSelectedPerformance(null);
8097
8542
  }
8098
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowsFilterComponent, deps: [{ token: PLATFORM_ID }, { token: ShowService }, { token: PerformancesListEventsService }, { token: ToastService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component });
8543
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowsFilterComponent, deps: [{ token: PLATFORM_ID }, { token: ShowService }, { token: PerformancesListEventsService }, { token: ToastService }, { token: i3$1.Router }], target: i0.ɵɵFactoryTarget.Component });
8099
8544
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ShowsFilterComponent, isStandalone: true, selector: "shows-filter", ngImport: i0, template: "<div class=\"shows-filter\">\n <p class=\"shows-filter-heading\">Filtrar por evento</p>\n\n @if (loadingData()) {\n @for (i of [1, 2, 3]; track $index) {\n <div class=\"shows-filter-skeleton\"></div>\n }\n }\n\n @if (!loadingData() && shows().length < 1) {\n <app-alert text=\"No hay shows disponibles para filtrar\" size=\"xs\" type=\"error\" />\n }\n\n @for (show of shows(); track $index) {\n <div class=\"shows-filter-item\" [class.shows-filter-item--active]=\"isActive(show.id)\">\n <div class=\"shows-filter-item-info\">\n <span class=\"shows-filter-item-image\">\n @if (show.images.length > 0) {\n <img [src]=\"show.images[0].full_url\" class=\"shows-filter-item-image-img\" />\n } @else {\n <span class=\"shows-filter-item-image-placeholder\"></span>\n }\n </span>\n\n <div>\n <div class=\"shows-filter-item-title\">{{ show.title }}</div>\n @if (show.performances_quantity && show.performances_quantity > 0) {\n <div class=\"shows-filter-item-count\">{{ show.performances_quantity }} funciones</div>\n }\n </div>\n </div>\n\n <div class=\"shows-filter-item-actions\">\n @if (isActive(show.id)) {\n <app-button\n variant=\"tertiary\"\n icon=\"ri-close-line\"\n size=\"xs\"\n (clicked)=\"onFilter(show)\"\n />\n } @else {\n <app-button variant=\"primary\" text=\"Filtrar\" size=\"xs\" (clicked)=\"onFilter(show)\" />\n }\n </div>\n </div>\n }\n</div>\n", styles: [".shows-filter{display:flex;flex-direction:column;gap:.5rem;width:100%}.shows-filter-heading{font-size:11px;font-weight:600;letter-spacing:.25em;color:#737373;text-transform:uppercase}.shows-filter-skeleton{height:3.75rem;width:100%;border-radius:.5rem;border:1px solid #171717;background-color:#404040;animation:shows-filter-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.shows-filter-item{display:flex;align-items:center;background-color:#171717;border-radius:.5rem;border:1px solid #404040;justify-content:space-between;padding:.75rem;width:100%}.shows-filter-item--active{box-shadow:0 0 0 1px #ef444480,0 0 16px #ef444459}.shows-filter-item-info{display:flex;align-items:center;gap:.75rem}.shows-filter-item-image{height:2.5rem;width:2.5rem;border-radius:.125rem;overflow:hidden}.shows-filter-item-image-img{object-fit:contain;object-position:center;max-height:100%;max-width:100%;margin-left:auto;margin-right:auto}.shows-filter-item-image-placeholder{display:flex;background-color:#e5e5e5;height:100%;width:100%}.shows-filter-item-title{font-size:.875rem;font-weight:600;color:#d4d4d4}.shows-filter-item-count{font-size:11px;color:#737373}.shows-filter-item-actions{font-size:.875rem;font-weight:700;color:#737373}\n"], dependencies: [{ kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppAlertComponent, selector: "app-alert", inputs: ["type", "text", "closeable", "size"] }] });
8100
8545
  }
8101
8546
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ShowsFilterComponent, decorators: [{
@@ -8104,7 +8549,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
8104
8549
  }], ctorParameters: () => [{ type: undefined, decorators: [{
8105
8550
  type: Inject,
8106
8551
  args: [PLATFORM_ID]
8107
- }] }, { type: ShowService }, { type: PerformancesListEventsService }, { type: ToastService }, { type: i3.Router }] });
8552
+ }] }, { type: ShowService }, { type: PerformancesListEventsService }, { type: ToastService }, { type: i3$1.Router }] });
8108
8553
 
8109
8554
  class ZonePriceItemComponent {
8110
8555
  zone;
@@ -8511,7 +8956,7 @@ class TicketMapTotalsComponent {
8511
8956
  get selectedTicketIds() {
8512
8957
  return this.selectionService.selectedTicketIdList();
8513
8958
  }
8514
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapTotalsComponent, deps: [{ token: PerformanceBookingDataService }, { token: TicketSelectionDetailsService }, { token: TicketSelectionDiscountService }, { token: TicketSelectionTotalsService }, { token: TicketSelectionService }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
8959
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapTotalsComponent, deps: [{ token: PerformanceBookingDataService }, { token: TicketSelectionDetailsService }, { token: TicketSelectionDiscountService }, { token: TicketSelectionTotalsService }, { token: TicketSelectionService }, { token: i3$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
8515
8960
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketMapTotalsComponent, isStandalone: true, selector: "ticket-map-totals", inputs: { title: "title", buttonText: "buttonText", loadingButtonText: "loadingButtonText", isLoading: "isLoading" }, outputs: { onPurchaseClick: "onPurchaseClick" }, ngImport: i0, template: "<ticket-map-widget class=\"w-full\">\n <ticket-map-widget-header [title]=\"title\" />\n\n <div class=\"ticket-map-totals\">\n <p class=\"ticket-map-totals__item\">\n <span>Entradas ({{ selectionService.selectedCount() | number: '1.0-2' }}):</span>\n <span> ${{ selectionTotalsService.ticketSubtotal() | number: '1.0-2' }} </span>\n </p>\n\n @if (selectionService.selectedProductCount() > 0) {\n <p class=\"ticket-map-totals__item\">\n <span>Productos ({{ selectionService.selectedProductCount() | number: '1.0-2' }}):</span>\n <span>${{ selectionTotalsService.productSubtotal() | number: '1.0-2' }}</span>\n </p>\n }\n\n @if (serviceFee > 0) {\n <p class=\"ticket-map-totals__item\">\n <span>Tarifa de servicio:</span>\n <span>${{ bookingDataService.show()?.service_fee ?? '0' | number: '1.0-2' }}</span>\n </p>\n }\n\n @if (!!selectionDiscountService.coupon()) {\n <p class=\"ticket-map-totals__item\">\n <span>Cup\u00F3n de descuento:</span>\n <span class=\"line-through\">\n ${{ selectionDiscountService.coupon()?.discount_value ?? '0' | number: '1.0-2' }}\n </span>\n </p>\n }\n\n @if (!!selectionDiscountService.corporateBond()) {\n <p class=\"ticket-map-totals__item\">\n <span>Bono corporativo:</span>\n <span class=\"line-through\">\n ${{ selectionDiscountService.corporateBond()?.value ?? '0' | number: '1.0-2' }}\n </span>\n </p>\n }\n\n @if (!!selectionDiscountService.giftBond()) {\n <p class=\"ticket-map-totals__item\">\n <span>Bono de regalo:</span>\n <span class=\"line-through\">\n ${{ selectionDiscountService.giftBond()?.original_value ?? '0' | number: '1.0-2' }}\n </span>\n </p>\n }\n\n <hr class=\"ticket-map-totals__divider\" />\n\n <div class=\"ticket-map-totals__calculated\">\n <span class=\"ticket-map-totals__calculated-title\">Total:</span>\n\n @if (\n selectionTotalsService.totalDiscounted() || selectionTotalsService.totalDiscounted() === 0\n ) {\n <span class=\"ticket-map-totals__calculated-inline\">\n <span class=\"ticket-map-totals__calculated-discount\">\n ${{ selectionTotalsService.totalValue() | currency: 'COP' : 'symbol' : '1.0-2' }}\n </span>\n <span class=\"ticket-map-totals__calculated-total\">\n ${{ selectionTotalsService.totalDiscounted() | currency: 'COP' : 'symbol' : '1.0-2' }}\n </span>\n </span>\n } @else {\n <span class=\"ticket-map-totals__calculated-total\">\n ${{ selectionTotalsService.totalValue() | number: '1.0-2' }}\n </span>\n }\n </div>\n\n @if (selectionService.selectedCount() > 0 || selectionService.selectedProductCount() > 0) {\n <div class=\"flex flex-col gap-2\">\n <app-button\n (click)=\"onPurchaseClick.emit()\"\n size=\"sm\"\n icon=\"ri-dashboard-3-line\"\n [text]=\"buttonText\"\n [loadingText]=\"loadingButtonText\"\n [loading]=\"isLoading\"\n variant=\"primary\"\n />\n </div>\n }\n </div>\n</ticket-map-widget>\n", styles: [".ticket-map-totals{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem;width:100%}.ticket-map-totals__item{align-items:center;color:#9ca3af;display:flex;flex-direction:row;font-size:.75rem;justify-content:space-between;margin:0}.ticket-map-totals__divider{border:none;border-top:1px solid #e5e7eb;width:100%}.ticket-map-totals__calculated{display:flex;flex-direction:row;align-items:center;justify-content:space-between;margin:0}.ticket-map-totals__calculated-title{color:#4b5563;font-size:1rem;font-weight:700}.ticket-map-totals__calculated-inline{display:flex;flex-direction:column;align-items:flex-end}.ticket-map-totals__calculated-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}.ticket-map-totals__calculated-total{color:#4b5563;font-size:1rem;font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: TicketMapWidgetHeaderComponent, selector: "ticket-map-widget-header", inputs: ["title"] }, { kind: "component", type: TicketMapWidgetComponent, selector: "ticket-map-widget" }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }] });
8516
8961
  }
8517
8962
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketMapTotalsComponent, decorators: [{
@@ -8522,7 +8967,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
8522
8967
  TicketMapWidgetHeaderComponent,
8523
8968
  TicketMapWidgetComponent,
8524
8969
  ], template: "<ticket-map-widget class=\"w-full\">\n <ticket-map-widget-header [title]=\"title\" />\n\n <div class=\"ticket-map-totals\">\n <p class=\"ticket-map-totals__item\">\n <span>Entradas ({{ selectionService.selectedCount() | number: '1.0-2' }}):</span>\n <span> ${{ selectionTotalsService.ticketSubtotal() | number: '1.0-2' }} </span>\n </p>\n\n @if (selectionService.selectedProductCount() > 0) {\n <p class=\"ticket-map-totals__item\">\n <span>Productos ({{ selectionService.selectedProductCount() | number: '1.0-2' }}):</span>\n <span>${{ selectionTotalsService.productSubtotal() | number: '1.0-2' }}</span>\n </p>\n }\n\n @if (serviceFee > 0) {\n <p class=\"ticket-map-totals__item\">\n <span>Tarifa de servicio:</span>\n <span>${{ bookingDataService.show()?.service_fee ?? '0' | number: '1.0-2' }}</span>\n </p>\n }\n\n @if (!!selectionDiscountService.coupon()) {\n <p class=\"ticket-map-totals__item\">\n <span>Cup\u00F3n de descuento:</span>\n <span class=\"line-through\">\n ${{ selectionDiscountService.coupon()?.discount_value ?? '0' | number: '1.0-2' }}\n </span>\n </p>\n }\n\n @if (!!selectionDiscountService.corporateBond()) {\n <p class=\"ticket-map-totals__item\">\n <span>Bono corporativo:</span>\n <span class=\"line-through\">\n ${{ selectionDiscountService.corporateBond()?.value ?? '0' | number: '1.0-2' }}\n </span>\n </p>\n }\n\n @if (!!selectionDiscountService.giftBond()) {\n <p class=\"ticket-map-totals__item\">\n <span>Bono de regalo:</span>\n <span class=\"line-through\">\n ${{ selectionDiscountService.giftBond()?.original_value ?? '0' | number: '1.0-2' }}\n </span>\n </p>\n }\n\n <hr class=\"ticket-map-totals__divider\" />\n\n <div class=\"ticket-map-totals__calculated\">\n <span class=\"ticket-map-totals__calculated-title\">Total:</span>\n\n @if (\n selectionTotalsService.totalDiscounted() || selectionTotalsService.totalDiscounted() === 0\n ) {\n <span class=\"ticket-map-totals__calculated-inline\">\n <span class=\"ticket-map-totals__calculated-discount\">\n ${{ selectionTotalsService.totalValue() | currency: 'COP' : 'symbol' : '1.0-2' }}\n </span>\n <span class=\"ticket-map-totals__calculated-total\">\n ${{ selectionTotalsService.totalDiscounted() | currency: 'COP' : 'symbol' : '1.0-2' }}\n </span>\n </span>\n } @else {\n <span class=\"ticket-map-totals__calculated-total\">\n ${{ selectionTotalsService.totalValue() | number: '1.0-2' }}\n </span>\n }\n </div>\n\n @if (selectionService.selectedCount() > 0 || selectionService.selectedProductCount() > 0) {\n <div class=\"flex flex-col gap-2\">\n <app-button\n (click)=\"onPurchaseClick.emit()\"\n size=\"sm\"\n icon=\"ri-dashboard-3-line\"\n [text]=\"buttonText\"\n [loadingText]=\"loadingButtonText\"\n [loading]=\"isLoading\"\n variant=\"primary\"\n />\n </div>\n }\n </div>\n</ticket-map-widget>\n", styles: [".ticket-map-totals{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem;width:100%}.ticket-map-totals__item{align-items:center;color:#9ca3af;display:flex;flex-direction:row;font-size:.75rem;justify-content:space-between;margin:0}.ticket-map-totals__divider{border:none;border-top:1px solid #e5e7eb;width:100%}.ticket-map-totals__calculated{display:flex;flex-direction:row;align-items:center;justify-content:space-between;margin:0}.ticket-map-totals__calculated-title{color:#4b5563;font-size:1rem;font-weight:700}.ticket-map-totals__calculated-inline{display:flex;flex-direction:column;align-items:flex-end}.ticket-map-totals__calculated-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}.ticket-map-totals__calculated-total{color:#4b5563;font-size:1rem;font-weight:700}\n"] }]
8525
- }], ctorParameters: () => [{ type: PerformanceBookingDataService }, { type: TicketSelectionDetailsService }, { type: TicketSelectionDiscountService }, { type: TicketSelectionTotalsService }, { type: TicketSelectionService }, { type: i3.ActivatedRoute }], propDecorators: { title: [{
8970
+ }], ctorParameters: () => [{ type: PerformanceBookingDataService }, { type: TicketSelectionDetailsService }, { type: TicketSelectionDiscountService }, { type: TicketSelectionTotalsService }, { type: TicketSelectionService }, { type: i3$1.ActivatedRoute }], propDecorators: { title: [{
8526
8971
  type: Input
8527
8972
  }], buttonText: [{
8528
8973
  type: Input
@@ -8710,13 +9155,13 @@ class OrderStatusBadgeComponent {
8710
9155
  get statusColors() {
8711
9156
  return ORDER_STATUS_COLORS[this.order.status] ?? null;
8712
9157
  }
8713
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderStatusBadgeComponent, deps: [{ token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
8714
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: OrderStatusBadgeComponent, isStandalone: true, selector: "order-status-badge", inputs: { order: "order", size: "size" }, ngImport: i0, template: "<app-badge\n [text]=\"`order.status.${order.status}` | transloco\"\n [backgroundColor]=\"statusColors.bg\"\n [textColor]=\"statusColors.text\"\n [size]=\"size\"\n/>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
9158
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderStatusBadgeComponent, deps: [{ token: i1$3.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
9159
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: OrderStatusBadgeComponent, isStandalone: true, selector: "order-status-badge", inputs: { order: "order", size: "size" }, ngImport: i0, template: "<app-badge\n [text]=\"`order.status.${order.status}` | transloco\"\n [backgroundColor]=\"statusColors.bg\"\n [textColor]=\"statusColors.text\"\n [size]=\"size\"\n/>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }] });
8715
9160
  }
8716
9161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderStatusBadgeComponent, decorators: [{
8717
9162
  type: Component,
8718
9163
  args: [{ selector: 'order-status-badge', standalone: true, imports: [CommonModule, TranslocoModule, AppBadgeComponent], template: "<app-badge\n [text]=\"`order.status.${order.status}` | transloco\"\n [backgroundColor]=\"statusColors.bg\"\n [textColor]=\"statusColors.text\"\n [size]=\"size\"\n/>\n" }]
8719
- }], ctorParameters: () => [{ type: i2.TranslocoService }], propDecorators: { order: [{
9164
+ }], ctorParameters: () => [{ type: i1$3.TranslocoService }], propDecorators: { order: [{
8720
9165
  type: Input,
8721
9166
  args: [{ required: true }]
8722
9167
  }], size: [{
@@ -8760,8 +9205,8 @@ class OrderInformationComponent {
8760
9205
  },
8761
9206
  });
8762
9207
  }
8763
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderInformationComponent, deps: [{ token: i2.TranslocoService }, { token: ToastService }], target: i0.ɵɵFactoryTarget.Component });
8764
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderInformationComponent, isStandalone: true, selector: "order-information", inputs: { order: "order", showPayButton: "showPayButton", createMpPreference: "createMpPreference" }, outputs: { paymentLinkCreated: "paymentLinkCreated" }, ngImport: i0, template: "@if (!!order) {\n <div class=\"order-information\">\n <div class=\"order-information__header\">\n <div>\n <p class=\"order-information__header-id\">Orden #{{ order.id }}</p>\n <p class=\"order-information__header-uuid\">{{ order.uuid }}</p>\n </div>\n\n <div class=\"order-information__header-actions\">\n <order-status-badge [order]=\"order\" size=\"xs\" />\n\n @if (showMpButton) {\n <app-button\n [text]=\"'order.mpPayButton' | transloco\"\n [loadingText]=\"'order.mpPayButtonLoading' | transloco\"\n [loading]=\"isLoading\"\n variant=\"secondary\"\n size=\"xs\"\n icon=\"ri-wallet-3-line\"\n (clicked)=\"payWithMercadoPago()\"\n />\n }\n </div>\n </div>\n\n <div class=\"order-information__content\">\n @if (order.show_snapshot && order.show_snapshot['title']) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Evento</p>\n <p class=\"order-information__content-item-value\">\n {{ order.show_snapshot['title'] }}\n </p>\n </div>\n }\n\n @if (order.performance_snapshot && order.performance_snapshot['start_time']) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Fecha de la funci\u00F3n</p>\n <p class=\"order-information__content-item-value\">\n {{ order.performance_snapshot['start_time'] | date: 'dd/MM/yyyy hh:mm a' }}\n </p>\n </div>\n }\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Fecha de la compra</p>\n <p class=\"order-information__content-item-value\">\n {{ order.created_at | date: 'dd/MM/yyyy hh:mm a' }}\n </p>\n </div>\n\n @if (order.payment_method) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">M\u00E9todo de pago</p>\n <p class=\"order-information__content-item-value\">\n {{ `order.paymentMethods.${order.payment_method}` | transloco }}\n </p>\n </div>\n }\n\n @if (order.service_fee && order.service_fee > 0) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Tarifa de servicio</p>\n <p class=\"order-information__content-item-value\">\n ${{ order.service_fee | currency: 'COP' : '' : '1.0-2' }}\n </p>\n </div>\n }\n\n @if (!!order.discount_amount && order.discount_amount > 0) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Descuento</p>\n <p class=\"order-information__content-item-value\">\n ${{ order.discount_amount | currency: 'COP' : '' : '1.0-2' }}\n </p>\n </div>\n }\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Total</p>\n @if (order.total_discounted && order.total_discounted >= 0) {\n <p class=\"order-information__content-item-total_discounted\">\n <span class=\"discounted\">\n ${{ order.total_discounted | currency: 'COP' : '' : '1.0-2' }}\n </span>\n <span class=\"order-information__content-item-value total\">\n ${{ order.total | currency: 'COP' : '' : '1.0-2' }}\n </span>\n </p>\n } @else {\n <p class=\"order-information__content-item-value total\">\n ${{ order.total | currency: 'COP' : '' : '1.0-2' }}\n </p>\n }\n </div>\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">T\u00E9rminos aceptados</p>\n <app-badge\n [text]=\"order.terms_accepted ? 'Aceptado' : 'No aceptado'\"\n [backgroundColor]=\"order.terms_accepted ? '#dcfce7' : '#fee2e2'\"\n [textColor]=\"order.terms_accepted ? '#16a34a' : '#dc2626'\"\n size=\"xs\"\n />\n </div>\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Procesamiento de datos aceptado</p>\n <app-badge\n [text]=\"order.data_processing_accepted ? 'Aceptado' : 'No aceptado'\"\n [backgroundColor]=\"order.data_processing_accepted ? '#dcfce7' : '#fee2e2'\"\n [textColor]=\"order.data_processing_accepted ? '#16a34a' : '#dc2626'\"\n size=\"xs\"\n />\n </div>\n\n @if (order.comments) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Comentarios</p>\n <p class=\"order-information__content-item-value\">{{ order.comments }}</p>\n </div>\n }\n\n @if (order.address_notes) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Notas de direcci\u00F3n</p>\n <p class=\"order-information__content-item-value\">{{ order.address_notes }}</p>\n </div>\n }\n </div>\n </div>\n}\n", styles: [".order-information{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-information__header{align-items:center;border-bottom:1px solid #f3f4f6;display:flex;flex-flow:row wrap;gap:.75rem;justify-content:space-between;padding:1rem;width:100%}.order-information__header-id{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-information__header-uuid{color:#9ca3af;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem;margin:0;word-break:break-all}.order-information__header-actions{display:inline-flex;flex-flow:row wrap;gap:1rem}.order-information__content{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;padding:1rem}@media(min-width:768px){.order-information__content{grid-template-columns:repeat(3,minmax(0,1fr))}}.order-information__content-item{align-items:flex-start;display:flex;flex-flow:column nowrap;position:relative;width:100%}.order-information__content-item-title{color:#9ca3af;font-size:.75rem;margin:0;text-transform:uppercase}.order-information__content-item-value{color:#111827;font-weight:500;font-size:.875rem;margin:0}.order-information__content-item-value.total{font-weight:700}.order-information__content-item-total_discounted{display:flex;flex-flow:row nowrap;gap:.25rem;margin:0;width:100%}.order-information__content-item-total_discounted .discounted{color:#111827;font-size:.875rem;font-weight:700}.order-information__content-item-total_discounted .total{color:#9ca3af;margin:0;text-decoration:line-through}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: OrderStatusBadgeComponent, selector: "order-status-badge", inputs: ["order", "size"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
9208
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderInformationComponent, deps: [{ token: i1$3.TranslocoService }, { token: ToastService }], target: i0.ɵɵFactoryTarget.Component });
9209
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderInformationComponent, isStandalone: true, selector: "order-information", inputs: { order: "order", showPayButton: "showPayButton", createMpPreference: "createMpPreference" }, outputs: { paymentLinkCreated: "paymentLinkCreated" }, ngImport: i0, template: "@if (!!order) {\n <div class=\"order-information\">\n <div class=\"order-information__header\">\n <div>\n <p class=\"order-information__header-id\">Orden #{{ order.id }}</p>\n <p class=\"order-information__header-uuid\">{{ order.uuid }}</p>\n </div>\n\n <div class=\"order-information__header-actions\">\n <order-status-badge [order]=\"order\" size=\"xs\" />\n\n @if (showMpButton) {\n <app-button\n [text]=\"'order.mpPayButton' | transloco\"\n [loadingText]=\"'order.mpPayButtonLoading' | transloco\"\n [loading]=\"isLoading\"\n variant=\"secondary\"\n size=\"xs\"\n icon=\"ri-wallet-3-line\"\n (clicked)=\"payWithMercadoPago()\"\n />\n }\n </div>\n </div>\n\n <div class=\"order-information__content\">\n @if (order.show_snapshot && order.show_snapshot['title']) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Evento</p>\n <p class=\"order-information__content-item-value\">\n {{ order.show_snapshot['title'] }}\n </p>\n </div>\n }\n\n @if (order.performance_snapshot && order.performance_snapshot['start_time']) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Fecha de la funci\u00F3n</p>\n <p class=\"order-information__content-item-value\">\n {{ order.performance_snapshot['start_time'] | date: 'dd/MM/yyyy hh:mm a' }}\n </p>\n </div>\n }\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Fecha de la compra</p>\n <p class=\"order-information__content-item-value\">\n {{ order.created_at | date: 'dd/MM/yyyy hh:mm a' }}\n </p>\n </div>\n\n @if (order.payment_method) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">M\u00E9todo de pago</p>\n <p class=\"order-information__content-item-value\">\n {{ `order.paymentMethods.${order.payment_method}` | transloco }}\n </p>\n </div>\n }\n\n @if (order.service_fee && order.service_fee > 0) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Tarifa de servicio</p>\n <p class=\"order-information__content-item-value\">\n ${{ order.service_fee | currency: 'COP' : '' : '1.0-2' }}\n </p>\n </div>\n }\n\n @if (!!order.discount_amount && order.discount_amount > 0) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Descuento</p>\n <p class=\"order-information__content-item-value\">\n ${{ order.discount_amount | currency: 'COP' : '' : '1.0-2' }}\n </p>\n </div>\n }\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Total</p>\n @if (order.total_discounted && order.total_discounted >= 0) {\n <p class=\"order-information__content-item-total_discounted\">\n <span class=\"discounted\">\n ${{ order.total_discounted | currency: 'COP' : '' : '1.0-2' }}\n </span>\n <span class=\"order-information__content-item-value total\">\n ${{ order.total | currency: 'COP' : '' : '1.0-2' }}\n </span>\n </p>\n } @else {\n <p class=\"order-information__content-item-value total\">\n ${{ order.total | currency: 'COP' : '' : '1.0-2' }}\n </p>\n }\n </div>\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">T\u00E9rminos aceptados</p>\n <app-badge\n [text]=\"order.terms_accepted ? 'Aceptado' : 'No aceptado'\"\n [backgroundColor]=\"order.terms_accepted ? '#dcfce7' : '#fee2e2'\"\n [textColor]=\"order.terms_accepted ? '#16a34a' : '#dc2626'\"\n size=\"xs\"\n />\n </div>\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Procesamiento de datos aceptado</p>\n <app-badge\n [text]=\"order.data_processing_accepted ? 'Aceptado' : 'No aceptado'\"\n [backgroundColor]=\"order.data_processing_accepted ? '#dcfce7' : '#fee2e2'\"\n [textColor]=\"order.data_processing_accepted ? '#16a34a' : '#dc2626'\"\n size=\"xs\"\n />\n </div>\n\n @if (order.comments) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Comentarios</p>\n <p class=\"order-information__content-item-value\">{{ order.comments }}</p>\n </div>\n }\n\n @if (order.address_notes) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Notas de direcci\u00F3n</p>\n <p class=\"order-information__content-item-value\">{{ order.address_notes }}</p>\n </div>\n }\n </div>\n </div>\n}\n", styles: [".order-information{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-information__header{align-items:center;border-bottom:1px solid #f3f4f6;display:flex;flex-flow:row wrap;gap:.75rem;justify-content:space-between;padding:1rem;width:100%}.order-information__header-id{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-information__header-uuid{color:#9ca3af;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem;margin:0;word-break:break-all}.order-information__header-actions{display:inline-flex;flex-flow:row wrap;gap:1rem}.order-information__content{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;padding:1rem}@media(min-width:768px){.order-information__content{grid-template-columns:repeat(3,minmax(0,1fr))}}.order-information__content-item{align-items:flex-start;display:flex;flex-flow:column nowrap;position:relative;width:100%}.order-information__content-item-title{color:#9ca3af;font-size:.75rem;margin:0;text-transform:uppercase}.order-information__content-item-value{color:#111827;font-weight:500;font-size:.875rem;margin:0}.order-information__content-item-value.total{font-weight:700}.order-information__content-item-total_discounted{display:flex;flex-flow:row nowrap;gap:.25rem;margin:0;width:100%}.order-information__content-item-total_discounted .discounted{color:#111827;font-size:.875rem;font-weight:700}.order-information__content-item-total_discounted .total{color:#9ca3af;margin:0;text-decoration:line-through}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: OrderStatusBadgeComponent, selector: "order-status-badge", inputs: ["order", "size"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
8765
9210
  }
8766
9211
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderInformationComponent, decorators: [{
8767
9212
  type: Component,
@@ -8772,7 +9217,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
8772
9217
  AppBadgeComponent,
8773
9218
  AppButtonComponent,
8774
9219
  ], encapsulation: ViewEncapsulation.None, template: "@if (!!order) {\n <div class=\"order-information\">\n <div class=\"order-information__header\">\n <div>\n <p class=\"order-information__header-id\">Orden #{{ order.id }}</p>\n <p class=\"order-information__header-uuid\">{{ order.uuid }}</p>\n </div>\n\n <div class=\"order-information__header-actions\">\n <order-status-badge [order]=\"order\" size=\"xs\" />\n\n @if (showMpButton) {\n <app-button\n [text]=\"'order.mpPayButton' | transloco\"\n [loadingText]=\"'order.mpPayButtonLoading' | transloco\"\n [loading]=\"isLoading\"\n variant=\"secondary\"\n size=\"xs\"\n icon=\"ri-wallet-3-line\"\n (clicked)=\"payWithMercadoPago()\"\n />\n }\n </div>\n </div>\n\n <div class=\"order-information__content\">\n @if (order.show_snapshot && order.show_snapshot['title']) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Evento</p>\n <p class=\"order-information__content-item-value\">\n {{ order.show_snapshot['title'] }}\n </p>\n </div>\n }\n\n @if (order.performance_snapshot && order.performance_snapshot['start_time']) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Fecha de la funci\u00F3n</p>\n <p class=\"order-information__content-item-value\">\n {{ order.performance_snapshot['start_time'] | date: 'dd/MM/yyyy hh:mm a' }}\n </p>\n </div>\n }\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Fecha de la compra</p>\n <p class=\"order-information__content-item-value\">\n {{ order.created_at | date: 'dd/MM/yyyy hh:mm a' }}\n </p>\n </div>\n\n @if (order.payment_method) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">M\u00E9todo de pago</p>\n <p class=\"order-information__content-item-value\">\n {{ `order.paymentMethods.${order.payment_method}` | transloco }}\n </p>\n </div>\n }\n\n @if (order.service_fee && order.service_fee > 0) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Tarifa de servicio</p>\n <p class=\"order-information__content-item-value\">\n ${{ order.service_fee | currency: 'COP' : '' : '1.0-2' }}\n </p>\n </div>\n }\n\n @if (!!order.discount_amount && order.discount_amount > 0) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Descuento</p>\n <p class=\"order-information__content-item-value\">\n ${{ order.discount_amount | currency: 'COP' : '' : '1.0-2' }}\n </p>\n </div>\n }\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Total</p>\n @if (order.total_discounted && order.total_discounted >= 0) {\n <p class=\"order-information__content-item-total_discounted\">\n <span class=\"discounted\">\n ${{ order.total_discounted | currency: 'COP' : '' : '1.0-2' }}\n </span>\n <span class=\"order-information__content-item-value total\">\n ${{ order.total | currency: 'COP' : '' : '1.0-2' }}\n </span>\n </p>\n } @else {\n <p class=\"order-information__content-item-value total\">\n ${{ order.total | currency: 'COP' : '' : '1.0-2' }}\n </p>\n }\n </div>\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">T\u00E9rminos aceptados</p>\n <app-badge\n [text]=\"order.terms_accepted ? 'Aceptado' : 'No aceptado'\"\n [backgroundColor]=\"order.terms_accepted ? '#dcfce7' : '#fee2e2'\"\n [textColor]=\"order.terms_accepted ? '#16a34a' : '#dc2626'\"\n size=\"xs\"\n />\n </div>\n\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Procesamiento de datos aceptado</p>\n <app-badge\n [text]=\"order.data_processing_accepted ? 'Aceptado' : 'No aceptado'\"\n [backgroundColor]=\"order.data_processing_accepted ? '#dcfce7' : '#fee2e2'\"\n [textColor]=\"order.data_processing_accepted ? '#16a34a' : '#dc2626'\"\n size=\"xs\"\n />\n </div>\n\n @if (order.comments) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Comentarios</p>\n <p class=\"order-information__content-item-value\">{{ order.comments }}</p>\n </div>\n }\n\n @if (order.address_notes) {\n <div class=\"order-information__content-item\">\n <p class=\"order-information__content-item-title\">Notas de direcci\u00F3n</p>\n <p class=\"order-information__content-item-value\">{{ order.address_notes }}</p>\n </div>\n }\n </div>\n </div>\n}\n", styles: [".order-information{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-information__header{align-items:center;border-bottom:1px solid #f3f4f6;display:flex;flex-flow:row wrap;gap:.75rem;justify-content:space-between;padding:1rem;width:100%}.order-information__header-id{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-information__header-uuid{color:#9ca3af;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem;margin:0;word-break:break-all}.order-information__header-actions{display:inline-flex;flex-flow:row wrap;gap:1rem}.order-information__content{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;padding:1rem}@media(min-width:768px){.order-information__content{grid-template-columns:repeat(3,minmax(0,1fr))}}.order-information__content-item{align-items:flex-start;display:flex;flex-flow:column nowrap;position:relative;width:100%}.order-information__content-item-title{color:#9ca3af;font-size:.75rem;margin:0;text-transform:uppercase}.order-information__content-item-value{color:#111827;font-weight:500;font-size:.875rem;margin:0}.order-information__content-item-value.total{font-weight:700}.order-information__content-item-total_discounted{display:flex;flex-flow:row nowrap;gap:.25rem;margin:0;width:100%}.order-information__content-item-total_discounted .discounted{color:#111827;font-size:.875rem;font-weight:700}.order-information__content-item-total_discounted .total{color:#9ca3af;margin:0;text-decoration:line-through}\n"] }]
8775
- }], ctorParameters: () => [{ type: i2.TranslocoService }, { type: ToastService }], propDecorators: { order: [{
9220
+ }], ctorParameters: () => [{ type: i1$3.TranslocoService }, { type: ToastService }], propDecorators: { order: [{
8776
9221
  type: Input,
8777
9222
  args: [{ required: true }]
8778
9223
  }], showPayButton: [{
@@ -8793,13 +9238,13 @@ class OrderItemTypeBadgeComponent {
8793
9238
  get statusColors() {
8794
9239
  return ORDER_ITEM_TYPES_COLORS[this.item.item_type] ?? null;
8795
9240
  }
8796
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderItemTypeBadgeComponent, deps: [{ token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
8797
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: OrderItemTypeBadgeComponent, isStandalone: true, selector: "order-item-type-badge", inputs: { item: "item", size: "size" }, ngImport: i0, template: "<app-badge\n [text]=\"`order.itemType.${item.item_type}` | transloco\"\n [backgroundColor]=\"statusColors.bg\"\n [textColor]=\"statusColors.text\"\n [size]=\"size\"\n/>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
9241
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderItemTypeBadgeComponent, deps: [{ token: i1$3.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
9242
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: OrderItemTypeBadgeComponent, isStandalone: true, selector: "order-item-type-badge", inputs: { item: "item", size: "size" }, ngImport: i0, template: "<app-badge\n [text]=\"`order.itemType.${item.item_type}` | transloco\"\n [backgroundColor]=\"statusColors.bg\"\n [textColor]=\"statusColors.text\"\n [size]=\"size\"\n/>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }] });
8798
9243
  }
8799
9244
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderItemTypeBadgeComponent, decorators: [{
8800
9245
  type: Component,
8801
9246
  args: [{ selector: 'order-item-type-badge', standalone: true, imports: [CommonModule, TranslocoModule, AppBadgeComponent], template: "<app-badge\n [text]=\"`order.itemType.${item.item_type}` | transloco\"\n [backgroundColor]=\"statusColors.bg\"\n [textColor]=\"statusColors.text\"\n [size]=\"size\"\n/>\n" }]
8802
- }], ctorParameters: () => [{ type: i2.TranslocoService }], propDecorators: { item: [{
9247
+ }], ctorParameters: () => [{ type: i1$3.TranslocoService }], propDecorators: { item: [{
8803
9248
  type: Input,
8804
9249
  args: [{ required: true }]
8805
9250
  }], size: [{
@@ -8808,6 +9253,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
8808
9253
 
8809
9254
  class TicketQrComponent {
8810
9255
  ticketQrService;
9256
+ platformId;
8811
9257
  ticketUuid;
8812
9258
  qrCanvas;
8813
9259
  loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : []));
@@ -8817,16 +9263,40 @@ class TicketQrComponent {
8817
9263
  destroy$ = new Subject();
8818
9264
  refreshTimeout = null;
8819
9265
  countdownInterval = null;
8820
- constructor(ticketQrService) {
9266
+ isFetching = false;
9267
+ constructor(ticketQrService, platformId) {
8821
9268
  this.ticketQrService = ticketQrService;
9269
+ this.platformId = platformId;
8822
9270
  }
8823
9271
  ngOnInit() {
8824
9272
  this.fetchAndRender();
9273
+ if (isPlatformBrowser(this.platformId)) {
9274
+ document.addEventListener('visibilitychange', this.onVisibilityChange);
9275
+ window.addEventListener('focus', this.onFocus);
9276
+ }
8825
9277
  }
8826
9278
  ngOnDestroy() {
8827
9279
  this.destroy$.next();
8828
9280
  this.destroy$.complete();
8829
9281
  this.clearTimers();
9282
+ if (isPlatformBrowser(this.platformId)) {
9283
+ document.removeEventListener('visibilitychange', this.onVisibilityChange);
9284
+ window.removeEventListener('focus', this.onFocus);
9285
+ }
9286
+ }
9287
+ onVisibilityChange = () => {
9288
+ if (document.visibilityState === 'visible') {
9289
+ this.refreshFromReenter();
9290
+ }
9291
+ };
9292
+ onFocus = () => {
9293
+ this.refreshFromReenter();
9294
+ };
9295
+ refreshFromReenter() {
9296
+ if (this.isFetching)
9297
+ return;
9298
+ this.clearTimers();
9299
+ this.fetchAndRender();
8830
9300
  }
8831
9301
  retry() {
8832
9302
  this.error.set(false);
@@ -8845,11 +9315,15 @@ class TicketQrComponent {
8845
9315
  }
8846
9316
  }
8847
9317
  fetchAndRender() {
9318
+ if (this.isFetching)
9319
+ return;
9320
+ this.isFetching = true;
8848
9321
  this.ticketQrService
8849
9322
  .fetchQrToken(this.ticketUuid)
8850
9323
  .pipe(takeUntil$1(this.destroy$))
8851
9324
  .subscribe({
8852
9325
  next: (res) => {
9326
+ this.isFetching = false;
8853
9327
  this.loading.set(false);
8854
9328
  this.error.set(false);
8855
9329
  this.renderQr(res.data.token);
@@ -8857,6 +9331,7 @@ class TicketQrComponent {
8857
9331
  this.scheduleRefresh(res.data.refresh_in);
8858
9332
  },
8859
9333
  error: () => {
9334
+ this.isFetching = false;
8860
9335
  this.loading.set(false);
8861
9336
  this.error.set(true);
8862
9337
  },
@@ -8864,12 +9339,16 @@ class TicketQrComponent {
8864
9339
  }
8865
9340
  scheduleRefresh(seconds) {
8866
9341
  this.refreshTimeout = setTimeout(() => {
9342
+ if (this.isFetching)
9343
+ return;
8867
9344
  this.refreshing.set(true);
9345
+ this.isFetching = true;
8868
9346
  this.ticketQrService
8869
9347
  .fetchQrToken(this.ticketUuid)
8870
9348
  .pipe(takeUntil$1(this.destroy$))
8871
9349
  .subscribe({
8872
9350
  next: (res) => {
9351
+ this.isFetching = false;
8873
9352
  this.renderQr(res.data.token);
8874
9353
  this.error.set(false);
8875
9354
  this.startCountdown(res.data.refresh_in);
@@ -8879,6 +9358,7 @@ class TicketQrComponent {
8879
9358
  }, 300);
8880
9359
  },
8881
9360
  error: () => {
9361
+ this.isFetching = false;
8882
9362
  this.refreshing.set(false);
8883
9363
  this.error.set(true);
8884
9364
  },
@@ -8901,13 +9381,16 @@ class TicketQrComponent {
8901
9381
  console.error('Error rendering QR:', err);
8902
9382
  });
8903
9383
  }
8904
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrComponent, deps: [{ token: TicketQrService }], target: i0.ɵɵFactoryTarget.Component });
9384
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrComponent, deps: [{ token: TicketQrService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
8905
9385
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketQrComponent, isStandalone: true, selector: "performance-ticket-qr", inputs: { ticketUuid: "ticketUuid" }, viewQueries: [{ propertyName: "qrCanvas", first: true, predicate: ["qrCanvas"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"ticket-qr\">\n @if (loading()) {\n <div class=\"ticket-qr__loader\">\n <span class=\"ticket-qr__loader-text\">Cargando QR...</span>\n </div>\n }\n\n @if (error()) {\n <div class=\"ticket-qr__container\">\n <app-alert text=\"Error al cargar el c\u00F3digo QR\" type=\"error\" />\n <app-button text=\"Reintentar\" (clicked)=\"retry()\" [disabled]=\"loading()\" />\n </div>\n }\n\n <div [class.hidden]=\"loading() || error()\" class=\"ticket-qr__container\">\n <div class=\"transition-opacity duration-300\" [class.opacity-50]=\"refreshing()\">\n <canvas #qrCanvas class=\"ticket-qr__canvas\" width=\"256\" height=\"256\"></canvas>\n </div>\n <span class=\"ticket-qr__updating-text\">\n {{ countdown() > 0 ? `Actualizando en ${countdown()}` : '0s' }}\n </span>\n </div>\n</div>\n", styles: [".ticket-qr{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;height:auto;padding:1rem;width:100%}.ticket-qr__loader{align-items:center;background-color:#f3f4f6;border-radius:.5rem;display:flex;flex-flow:column nowrap;height:16rem;justify-content:center;width:16rem}.ticket-qr__loader-text{color:#9ca3af;font-size:.875rem}.ticket-qr__container{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;width:100%}.ticket-qr__container.hidden{display:none}.ticket-qr__canvas{box-shadow:0 0 10px #0003;border-radius:.5rem}.ticket-qr__updating-text{color:#9ca3af;font-size:.875rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: AppAlertComponent, selector: "app-alert", inputs: ["type", "text", "closeable", "size"] }] });
8906
9386
  }
8907
9387
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrComponent, decorators: [{
8908
9388
  type: Component,
8909
9389
  args: [{ selector: 'performance-ticket-qr', standalone: true, imports: [CommonModule, AppButtonComponent, AppAlertComponent], template: "<div class=\"ticket-qr\">\n @if (loading()) {\n <div class=\"ticket-qr__loader\">\n <span class=\"ticket-qr__loader-text\">Cargando QR...</span>\n </div>\n }\n\n @if (error()) {\n <div class=\"ticket-qr__container\">\n <app-alert text=\"Error al cargar el c\u00F3digo QR\" type=\"error\" />\n <app-button text=\"Reintentar\" (clicked)=\"retry()\" [disabled]=\"loading()\" />\n </div>\n }\n\n <div [class.hidden]=\"loading() || error()\" class=\"ticket-qr__container\">\n <div class=\"transition-opacity duration-300\" [class.opacity-50]=\"refreshing()\">\n <canvas #qrCanvas class=\"ticket-qr__canvas\" width=\"256\" height=\"256\"></canvas>\n </div>\n <span class=\"ticket-qr__updating-text\">\n {{ countdown() > 0 ? `Actualizando en ${countdown()}` : '0s' }}\n </span>\n </div>\n</div>\n", styles: [".ticket-qr{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;height:auto;padding:1rem;width:100%}.ticket-qr__loader{align-items:center;background-color:#f3f4f6;border-radius:.5rem;display:flex;flex-flow:column nowrap;height:16rem;justify-content:center;width:16rem}.ticket-qr__loader-text{color:#9ca3af;font-size:.875rem}.ticket-qr__container{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;width:100%}.ticket-qr__container.hidden{display:none}.ticket-qr__canvas{box-shadow:0 0 10px #0003;border-radius:.5rem}.ticket-qr__updating-text{color:#9ca3af;font-size:.875rem}\n"] }]
8910
- }], ctorParameters: () => [{ type: TicketQrService }], propDecorators: { ticketUuid: [{
9390
+ }], ctorParameters: () => [{ type: TicketQrService }, { type: Object, decorators: [{
9391
+ type: Inject,
9392
+ args: [PLATFORM_ID]
9393
+ }] }], propDecorators: { ticketUuid: [{
8911
9394
  type: Input,
8912
9395
  args: [{ required: true }]
8913
9396
  }], qrCanvas: [{
@@ -8959,7 +9442,7 @@ class OrderItemsComponent {
8959
9442
  return this.orderItems?.filter(({ item_type }) => item_type === OrderItemType.GIFT_BOND) ?? [];
8960
9443
  }
8961
9444
  get corporateBonds() {
8962
- return this.orderItems?.filter(({ item_type }) => item_type === OrderItemType.CORPORATE_BOND) ?? [];
9445
+ return (this.orderItems?.filter(({ item_type }) => item_type === OrderItemType.CORPORATE_BOND) ?? []);
8963
9446
  }
8964
9447
  get showActionColumn() {
8965
9448
  return this.order.status === 'completed' && this.tickets.length > 0;
@@ -8989,7 +9472,7 @@ class OrderItemsComponent {
8989
9472
  this.ticketQrModalService.open(ticketUuid, description);
8990
9473
  }
8991
9474
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderItemsComponent, deps: [{ token: TicketQrModalService }], target: i0.ɵɵFactoryTarget.Component });
8992
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderItemsComponent, isStandalone: true, selector: "order-items", inputs: { order: "order" }, ngImport: i0, template: "@if (!!order) {\n <div class=\"order-items\">\n <div class=\"order-items__header\">\n <p class=\"order-items__header-title\">\n Informaci\u00F3n de los art\u00EDculos comprados ({{ order.order_items.length | number: '1.0' }})\n </p>\n </div>\n <div class=\"order-items__table-container\">\n <table class=\"order-items__table\">\n <thead class=\"order-items__table-head\">\n <tr class=\"order-items__table-head-row\">\n <th class=\"order-items__table-head-cell\">Tipo</th>\n <th class=\"order-items__table-head-cell\">Descripci\u00F3n</th>\n\n <th class=\"order-items__table-head-cell text-right\">Cant.</th>\n <th class=\"order-items__table-head-cell text-right\">Precio</th>\n <th class=\"order-items__table-head-cell text-right\">Total</th>\n @if (showActionColumn) {\n <th class=\"order-items__table-head-cell\">Acciones</th>\n }\n </tr>\n </thead>\n <tbody class=\"order-items__table-body\">\n @for (item of order.order_items; track $index) {\n <tr class=\"order-items__table-body-row\">\n <td class=\"order-items__table-body-cell\">\n <order-item-type-badge [item]=\"item\" size=\"xs\" />\n </td>\n\n <td class=\"order-items__table-body-cell\">\n {{ item.description }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n {{ item.quantity }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n ${{ item.normal_price | number: '1.0-2' }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n <strong>\n ${{ itemTotal(item.quantity, item.normal_price) | number: '1.0-2' }}\n </strong>\n </td>\n\n @if (item.ticket_uuid && order.status === 'completed' && showActionColumn) {\n <td class=\"order-items__table-body-cell actions\">\n <app-button\n text=\"Ver ticket\"\n size=\"xs\"\n icon=\"ri-eye-line\"\n (clicked)=\"openTicketQr(item.ticket_uuid!, item.description)\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"order-items__totals\">\n <dl class=\"order-items__totals-container\">\n @if (giftBonds.length > 0 && totals.giftBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Bonos de regalo ({{ giftBonds.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.giftBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.giftBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (corporateBonds.length > 0 && totals.corporateBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Bonos corporativos ({{ corporateBonds.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.corporateBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.corporateBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (tickets.length > 0 && totals.tickets > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Entradas ({{ tickets.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.tickets > 0) {\n <span class=\"text-gray-900\"> ${{ totals.tickets | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (products.length > 0 && totals.products > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Productos</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.products > 0) {\n <span class=\"text-gray-900\"> ${{ totals.products | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (order.service_fee && order.service_fee > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Tarifa de servicio</dt>\n <dd class=\"order-items__totals-item-value\">\n <span class=\"text-gray-900\"> ${{ order.service_fee | number: '1.0-2' }} </span>\n </dd>\n </div>\n }\n\n @if (hasDiscount()) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Descuento</dt>\n <dd class=\"order-items__totals-item-title\">\n $-{{ order.discount_amount | number: '1.0-2' }}\n </dd>\n </div>\n }\n\n <div class=\"order-items__totals-item total-item\">\n <dt class=\"order-items__totals-item-total\">Total</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (!hasDiscount()) {\n <span class=\"order-items__totals-item-total\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n }\n @if (hasDiscount()) {\n <span class=\"order-items__totals-item-discount-wrapper\">\n <span class=\"order-items__totals-item-discount\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n <span class=\"order-items__totals-item-total\">\n ${{ order.total_discounted | number: '1.0-2' }}\n </span>\n </span>\n }\n </dd>\n </div>\n </dl>\n </div>\n </div>\n\n <ticket-qr-modal />\n}\n", styles: [".order-items{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-items__header{align-items:center;display:flex;flex-flow:row wrap;gap:1rem;padding:1rem;width:100%}.order-items__header-title{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-items__table-container{overflow-x:auto}.order-items__table{border-collapse:collapse;font-size:.875rem;width:100%}.order-items__table-head-row{background-color:#f9fafb;text-align:left}.order-items__table-head-cell{color:#6b7280;font-size:.75rem;font-weight:700;padding:.75rem 1.5rem;text-transform:uppercase}.order-items__table-head-cell.text-right{text-align:right}.order-items__table-body>:not(:last-child){border-bottom:1px solid #f9fafb}.order-items__table-body-row{transition:all .4s ease}.order-items__table-body-row:hover{background-color:#f9fafb}.order-items__table-body-cell{color:#374151;padding:.75rem 1.5rem;white-space:nowrap}.order-items__table-body-cell.text-right{text-align:right}.order-items__totals{background-color:#f9fafb;border-top:1px solid #f3f4f6;padding:1rem 1.5rem;width:100%}.order-items__totals-container{display:flex;flex-flow:column;gap:.5rem;margin-left:auto;max-width:20rem;width:100%}.order-items__totals-item{display:flex;font-size:.875rem;justify-content:space-between;width:100%}.order-items__totals-item.actions{text-align:left}.order-items__totals-item.total-item{border-top:1px solid #e5e7eb;padding-top:.5rem}.order-items__totals-item-title{color:#6b7280}.order-items__totals-item-total{color:#111827;font-size:1.125rem;font-weight:700;line-height:100%}.order-items__totals-item-discount-wrapper{align-items:flex-end;display:flex;flex-flow:column nowrap;width:100%}.order-items__totals-item-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: TicketQrModalComponent, selector: "ticket-qr-modal" }, { kind: "component", type: OrderItemTypeBadgeComponent, selector: "order-item-type-badge", inputs: ["item", "size"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }], encapsulation: i0.ViewEncapsulation.None });
9475
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderItemsComponent, isStandalone: true, selector: "order-items", inputs: { order: "order" }, ngImport: i0, template: "@if (!!order) {\n <div class=\"order-items\">\n <div class=\"order-items__header\">\n <p class=\"order-items__header-title\">\n Informaci\u00F3n de los art\u00EDculos comprados ({{ order.order_items.length | number: '1.0' }})\n </p>\n </div>\n <div class=\"order-items__table-container\">\n <table class=\"order-items__table\">\n <thead class=\"order-items__table-head\">\n <tr class=\"order-items__table-head-row\">\n <th class=\"order-items__table-head-cell\">Tipo</th>\n <th class=\"order-items__table-head-cell\">Descripci\u00F3n</th>\n\n <th class=\"order-items__table-head-cell text-right\">Cant.</th>\n <th class=\"order-items__table-head-cell text-right\">Precio</th>\n <th class=\"order-items__table-head-cell text-right\">Total</th>\n @if (showActionColumn) {\n <th class=\"order-items__table-head-cell\">Acciones</th>\n }\n </tr>\n </thead>\n <tbody class=\"order-items__table-body\">\n @for (item of order.order_items; track $index) {\n <tr class=\"order-items__table-body-row\">\n <td class=\"order-items__table-body-cell\">\n <order-item-type-badge [item]=\"item\" size=\"xs\" />\n </td>\n\n <td class=\"order-items__table-body-cell\">\n {{ item.description }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n {{ item.quantity }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n ${{ item.normal_price | number: '1.0-2' }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n <strong>\n ${{ itemTotal(item.quantity, item.normal_price) | number: '1.0-2' }}\n </strong>\n </td>\n\n @if (item.ticket_uuid && order.status === 'completed' && showActionColumn) {\n <td class=\"order-items__table-body-cell actions\">\n <app-button\n text=\"Ver ticket\"\n size=\"xs\"\n icon=\"ri-eye-line\"\n (clicked)=\"openTicketQr(item.ticket_uuid!, item.description)\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"order-items__totals\">\n <dl class=\"order-items__totals-container\">\n @if (giftBonds.length > 0 && totals.giftBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Bonos de regalo ({{ giftBonds.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.giftBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.giftBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (corporateBonds.length > 0 && totals.corporateBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">\n Bonos corporativos ({{ corporateBonds.length }})\n </dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.corporateBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.corporateBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (tickets.length > 0 && totals.tickets > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Entradas ({{ tickets.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.tickets > 0) {\n <span class=\"text-gray-900\"> ${{ totals.tickets | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (products.length > 0 && totals.products > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Productos</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.products > 0) {\n <span class=\"text-gray-900\"> ${{ totals.products | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (order.service_fee && order.service_fee > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Tarifa de servicio</dt>\n <dd class=\"order-items__totals-item-value\">\n <span class=\"text-gray-900\"> ${{ order.service_fee | number: '1.0-2' }} </span>\n </dd>\n </div>\n }\n\n @if (hasDiscount()) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Descuento</dt>\n <dd class=\"order-items__totals-item-title\">\n $-{{ order.discount_amount | number: '1.0-2' }}\n </dd>\n </div>\n }\n\n <div class=\"order-items__totals-item total-item\">\n <dt class=\"order-items__totals-item-total\">Total</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (!hasDiscount()) {\n <span class=\"order-items__totals-item-total\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n }\n @if (hasDiscount()) {\n <span class=\"order-items__totals-item-discount-wrapper\">\n <span class=\"order-items__totals-item-discount\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n <span class=\"order-items__totals-item-total\">\n ${{ order.total_discounted | number: '1.0-2' }}\n </span>\n </span>\n }\n </dd>\n </div>\n </dl>\n </div>\n </div>\n\n <ticket-qr-modal />\n}\n", styles: [".order-items{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-items__header{align-items:center;display:flex;flex-flow:row wrap;gap:1rem;padding:1rem;width:100%}.order-items__header-title{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-items__table-container{overflow-x:auto}.order-items__table{border-collapse:collapse;font-size:.875rem;width:100%}.order-items__table-head-row{background-color:#f9fafb;text-align:left}.order-items__table-head-cell{color:#6b7280;font-size:.75rem;font-weight:700;padding:.75rem 1.5rem;text-transform:uppercase}.order-items__table-head-cell.text-right{text-align:right}.order-items__table-body>:not(:last-child){border-bottom:1px solid #f9fafb}.order-items__table-body-row{transition:all .4s ease}.order-items__table-body-row:hover{background-color:#f9fafb}.order-items__table-body-cell{color:#374151;padding:.75rem 1.5rem;white-space:nowrap}.order-items__table-body-cell.text-right{text-align:right}.order-items__totals{background-color:#f9fafb;border-top:1px solid #f3f4f6;padding:1rem 1.5rem;width:100%}.order-items__totals-container{display:flex;flex-flow:column;gap:.5rem;margin-left:auto;max-width:20rem;width:100%}.order-items__totals-item{display:flex;font-size:.875rem;justify-content:space-between;width:100%}.order-items__totals-item.actions{text-align:left}.order-items__totals-item.total-item{border-top:1px solid #e5e7eb;padding-top:.5rem}.order-items__totals-item-title{color:#6b7280}.order-items__totals-item-total{color:#111827;font-size:1.125rem;font-weight:700;line-height:100%}.order-items__totals-item-discount-wrapper{align-items:flex-end;display:flex;flex-flow:column nowrap;width:100%}.order-items__totals-item-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: TicketQrModalComponent, selector: "ticket-qr-modal" }, { kind: "component", type: OrderItemTypeBadgeComponent, selector: "order-item-type-badge", inputs: ["item", "size"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }], encapsulation: i0.ViewEncapsulation.None });
8993
9476
  }
8994
9477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderItemsComponent, decorators: [{
8995
9478
  type: Component,
@@ -8999,7 +9482,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
8999
9482
  TicketQrModalComponent,
9000
9483
  TicketMapWidgetHeaderComponent,
9001
9484
  OrderItemTypeBadgeComponent,
9002
- ], encapsulation: ViewEncapsulation.None, template: "@if (!!order) {\n <div class=\"order-items\">\n <div class=\"order-items__header\">\n <p class=\"order-items__header-title\">\n Informaci\u00F3n de los art\u00EDculos comprados ({{ order.order_items.length | number: '1.0' }})\n </p>\n </div>\n <div class=\"order-items__table-container\">\n <table class=\"order-items__table\">\n <thead class=\"order-items__table-head\">\n <tr class=\"order-items__table-head-row\">\n <th class=\"order-items__table-head-cell\">Tipo</th>\n <th class=\"order-items__table-head-cell\">Descripci\u00F3n</th>\n\n <th class=\"order-items__table-head-cell text-right\">Cant.</th>\n <th class=\"order-items__table-head-cell text-right\">Precio</th>\n <th class=\"order-items__table-head-cell text-right\">Total</th>\n @if (showActionColumn) {\n <th class=\"order-items__table-head-cell\">Acciones</th>\n }\n </tr>\n </thead>\n <tbody class=\"order-items__table-body\">\n @for (item of order.order_items; track $index) {\n <tr class=\"order-items__table-body-row\">\n <td class=\"order-items__table-body-cell\">\n <order-item-type-badge [item]=\"item\" size=\"xs\" />\n </td>\n\n <td class=\"order-items__table-body-cell\">\n {{ item.description }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n {{ item.quantity }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n ${{ item.normal_price | number: '1.0-2' }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n <strong>\n ${{ itemTotal(item.quantity, item.normal_price) | number: '1.0-2' }}\n </strong>\n </td>\n\n @if (item.ticket_uuid && order.status === 'completed' && showActionColumn) {\n <td class=\"order-items__table-body-cell actions\">\n <app-button\n text=\"Ver ticket\"\n size=\"xs\"\n icon=\"ri-eye-line\"\n (clicked)=\"openTicketQr(item.ticket_uuid!, item.description)\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"order-items__totals\">\n <dl class=\"order-items__totals-container\">\n @if (giftBonds.length > 0 && totals.giftBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Bonos de regalo ({{ giftBonds.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.giftBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.giftBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (corporateBonds.length > 0 && totals.corporateBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Bonos corporativos ({{ corporateBonds.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.corporateBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.corporateBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (tickets.length > 0 && totals.tickets > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Entradas ({{ tickets.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.tickets > 0) {\n <span class=\"text-gray-900\"> ${{ totals.tickets | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (products.length > 0 && totals.products > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Productos</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.products > 0) {\n <span class=\"text-gray-900\"> ${{ totals.products | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (order.service_fee && order.service_fee > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Tarifa de servicio</dt>\n <dd class=\"order-items__totals-item-value\">\n <span class=\"text-gray-900\"> ${{ order.service_fee | number: '1.0-2' }} </span>\n </dd>\n </div>\n }\n\n @if (hasDiscount()) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Descuento</dt>\n <dd class=\"order-items__totals-item-title\">\n $-{{ order.discount_amount | number: '1.0-2' }}\n </dd>\n </div>\n }\n\n <div class=\"order-items__totals-item total-item\">\n <dt class=\"order-items__totals-item-total\">Total</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (!hasDiscount()) {\n <span class=\"order-items__totals-item-total\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n }\n @if (hasDiscount()) {\n <span class=\"order-items__totals-item-discount-wrapper\">\n <span class=\"order-items__totals-item-discount\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n <span class=\"order-items__totals-item-total\">\n ${{ order.total_discounted | number: '1.0-2' }}\n </span>\n </span>\n }\n </dd>\n </div>\n </dl>\n </div>\n </div>\n\n <ticket-qr-modal />\n}\n", styles: [".order-items{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-items__header{align-items:center;display:flex;flex-flow:row wrap;gap:1rem;padding:1rem;width:100%}.order-items__header-title{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-items__table-container{overflow-x:auto}.order-items__table{border-collapse:collapse;font-size:.875rem;width:100%}.order-items__table-head-row{background-color:#f9fafb;text-align:left}.order-items__table-head-cell{color:#6b7280;font-size:.75rem;font-weight:700;padding:.75rem 1.5rem;text-transform:uppercase}.order-items__table-head-cell.text-right{text-align:right}.order-items__table-body>:not(:last-child){border-bottom:1px solid #f9fafb}.order-items__table-body-row{transition:all .4s ease}.order-items__table-body-row:hover{background-color:#f9fafb}.order-items__table-body-cell{color:#374151;padding:.75rem 1.5rem;white-space:nowrap}.order-items__table-body-cell.text-right{text-align:right}.order-items__totals{background-color:#f9fafb;border-top:1px solid #f3f4f6;padding:1rem 1.5rem;width:100%}.order-items__totals-container{display:flex;flex-flow:column;gap:.5rem;margin-left:auto;max-width:20rem;width:100%}.order-items__totals-item{display:flex;font-size:.875rem;justify-content:space-between;width:100%}.order-items__totals-item.actions{text-align:left}.order-items__totals-item.total-item{border-top:1px solid #e5e7eb;padding-top:.5rem}.order-items__totals-item-title{color:#6b7280}.order-items__totals-item-total{color:#111827;font-size:1.125rem;font-weight:700;line-height:100%}.order-items__totals-item-discount-wrapper{align-items:flex-end;display:flex;flex-flow:column nowrap;width:100%}.order-items__totals-item-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}\n"] }]
9485
+ ], encapsulation: ViewEncapsulation.None, template: "@if (!!order) {\n <div class=\"order-items\">\n <div class=\"order-items__header\">\n <p class=\"order-items__header-title\">\n Informaci\u00F3n de los art\u00EDculos comprados ({{ order.order_items.length | number: '1.0' }})\n </p>\n </div>\n <div class=\"order-items__table-container\">\n <table class=\"order-items__table\">\n <thead class=\"order-items__table-head\">\n <tr class=\"order-items__table-head-row\">\n <th class=\"order-items__table-head-cell\">Tipo</th>\n <th class=\"order-items__table-head-cell\">Descripci\u00F3n</th>\n\n <th class=\"order-items__table-head-cell text-right\">Cant.</th>\n <th class=\"order-items__table-head-cell text-right\">Precio</th>\n <th class=\"order-items__table-head-cell text-right\">Total</th>\n @if (showActionColumn) {\n <th class=\"order-items__table-head-cell\">Acciones</th>\n }\n </tr>\n </thead>\n <tbody class=\"order-items__table-body\">\n @for (item of order.order_items; track $index) {\n <tr class=\"order-items__table-body-row\">\n <td class=\"order-items__table-body-cell\">\n <order-item-type-badge [item]=\"item\" size=\"xs\" />\n </td>\n\n <td class=\"order-items__table-body-cell\">\n {{ item.description }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n {{ item.quantity }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n ${{ item.normal_price | number: '1.0-2' }}\n </td>\n\n <td class=\"order-items__table-body-cell text-right\">\n <strong>\n ${{ itemTotal(item.quantity, item.normal_price) | number: '1.0-2' }}\n </strong>\n </td>\n\n @if (item.ticket_uuid && order.status === 'completed' && showActionColumn) {\n <td class=\"order-items__table-body-cell actions\">\n <app-button\n text=\"Ver ticket\"\n size=\"xs\"\n icon=\"ri-eye-line\"\n (clicked)=\"openTicketQr(item.ticket_uuid!, item.description)\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"order-items__totals\">\n <dl class=\"order-items__totals-container\">\n @if (giftBonds.length > 0 && totals.giftBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Bonos de regalo ({{ giftBonds.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.giftBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.giftBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (corporateBonds.length > 0 && totals.corporateBonds > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">\n Bonos corporativos ({{ corporateBonds.length }})\n </dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.corporateBonds > 0) {\n <span class=\"text-gray-900\"> ${{ totals.corporateBonds | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (tickets.length > 0 && totals.tickets > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Entradas ({{ tickets.length }})</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.tickets > 0) {\n <span class=\"text-gray-900\"> ${{ totals.tickets | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (products.length > 0 && totals.products > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Productos</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (totals.products > 0) {\n <span class=\"text-gray-900\"> ${{ totals.products | number: '1.0-2' }} </span>\n }\n </dd>\n </div>\n }\n\n @if (order.service_fee && order.service_fee > 0) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Tarifa de servicio</dt>\n <dd class=\"order-items__totals-item-value\">\n <span class=\"text-gray-900\"> ${{ order.service_fee | number: '1.0-2' }} </span>\n </dd>\n </div>\n }\n\n @if (hasDiscount()) {\n <div class=\"order-items__totals-item\">\n <dt class=\"order-items__totals-item-title\">Descuento</dt>\n <dd class=\"order-items__totals-item-title\">\n $-{{ order.discount_amount | number: '1.0-2' }}\n </dd>\n </div>\n }\n\n <div class=\"order-items__totals-item total-item\">\n <dt class=\"order-items__totals-item-total\">Total</dt>\n <dd class=\"order-items__totals-item-value\">\n @if (!hasDiscount()) {\n <span class=\"order-items__totals-item-total\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n }\n @if (hasDiscount()) {\n <span class=\"order-items__totals-item-discount-wrapper\">\n <span class=\"order-items__totals-item-discount\">\n ${{ order.total | number: '1.0-2' }}\n </span>\n <span class=\"order-items__totals-item-total\">\n ${{ order.total_discounted | number: '1.0-2' }}\n </span>\n </span>\n }\n </dd>\n </div>\n </dl>\n </div>\n </div>\n\n <ticket-qr-modal />\n}\n", styles: [".order-items{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-items__header{align-items:center;display:flex;flex-flow:row wrap;gap:1rem;padding:1rem;width:100%}.order-items__header-title{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-items__table-container{overflow-x:auto}.order-items__table{border-collapse:collapse;font-size:.875rem;width:100%}.order-items__table-head-row{background-color:#f9fafb;text-align:left}.order-items__table-head-cell{color:#6b7280;font-size:.75rem;font-weight:700;padding:.75rem 1.5rem;text-transform:uppercase}.order-items__table-head-cell.text-right{text-align:right}.order-items__table-body>:not(:last-child){border-bottom:1px solid #f9fafb}.order-items__table-body-row{transition:all .4s ease}.order-items__table-body-row:hover{background-color:#f9fafb}.order-items__table-body-cell{color:#374151;padding:.75rem 1.5rem;white-space:nowrap}.order-items__table-body-cell.text-right{text-align:right}.order-items__totals{background-color:#f9fafb;border-top:1px solid #f3f4f6;padding:1rem 1.5rem;width:100%}.order-items__totals-container{display:flex;flex-flow:column;gap:.5rem;margin-left:auto;max-width:20rem;width:100%}.order-items__totals-item{display:flex;font-size:.875rem;justify-content:space-between;width:100%}.order-items__totals-item.actions{text-align:left}.order-items__totals-item.total-item{border-top:1px solid #e5e7eb;padding-top:.5rem}.order-items__totals-item-title{color:#6b7280}.order-items__totals-item-total{color:#111827;font-size:1.125rem;font-weight:700;line-height:100%}.order-items__totals-item-discount-wrapper{align-items:flex-end;display:flex;flex-flow:column nowrap;width:100%}.order-items__totals-item-discount{color:#9ca3af;font-size:.75rem;text-decoration:line-through}\n"] }]
9003
9486
  }], ctorParameters: () => [{ type: TicketQrModalService }], propDecorators: { order: [{
9004
9487
  type: Input,
9005
9488
  args: [{ required: true }]
@@ -9024,7 +9507,7 @@ class OrderDiscountAppliedComponent {
9024
9507
  return ORDER_DISCOUNT_COLORS[this.discountInfo.type] ?? { text: '', bg: '' };
9025
9508
  }
9026
9509
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderDiscountAppliedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9027
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderDiscountAppliedComponent, isStandalone: true, selector: "order-discount-applied", inputs: { order: "order" }, ngImport: i0, template: "@if (hasDiscount) {\n <div class=\"order-discount-applied\">\n <div class=\"order-discount-applied__content\">\n <div class=\"order-discount-applied__content-item discount-icon\">\n <div class=\"order-discount-applied__content-item-icon-wrapper\">\n <i class=\"order-discount-applied__content-item-icon\" [class]=\"discountInfo.icon\"></i>\n </div>\n </div>\n\n <div class=\"order-discount-applied__content-item\">\n <p class=\"order-discount-applied__content-item-title\">Tipo de descuento</p>\n <app-badge\n [text]=\"'order.discountTypes.' + discountInfo.type | transloco\"\n [backgroundColor]=\"badgeColors.bg\"\n [textColor]=\"badgeColors.text\"\n size=\"xs\"\n />\n </div>\n\n @if (discountInfo.code) {\n <div class=\"order-discount-applied__content-item\">\n <p class=\"order-discount-applied__content-item-title\">C\u00F3digo</p>\n <p class=\"order-discount-applied__content-item-value\">{{ discountInfo.code }}</p>\n </div>\n }\n\n @if (discountInfo.name && discountInfo.name !== discountInfo.code) {\n <div class=\"order-discount-applied__content-item\">\n <p class=\"order-discount-applied__content-item-title\">Nombre</p>\n <p class=\"order-discount-applied__content-item-value\">{{ discountInfo.name }}</p>\n </div>\n }\n\n <div class=\"order-discount-applied__content-item\">\n <p class=\"order-discount-applied__content-item-title\">Valor del descuento</p>\n <p class=\"order-discount-applied__content-item-value\">\n ${{ discountInfo.value | currency: 'COP' : '' : '1.0-2' }}\n </p>\n </div>\n </div>\n </div>\n}\n", styles: [".order-discount-applied{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-discount-applied__content{display:flex;flex-flow:row wrap;gap:1rem;padding:1rem}.order-discount-applied__content-item{align-items:flex-start;display:flex;flex-flow:column nowrap;flex:1 1 calc(50% - 1rem);position:relative}@media(min-width:768px){.order-discount-applied__content-item{flex:1 1 0}}.order-discount-applied__content-item.discount-icon{flex:0 0 auto;justify-content:center;width:auto}@media(min-width:768px){.order-discount-applied__content-item.discount-icon{flex:0 0 auto}}.order-discount-applied__content-item-title{color:#9ca3af;font-size:.75rem;margin:0;text-transform:uppercase}.order-discount-applied__content-item-value{color:#111827;font-weight:500;font-size:.875rem;margin:0}.order-discount-applied__content-item-icon-wrapper{align-items:center;border-radius:.375rem;border:1px solid #e5e7eb;display:flex;height:2.5rem;justify-content:center;width:2.5rem}.order-discount-applied__content-item-icon-wrapper i{font-size:1.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
9510
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderDiscountAppliedComponent, isStandalone: true, selector: "order-discount-applied", inputs: { order: "order" }, ngImport: i0, template: "@if (hasDiscount) {\n <div class=\"order-discount-applied\">\n <div class=\"order-discount-applied__content\">\n <div class=\"order-discount-applied__content-item discount-icon\">\n <div class=\"order-discount-applied__content-item-icon-wrapper\">\n <i class=\"order-discount-applied__content-item-icon\" [class]=\"discountInfo.icon\"></i>\n </div>\n </div>\n\n <div class=\"order-discount-applied__content-item\">\n <p class=\"order-discount-applied__content-item-title\">Tipo de descuento</p>\n <app-badge\n [text]=\"'order.discountTypes.' + discountInfo.type | transloco\"\n [backgroundColor]=\"badgeColors.bg\"\n [textColor]=\"badgeColors.text\"\n size=\"xs\"\n />\n </div>\n\n @if (discountInfo.code) {\n <div class=\"order-discount-applied__content-item\">\n <p class=\"order-discount-applied__content-item-title\">C\u00F3digo</p>\n <p class=\"order-discount-applied__content-item-value\">{{ discountInfo.code }}</p>\n </div>\n }\n\n @if (discountInfo.name && discountInfo.name !== discountInfo.code) {\n <div class=\"order-discount-applied__content-item\">\n <p class=\"order-discount-applied__content-item-title\">Nombre</p>\n <p class=\"order-discount-applied__content-item-value\">{{ discountInfo.name }}</p>\n </div>\n }\n\n <div class=\"order-discount-applied__content-item\">\n <p class=\"order-discount-applied__content-item-title\">Valor del descuento</p>\n <p class=\"order-discount-applied__content-item-value\">\n ${{ discountInfo.value | currency: 'COP' : '' : '1.0-2' }}\n </p>\n </div>\n </div>\n </div>\n}\n", styles: [".order-discount-applied{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-discount-applied__content{display:flex;flex-flow:row wrap;gap:1rem;padding:1rem}.order-discount-applied__content-item{align-items:flex-start;display:flex;flex-flow:column nowrap;flex:1 1 calc(50% - 1rem);position:relative}@media(min-width:768px){.order-discount-applied__content-item{flex:1 1 0}}.order-discount-applied__content-item.discount-icon{flex:0 0 auto;justify-content:center;width:auto}@media(min-width:768px){.order-discount-applied__content-item.discount-icon{flex:0 0 auto}}.order-discount-applied__content-item-title{color:#9ca3af;font-size:.75rem;margin:0;text-transform:uppercase}.order-discount-applied__content-item-value{color:#111827;font-weight:500;font-size:.875rem;margin:0}.order-discount-applied__content-item-icon-wrapper{align-items:center;border-radius:.375rem;border:1px solid #e5e7eb;display:flex;height:2.5rem;justify-content:center;width:2.5rem}.order-discount-applied__content-item-icon-wrapper i{font-size:1.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
9028
9511
  }
9029
9512
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderDiscountAppliedComponent, decorators: [{
9030
9513
  type: Component,
@@ -9124,7 +9607,7 @@ class OrderTransactionDetailsModalComponent {
9124
9607
  this.modalService.close();
9125
9608
  }
9126
9609
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderTransactionDetailsModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9127
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderTransactionDetailsModalComponent, isStandalone: true, selector: "order-transaction-details-modal", inputs: { isOpen: "isOpen", transaction: "transaction" }, ngImport: i0, template: "<app-modal\n [isOpen]=\"modalIsOpen\"\n (closeModal)=\"onClose()\"\n [title]=\"'order.transactionDetails.title' | transloco\"\n size=\"lg\"\n>\n @if (selectedTransaction(); as tx) {\n <div class=\"order-transaction-details\">\n <div class=\"order-transaction-details__grid\">\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.id' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">{{ tx.id }}</span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.paymentMethod' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">\n {{ 'order.paymentMethods.' + tx.payment_gateway | transloco }}\n </span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.status' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">\n <app-badge\n [text]=\"'order.transactionStatus.' + tx.status | transloco\"\n [backgroundColor]=\"txColors[tx.status].bg\"\n [textColor]=\"txColors[tx.status].text\"\n size=\"xs\"\n />\n </span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.amount' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">\n ${{ tx.amount | number: '1.0-2' }} {{ tx.currency }}\n </span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.currency' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">{{ tx.currency }}</span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.gatewayId' | transloco }}\n </span>\n <span class=\"order-transaction-details__value gateway-id\">\n {{ tx.gateway_transaction_id }}\n </span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.createdAt' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">{{ tx.created_at | date: 'medium' }}</span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.updatedAt' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">{{ tx.updated_at | date: 'medium' }}</span>\n </div>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.gatewayResponse' | transloco }}\n </span>\n @if (gatewayResponse) {\n <pre class=\"order-transaction-details__json\">{{ gatewayResponse }}</pre>\n } @else {\n <span class=\"order-transaction-details__value\">\u2014</span>\n }\n </div>\n </div>\n }\n</app-modal>\n", styles: [".order-transaction-details{display:flex;flex-direction:column;gap:1.5rem}.order-transaction-details__grid{display:grid;gap:1rem 1.5rem;grid-template-columns:repeat(2,minmax(0,1fr))}.order-transaction-details__item{display:flex;flex-direction:column;gap:.25rem}.order-transaction-details__label{color:#6b7280;font-size:.75rem;font-weight:700;text-transform:uppercase}.order-transaction-details__value{color:#374151;font-size:.875rem}@media(prefers-color-scheme:dark){.order-transaction-details__value{color:#d1d5db}}.order-transaction-details__json{background-color:#f9fafb;border:1px solid #f3f4f6;border-radius:.375rem;color:#374151;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem;line-height:1.625;margin:0;max-height:20rem;overflow:auto;padding:.75rem 1rem;white-space:pre-wrap;word-break:break-word}@media(prefers-color-scheme:dark){.order-transaction-details__json{background-color:#111827}}@media(prefers-color-scheme:dark){.order-transaction-details__json{border-color:#374151}}@media(prefers-color-scheme:dark){.order-transaction-details__json{color:#d1d5db}}.order-transaction-details .gateway-id{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppModalComponent, selector: "app-modal", inputs: ["title", "disableClose", "showHeader", "showCloseButton", "showTitle", "interactiveClose", "isOpen", "size"], outputs: ["closeModal"] }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
9610
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderTransactionDetailsModalComponent, isStandalone: true, selector: "order-transaction-details-modal", inputs: { isOpen: "isOpen", transaction: "transaction" }, ngImport: i0, template: "<app-modal\n [isOpen]=\"modalIsOpen\"\n (closeModal)=\"onClose()\"\n [title]=\"'order.transactionDetails.title' | transloco\"\n size=\"lg\"\n>\n @if (selectedTransaction(); as tx) {\n <div class=\"order-transaction-details\">\n <div class=\"order-transaction-details__grid\">\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.id' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">{{ tx.id }}</span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.paymentMethod' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">\n {{ 'order.paymentMethods.' + tx.payment_gateway | transloco }}\n </span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.status' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">\n <app-badge\n [text]=\"'order.transactionStatus.' + tx.status | transloco\"\n [backgroundColor]=\"txColors[tx.status].bg\"\n [textColor]=\"txColors[tx.status].text\"\n size=\"xs\"\n />\n </span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.amount' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">\n ${{ tx.amount | number: '1.0-2' }} {{ tx.currency }}\n </span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.currency' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">{{ tx.currency }}</span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.gatewayId' | transloco }}\n </span>\n <span class=\"order-transaction-details__value gateway-id\">\n {{ tx.gateway_transaction_id }}\n </span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.createdAt' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">{{ tx.created_at | date: 'medium' }}</span>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.updatedAt' | transloco }}\n </span>\n <span class=\"order-transaction-details__value\">{{ tx.updated_at | date: 'medium' }}</span>\n </div>\n </div>\n\n <div class=\"order-transaction-details__item\">\n <span class=\"order-transaction-details__label\">\n {{ 'order.transactionDetails.labels.gatewayResponse' | transloco }}\n </span>\n @if (gatewayResponse) {\n <pre class=\"order-transaction-details__json\">{{ gatewayResponse }}</pre>\n } @else {\n <span class=\"order-transaction-details__value\">\u2014</span>\n }\n </div>\n </div>\n }\n</app-modal>\n", styles: [".order-transaction-details{display:flex;flex-direction:column;gap:1.5rem}.order-transaction-details__grid{display:grid;gap:1rem 1.5rem;grid-template-columns:repeat(2,minmax(0,1fr))}.order-transaction-details__item{display:flex;flex-direction:column;gap:.25rem}.order-transaction-details__label{color:#6b7280;font-size:.75rem;font-weight:700;text-transform:uppercase}.order-transaction-details__value{color:#374151;font-size:.875rem}@media(prefers-color-scheme:dark){.order-transaction-details__value{color:#d1d5db}}.order-transaction-details__json{background-color:#f9fafb;border:1px solid #f3f4f6;border-radius:.375rem;color:#374151;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem;line-height:1.625;margin:0;max-height:20rem;overflow:auto;padding:.75rem 1rem;white-space:pre-wrap;word-break:break-word}@media(prefers-color-scheme:dark){.order-transaction-details__json{background-color:#111827}}@media(prefers-color-scheme:dark){.order-transaction-details__json{border-color:#374151}}@media(prefers-color-scheme:dark){.order-transaction-details__json{color:#d1d5db}}.order-transaction-details .gateway-id{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppModalComponent, selector: "app-modal", inputs: ["title", "disableClose", "showHeader", "showCloseButton", "showTitle", "interactiveClose", "isOpen", "size"], outputs: ["closeModal"] }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }] });
9128
9611
  }
9129
9612
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderTransactionDetailsModalComponent, decorators: [{
9130
9613
  type: Component,
@@ -9154,7 +9637,7 @@ class OrderTransactionsComponent {
9154
9637
  this.transactionDetailsModalService.open(transaction);
9155
9638
  }
9156
9639
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderTransactionsComponent, deps: [{ token: OrderTransactionDetailsModalService }], target: i0.ɵɵFactoryTarget.Component });
9157
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderTransactionsComponent, isStandalone: true, selector: "order-transactions", inputs: { order: "order" }, ngImport: i0, template: "@if (hasTransactions) {\n <div class=\"order-transactions\">\n <div class=\"order-transactions__header\">\n <p class=\"order-transactions__header-title\">\n Transacciones ({{ transactions.length | number: '1.0' }})\n </p>\n </div>\n <div class=\"order-transactions__table-container\">\n <table class=\"order-transactions__table\">\n <thead class=\"order-transactions__table-head\">\n <tr class=\"order-transactions__table-head-row\">\n <th class=\"order-transactions__table-head-cell\">Medio de pago</th>\n <th class=\"order-transactions__table-head-cell\">Estado</th>\n <th class=\"order-transactions__table-head-cell text-right\">Valor</th>\n <th class=\"order-transactions__table-head-cell\">ID transacci\u00F3n</th>\n <th class=\"order-transactions__table-head-cell text-right\">Acciones</th>\n </tr>\n </thead>\n <tbody class=\"order-transactions__table-body\">\n @for (tx of transactions; track tx.id) {\n <tr class=\"order-transactions__table-body-row\">\n <td class=\"order-transactions__table-body-cell\">\n {{ 'order.paymentMethods.' + tx.payment_gateway | transloco }}\n </td>\n <td class=\"order-transactions__table-body-cell\">\n <app-badge\n [text]=\"'order.transactionStatus.' + tx.status | transloco\"\n [backgroundColor]=\"txColors[tx.status].bg\"\n [textColor]=\"txColors[tx.status].text\"\n size=\"xs\"\n />\n </td>\n <td class=\"order-transactions__table-body-cell text-right\">\n ${{ tx.amount | number: '1.0-2' }}\n </td>\n <td class=\"order-transactions__table-body-cell\">\n {{ tx.gateway_transaction_id }}\n </td>\n <td class=\"order-transactions__table-body-cell text-right\">\n <app-button\n icon=\"ri-eye-line\"\n variant=\"tertiary\"\n size=\"xs\"\n (clicked)=\"openTransaction(tx)\"\n [title]=\"'order.transactionDetails.actions.view' | transloco\"\n />\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n\n <order-transaction-details-modal />\n}\n", styles: [".order-transactions{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-transactions__header{align-items:center;display:flex;padding:1rem;width:100%}.order-transactions__header-title{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-transactions__table-container{overflow-x:auto}.order-transactions__table{border-collapse:collapse;font-size:.875rem;width:100%}.order-transactions__table-head-row{background-color:#f9fafb;text-align:left}.order-transactions__table-head-cell{color:#6b7280;font-size:.75rem;font-weight:700;padding:.75rem 1.5rem;text-transform:uppercase}.order-transactions__table-head-cell.text-right{text-align:right}.order-transactions__table-body>:not(:last-child){border-bottom:1px solid #f9fafb}.order-transactions__table-body-row{transition:all .4s ease}.order-transactions__table-body-row:hover{background-color:#f9fafb}.order-transactions__table-body-cell{color:#374151;padding:.75rem 1.5rem;white-space:nowrap}.order-transactions__table-body-cell.text-right{text-align:right}.order-transactions__table-body-cell .gateway-id{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: OrderTransactionDetailsModalComponent, selector: "order-transaction-details-modal", inputs: ["isOpen", "transaction"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
9640
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: OrderTransactionsComponent, isStandalone: true, selector: "order-transactions", inputs: { order: "order" }, ngImport: i0, template: "@if (hasTransactions) {\n <div class=\"order-transactions\">\n <div class=\"order-transactions__header\">\n <p class=\"order-transactions__header-title\">\n Transacciones ({{ transactions.length | number: '1.0' }})\n </p>\n </div>\n <div class=\"order-transactions__table-container\">\n <table class=\"order-transactions__table\">\n <thead class=\"order-transactions__table-head\">\n <tr class=\"order-transactions__table-head-row\">\n <th class=\"order-transactions__table-head-cell\">Medio de pago</th>\n <th class=\"order-transactions__table-head-cell\">Estado</th>\n <th class=\"order-transactions__table-head-cell text-right\">Valor</th>\n <th class=\"order-transactions__table-head-cell\">ID transacci\u00F3n</th>\n <th class=\"order-transactions__table-head-cell text-right\">Acciones</th>\n </tr>\n </thead>\n <tbody class=\"order-transactions__table-body\">\n @for (tx of transactions; track tx.id) {\n <tr class=\"order-transactions__table-body-row\">\n <td class=\"order-transactions__table-body-cell\">\n {{ 'order.paymentMethods.' + tx.payment_gateway | transloco }}\n </td>\n <td class=\"order-transactions__table-body-cell\">\n <app-badge\n [text]=\"'order.transactionStatus.' + tx.status | transloco\"\n [backgroundColor]=\"txColors[tx.status].bg\"\n [textColor]=\"txColors[tx.status].text\"\n size=\"xs\"\n />\n </td>\n <td class=\"order-transactions__table-body-cell text-right\">\n ${{ tx.amount | number: '1.0-2' }}\n </td>\n <td class=\"order-transactions__table-body-cell\">\n {{ tx.gateway_transaction_id }}\n </td>\n <td class=\"order-transactions__table-body-cell text-right\">\n <app-button\n icon=\"ri-eye-line\"\n variant=\"tertiary\"\n size=\"xs\"\n (clicked)=\"openTransaction(tx)\"\n [title]=\"'order.transactionDetails.actions.view' | transloco\"\n />\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n\n <order-transaction-details-modal />\n}\n", styles: [".order-transactions{background-color:#fff;border-radius:.5rem;border:1px solid #f3f4f6;box-sizing:border-box;overflow:hidden;position:relative;width:100%}.order-transactions__header{align-items:center;display:flex;padding:1rem;width:100%}.order-transactions__header-title{color:#6b7280;font-size:.875rem;font-weight:700;margin:0}.order-transactions__table-container{overflow-x:auto}.order-transactions__table{border-collapse:collapse;font-size:.875rem;width:100%}.order-transactions__table-head-row{background-color:#f9fafb;text-align:left}.order-transactions__table-head-cell{color:#6b7280;font-size:.75rem;font-weight:700;padding:.75rem 1.5rem;text-transform:uppercase}.order-transactions__table-head-cell.text-right{text-align:right}.order-transactions__table-body>:not(:last-child){border-bottom:1px solid #f9fafb}.order-transactions__table-body-row{transition:all .4s ease}.order-transactions__table-body-row:hover{background-color:#f9fafb}.order-transactions__table-body-cell{color:#374151;padding:.75rem 1.5rem;white-space:nowrap}.order-transactions__table-body-cell.text-right{text-align:right}.order-transactions__table-body-cell .gateway-id{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: OrderTransactionDetailsModalComponent, selector: "order-transaction-details-modal", inputs: ["isOpen", "transaction"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
9158
9641
  }
9159
9642
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: OrderTransactionsComponent, decorators: [{
9160
9643
  type: Component,
@@ -9191,7 +9674,7 @@ class VipCardStatusBadgeComponent {
9191
9674
  return `vipCard.status.${this.card.status}`;
9192
9675
  }
9193
9676
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VipCardStatusBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9194
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: VipCardStatusBadgeComponent, isStandalone: true, selector: "vip-card-status-badge", inputs: { card: "card" }, ngImport: i0, template: "<app-badge [text]=\"statusTranslationKey | transloco\" [color]=\"statusColor\" size=\"xs\" />\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
9677
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: VipCardStatusBadgeComponent, isStandalone: true, selector: "vip-card-status-badge", inputs: { card: "card" }, ngImport: i0, template: "<app-badge [text]=\"statusTranslationKey | transloco\" [color]=\"statusColor\" size=\"xs\" />\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppBadgeComponent, selector: "app-badge", inputs: ["text", "color", "size", "bordered", "backgroundColor", "textColor"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1$3.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None });
9195
9678
  }
9196
9679
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VipCardStatusBadgeComponent, decorators: [{
9197
9680
  type: Component,
@@ -9299,5 +9782,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
9299
9782
  * Generated bundle index. Do not edit.
9300
9783
  */
9301
9784
 
9302
- export { ADMIN_API_ROUTES, ALERT_ICONS, AdminSelectComponent, AdminService, ApiService, AppAlertComponent, AppBadgeComponent, AppBreadcumbComponent, AppButtonComponent, AppLinkButtonComponent, AppModalComponent, AsyncSelectComponent, AuditInformationComponent, BASE_BUTTON_CLASSES, BASE_INPUT_CLASSES, BUTTON_SIZES_CLASSES, BUTTON_VARIANT_CLASSES, BaseModalService, 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, 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, PRICE_ZONES_API_ROUTES, PRODUCTS_API_ROUTES, PRODUCT_CATEGORIES_API_ROUTES, PRODUCT_TAGS_API_ROUTES, PRODUCT_TYPES_API_ROUTES, PaymentMethod, PerformanceBookingDataService, PerformanceCardComponent, PerformanceCardListComponent, PerformanceMultiSelectComponent, PerformanceSelectComponent, PerformanceService, PerformanceStatus, PerformanceStatusBadgeComponent, PerformanceStepperComponent, PerformanceTicketMapComponent, PerformanceTicketStatus, PerformanceTicketStatusBadgeComponent, PerformancesListEventsService, PriceZoneEventService, PriceZoneFormModalService, PriceZoneSelectComponent, PriceZoneService, ProductCategoryService, ProductMultiSelectComponent, ProductSelectComponent, ProductService, ProductTagService, ProductTypeService, RoomMapElementOrientation, RoomMapElementType, SHOWS_API_ROUTES, SHOW_TYPE_COLORS, STATE_API_ENDPOINTS, SeatSelectionEmptySummaryComponent, SeatSelectionSummaryComponent, SeatSelectionSummaryItemComponent, SelectedDiscountCardType, ShowCardComponent, ShowCardSkeletonComponent, ShowMultiSelectComponent, ShowSelectComponent, ShowService, ShowType, ShowTypeBadgeComponent, ShowsFilterComponent, StateSelectComponent, StatesService, TICKERA_COMPONENTS_CONFIG, TICKET_ELEMENT_TYPES, TICKET_MAP_GRID_SIZE, TICKET_MAP_LAST_TICKETS_LIMIT, TICKET_MAP_TITLE_HEIGHT, TICKET_STATUS_COLORS, TICKET_STATUS_FILLS, TICKET_STATUS_LABELS, TIcketMapProductSelectionComponent, TRANSACTION_STATUS_COLORS, TextExpandableComponent, TickeraTranslocoLoader, TicketMapPriceZonesComponent, TicketMapProductSelectionItemComponent, TicketMapTotalsComponent, TicketMapWidgetComponent, TicketMapWidgetHeaderComponent, TicketMapWrapperComponent, TicketMapZoomControlsComponent, TicketMapZoomService, TicketQrComponent, TicketQrModalComponent, TicketQrModalService, TicketQrService, TicketSelectionDetailsService, TicketSelectionDiscountService, TicketSelectionService, TicketSelectionTotalsService, ToastService, ToggleSwitchComponent, TransactionStatus, VENUES_API_ROUTES, VIP_CARDS_API_ROUTES, VipBalanceCardComponent, VipCardService, VipCardStatus, VipCardStatusBadgeComponent, VipRechargeModalComponent, VipTransactionType, VipTransactionsTableComponent, ZonePriceItemComponent, ZonePriceListComponent, authInterceptor, drawChairIcon$1 as drawChairIcon, drawHappyFace, drawRoundedRect, drawWheelchairIcon, findElementAtPosition, findTicketAtPosition, formatCitiesResponseToSelect, generateExitScene, generateHallwayScene, generateProductionAreaScene, generateSeatBlockScene, generateSeatBlockTicketScene, generateStageScene, generateStairScene, generateTableScene, generateTableTicketScene, generateUnavailableSpaceScene, generateZoneScene, getBrowserLanguage, getCustomerFullname, getItemTypeIcon, getOrderDiscount, getStoredLanguage, numberToLetter$1 as numberToLetter, parseJsonToFormDataAdvanced, processElementsToRenderData, provideTickeraComponents, resolveLanguage, setStoredLanguage, tintColor, transformImageToFile };
9785
+ export { ADMIN_API_ROUTES, ALERT_ICONS, AdminSelectComponent, AdminService, ApiService, AppAlertComponent, AppBadgeComponent, AppBreadcumbComponent, AppButtonComponent, AppLinkButtonComponent, AppModalComponent, AsyncSelectComponent, AuditInformationComponent, BASE_BUTTON_CLASSES, BASE_INPUT_CLASSES, BUTTON_SIZES_CLASSES, BUTTON_VARIANT_CLASSES, BaseModalService, 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, 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, PerformanceBookingDataService, PerformanceCardComponent, PerformanceCardListComponent, PerformanceMultiSelectComponent, PerformanceSelectComponent, PerformanceService, PerformanceStatus, PerformanceStatusBadgeComponent, PerformanceStepperComponent, PerformanceTicketMapComponent, PerformanceTicketStatus, PerformanceTicketStatusBadgeComponent, PerformancesListEventsService, PhoneInputComponent, PriceZoneEventService, PriceZoneFormModalService, PriceZoneSelectComponent, PriceZoneService, ProductCategoryService, ProductMultiSelectComponent, ProductSelectComponent, ProductService, ProductTagService, ProductTypeService, RoomMapElementOrientation, RoomMapElementType, SHOWS_API_ROUTES, SHOW_TYPE_COLORS, STATE_API_ENDPOINTS, SeatSelectionEmptySummaryComponent, SeatSelectionSummaryComponent, SeatSelectionSummaryItemComponent, SelectedDiscountCardType, ShowCardComponent, ShowCardSkeletonComponent, ShowMultiSelectComponent, ShowSelectComponent, ShowService, ShowType, ShowTypeBadgeComponent, ShowsFilterComponent, StateSelectComponent, StatesService, TICKERA_COMPONENTS_CONFIG, TICKET_ELEMENT_TYPES, TICKET_MAP_GRID_SIZE, TICKET_MAP_LAST_TICKETS_LIMIT, TICKET_MAP_TITLE_HEIGHT, TICKET_STATUS_COLORS, TICKET_STATUS_FILLS, TICKET_STATUS_LABELS, TIcketMapProductSelectionComponent, TRANSACTION_STATUS_COLORS, TextExpandableComponent, TickeraTranslocoLoader, TicketMapPriceZonesComponent, TicketMapProductSelectionItemComponent, TicketMapTotalsComponent, TicketMapWidgetComponent, TicketMapWidgetHeaderComponent, TicketMapWrapperComponent, TicketMapZoomControlsComponent, TicketMapZoomService, TicketQrComponent, TicketQrModalComponent, TicketQrModalService, TicketQrService, TicketSelectionDetailsService, TicketSelectionDiscountService, TicketSelectionService, TicketSelectionTotalsService, ToastService, ToggleSwitchComponent, TransactionStatus, VENUES_API_ROUTES, VIP_CARDS_API_ROUTES, VipBalanceCardComponent, VipCardService, VipCardStatus, VipCardStatusBadgeComponent, VipRechargeModalComponent, VipTransactionType, VipTransactionsTableComponent, ZonePriceItemComponent, ZonePriceListComponent, authInterceptor, drawChairIcon$1 as drawChairIcon, drawHappyFace, drawRoundedRect, drawWheelchairIcon, findElementAtPosition, findTicketAtPosition, formatCitiesResponseToSelect, generateExitScene, generateHallwayScene, generateProductionAreaScene, generateSeatBlockScene, generateSeatBlockTicketScene, generateStageScene, generateStairScene, generateTableScene, generateTableTicketScene, generateUnavailableSpaceScene, generateZoneScene, getBrowserLanguage, getCustomerFullname, getItemTypeIcon, getOrderDiscount, getStoredLanguage, numberToLetter$1 as numberToLetter, parseJsonToFormDataAdvanced, phoneCountryFlag, processElementsToRenderData, provideTickeraComponents, resolveLanguage, setStoredLanguage, tintColor, transformImageToFile };
9303
9786
  //# sourceMappingURL=tickera-angular-components.mjs.map