kupos-ui-components-lib 9.6.10 → 9.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/KuposUIComponent.d.ts +3 -0
  2. package/dist/components/ServiceItem/PeruServiceItemDesktop.d.ts +1 -1
  3. package/dist/components/ServiceItem/PeruServiceItemDesktop.js +133 -189
  4. package/dist/components/ServiceItem/ServiceItemDesktop.d.ts +1 -1
  5. package/dist/components/ServiceItem/ServiceItemDesktop.js +12 -3
  6. package/dist/components/ServiceItem/ServiceItemMobile.js +1 -1
  7. package/dist/components/ServiceItem/mobileTypes.d.ts +1 -0
  8. package/dist/components/ServiceItem/types.d.ts +12 -0
  9. package/dist/styles.css +165 -0
  10. package/dist/types.d.ts +1 -0
  11. package/dist/ui/ExpendedDropDown/ExpandedDropdown.d.ts +2 -1
  12. package/dist/ui/ExpendedDropDown/ExpandedDropdown.js +6 -4
  13. package/dist/ui/FeatureServiceUI/FeatureServiceUi.d.ts +7 -1
  14. package/dist/ui/FeatureServiceUI/FeatureServiceUi.js +55 -24
  15. package/dist/ui/mobileweb/ExpandedDropdownMobile.d.ts +2 -1
  16. package/dist/ui/mobileweb/ExpandedDropdownMobile.js +6 -3
  17. package/dist/utils/CommonService.js +11 -1
  18. package/package.json +1 -1
  19. package/src/KuposUIComponent.tsx +3 -0
  20. package/src/assets/images/anims/service_list/thunder_icon.json +1 -0
  21. package/src/components/ServiceItem/PeruServiceItemDesktop.tsx +255 -322
  22. package/src/components/ServiceItem/ServiceItemDesktop.tsx +38 -5
  23. package/src/components/ServiceItem/ServiceItemMobile.tsx +1 -0
  24. package/src/components/ServiceItem/mobileTypes.ts +1 -0
  25. package/src/components/ServiceItem/types.ts +13 -0
  26. package/src/types.ts +1 -0
  27. package/src/ui/ExpendedDropDown/ExpandedDropdown.tsx +12 -3
  28. package/src/ui/FeatureServiceUI/FeatureServiceUi.tsx +622 -0
  29. package/src/ui/mobileweb/ExpandedDropdownMobile.tsx +13 -2
  30. package/src/utils/CommonService.ts +13 -1
package/dist/styles.css CHANGED
@@ -63,6 +63,9 @@
63
63
  .right-\[0px\] {
64
64
  right: 0px;
65
65
  }
66
+ .right-\[18px\] {
67
+ right: 18px;
68
+ }
66
69
  .-bottom-\[9\%\] {
67
70
  bottom: calc(9% * -1);
68
71
  }
@@ -75,6 +78,9 @@
75
78
  .-bottom-\[36px\] {
76
79
  bottom: calc(36px * -1);
77
80
  }
81
+ .bottom-\[11px\] {
82
+ bottom: 11px;
83
+ }
78
84
  .bottom-\[35px\] {
79
85
  bottom: 35px;
80
86
  }
@@ -171,6 +177,9 @@
171
177
  .mx-auto {
172
178
  margin-inline: auto;
173
179
  }
180
+ .my-\[14px\] {
181
+ margin-block: 14px;
182
+ }
174
183
  .-mt-\[15px\] {
175
184
  margin-top: calc(15px * -1);
176
185
  }
@@ -189,12 +198,21 @@
189
198
  .mt-\[5px\] {
190
199
  margin-top: 5px;
191
200
  }
201
+ .mt-\[6px\] {
202
+ margin-top: 6px;
203
+ }
204
+ .mt-\[8px\] {
205
+ margin-top: 8px;
206
+ }
192
207
  .mt-\[10px\] {
193
208
  margin-top: 10px;
194
209
  }
195
210
  .mt-\[13px\] {
196
211
  margin-top: 13px;
197
212
  }
213
+ .mt-\[14px\] {
214
+ margin-top: 14px;
215
+ }
198
216
  .mt-\[15px\] {
199
217
  margin-top: 15px;
200
218
  }
@@ -279,6 +297,9 @@
279
297
  .ml-\[10px\] {
280
298
  margin-left: 10px;
281
299
  }
300
+ .ml-\[12px\] {
301
+ margin-left: 12px;
302
+ }
282
303
  .ml-\[50px\] {
283
304
  margin-left: 50px;
284
305
  }
@@ -336,6 +357,9 @@
336
357
  .h-\[30px\] {
337
358
  height: 30px;
338
359
  }
360
+ .h-\[34px\] {
361
+ height: 34px;
362
+ }
339
363
  .h-\[100\%\] {
340
364
  height: 100%;
341
365
  }
@@ -372,6 +396,12 @@
372
396
  .w-\[20px\] {
373
397
  width: 20px;
374
398
  }
399
+ .w-\[30px\] {
400
+ width: 30px;
401
+ }
402
+ .w-\[34px\] {
403
+ width: 34px;
404
+ }
375
405
  .w-\[50\%\] {
376
406
  width: 50%;
377
407
  }
@@ -396,6 +426,12 @@
396
426
  .w-\[115px\] {
397
427
  width: 115px;
398
428
  }
429
+ .w-\[120px\] {
430
+ width: 120px;
431
+ }
432
+ .w-\[130px\] {
433
+ width: 130px;
434
+ }
399
435
  .w-\[150px\] {
400
436
  width: 150px;
401
437
  }
@@ -434,6 +470,12 @@
434
470
  .max-w-\[165px\] {
435
471
  max-width: 165px;
436
472
  }
473
+ .max-w-\[220px\] {
474
+ max-width: 220px;
475
+ }
476
+ .max-w-full {
477
+ max-width: 100%;
478
+ }
437
479
  .min-w-\[75px\] {
438
480
  min-width: 75px;
439
481
  }
@@ -464,6 +506,9 @@
464
506
  .cursor-default {
465
507
  cursor: default;
466
508
  }
509
+ .cursor-not-allowed {
510
+ cursor: not-allowed;
511
+ }
467
512
  .cursor-pointer {
468
513
  cursor: pointer;
469
514
  }
@@ -476,12 +521,21 @@
476
521
  .grid-cols-2 {
477
522
  grid-template-columns: repeat(2, minmax(0, 1fr));
478
523
  }
524
+ .grid-cols-3 {
525
+ grid-template-columns: repeat(3, minmax(0, 1fr));
526
+ }
527
+ .grid-cols-4 {
528
+ grid-template-columns: repeat(4, minmax(0, 1fr));
529
+ }
479
530
  .grid-cols-\[0\.8fr_auto_26\%_1fr\] {
480
531
  grid-template-columns: 0.8fr auto 26% 1fr;
481
532
  }
482
533
  .grid-cols-\[1\.5fr_1fr_auto\] {
483
534
  grid-template-columns: 1.5fr 1fr auto;
484
535
  }
536
+ .grid-cols-\[23\%_50\%_27\%\] {
537
+ grid-template-columns: 23% 50% 27%;
538
+ }
485
539
  .grid-cols-\[26px_auto_26\%_1fr\] {
486
540
  grid-template-columns: 26px auto 26% 1fr;
487
541
  }
@@ -509,6 +563,9 @@
509
563
  .items-start {
510
564
  align-items: flex-start;
511
565
  }
566
+ .items-stretch {
567
+ align-items: stretch;
568
+ }
512
569
  .justify-between {
513
570
  justify-content: space-between;
514
571
  }
@@ -551,6 +608,12 @@
551
608
  .gap-\[14px\] {
552
609
  gap: 14px;
553
610
  }
611
+ .gap-\[16px\] {
612
+ gap: 16px;
613
+ }
614
+ .gap-\[20px\] {
615
+ gap: 20px;
616
+ }
554
617
  .gap-x-\[2\%\] {
555
618
  -moz-column-gap: 2%;
556
619
  column-gap: 2%;
@@ -559,12 +622,20 @@
559
622
  -moz-column-gap: 8px;
560
623
  column-gap: 8px;
561
624
  }
625
+ .truncate {
626
+ overflow: hidden;
627
+ text-overflow: ellipsis;
628
+ white-space: nowrap;
629
+ }
562
630
  .overflow-hidden {
563
631
  overflow: hidden;
564
632
  }
565
633
  .overflow-y-hidden {
566
634
  overflow-y: hidden;
567
635
  }
636
+ .rounded-\[4px\] {
637
+ border-radius: 4px;
638
+ }
568
639
  .rounded-\[8px\] {
569
640
  border-radius: 8px;
570
641
  }
@@ -577,6 +648,9 @@
577
648
  .rounded-\[15px\] {
578
649
  border-radius: 15px;
579
650
  }
651
+ .rounded-\[16px\] {
652
+ border-radius: 16px;
653
+ }
580
654
  .rounded-\[18px\] {
581
655
  border-radius: 18px;
582
656
  }
@@ -620,6 +694,10 @@
620
694
  border-top-style: var(--tw-border-style);
621
695
  border-top-width: 8px;
622
696
  }
697
+ .border-r {
698
+ border-right-style: var(--tw-border-style);
699
+ border-right-width: 1px;
700
+ }
623
701
  .border-r-8 {
624
702
  border-right-style: var(--tw-border-style);
625
703
  border-right-width: 8px;
@@ -648,6 +726,10 @@
648
726
  border-bottom-style: var(--tw-border-style);
649
727
  border-bottom-width: 8px;
650
728
  }
729
+ .border-l {
730
+ border-left-style: var(--tw-border-style);
731
+ border-left-width: 1px;
732
+ }
651
733
  .border-l-8 {
652
734
  border-left-style: var(--tw-border-style);
653
735
  border-left-width: 8px;
@@ -664,6 +746,9 @@
664
746
  --tw-border-style: none;
665
747
  border-style: none;
666
748
  }
749
+ .border-\[\#363c48\] {
750
+ border-color: #363c48;
751
+ }
667
752
  .border-\[\#ccc\] {
668
753
  border-color: #ccc;
669
754
  }
@@ -682,9 +767,21 @@
682
767
  .border-l-transparent {
683
768
  border-left-color: transparent;
684
769
  }
770
+ .bg-\[\#0C1421\] {
771
+ background-color: #0C1421;
772
+ }
773
+ .bg-\[\#2d374d\] {
774
+ background-color: #2d374d;
775
+ }
776
+ .bg-\[\#222b3d\] {
777
+ background-color: #222b3d;
778
+ }
685
779
  .bg-\[\#E6E6E6\] {
686
780
  background-color: #E6E6E6;
687
781
  }
782
+ .bg-\[\#FF8F45\] {
783
+ background-color: #FF8F45;
784
+ }
688
785
  .bg-\[\#FFF2F2\] {
689
786
  background-color: #FFF2F2;
690
787
  }
@@ -725,6 +822,9 @@
725
822
  .p-\[10px_15px\] {
726
823
  padding: 10px 15px;
727
824
  }
825
+ .p-\[14px\] {
826
+ padding: 14px;
827
+ }
728
828
  .p-\[15px\] {
729
829
  padding: 15px;
730
830
  }
@@ -758,9 +858,18 @@
758
858
  .px-\[15px\] {
759
859
  padding-inline: 15px;
760
860
  }
861
+ .px-\[16px\] {
862
+ padding-inline: 16px;
863
+ }
761
864
  .px-\[20px\] {
762
865
  padding-inline: 20px;
763
866
  }
867
+ .px-\[22px\] {
868
+ padding-inline: 22px;
869
+ }
870
+ .py-\[2px\] {
871
+ padding-block: 2px;
872
+ }
764
873
  .py-\[4px\] {
765
874
  padding-block: 4px;
766
875
  }
@@ -785,6 +894,12 @@
785
894
  .pt-\[6px\] {
786
895
  padding-top: 6px;
787
896
  }
897
+ .pt-\[10px\] {
898
+ padding-top: 10px;
899
+ }
900
+ .pt-\[14px\] {
901
+ padding-top: 14px;
902
+ }
788
903
  .pt-\[20px\] {
789
904
  padding-top: 20px;
790
905
  }
@@ -800,6 +915,9 @@
800
915
  .pt-\[50px\] {
801
916
  padding-top: 50px;
802
917
  }
918
+ .pr-\[10px\] {
919
+ padding-right: 10px;
920
+ }
803
921
  .pr-\[15px\] {
804
922
  padding-right: 15px;
805
923
  }
@@ -809,6 +927,9 @@
809
927
  .pr-\[22px\] {
810
928
  padding-right: 22px;
811
929
  }
930
+ .pb-\[6px\] {
931
+ padding-bottom: 6px;
932
+ }
812
933
  .pb-\[7px\] {
813
934
  padding-bottom: 7px;
814
935
  }
@@ -827,6 +948,9 @@
827
948
  .pl-\[6px\] {
828
949
  padding-left: 6px;
829
950
  }
951
+ .pl-\[22px\] {
952
+ padding-left: 22px;
953
+ }
830
954
  .text-center {
831
955
  text-align: center;
832
956
  }
@@ -872,9 +996,21 @@
872
996
  .text-\[18px\] {
873
997
  font-size: 18px;
874
998
  }
999
+ .text-\[20px\] {
1000
+ font-size: 20px;
1001
+ }
875
1002
  .text-\[22px\] {
876
1003
  font-size: 22px;
877
1004
  }
1005
+ .text-\[25px\] {
1006
+ font-size: 25px;
1007
+ }
1008
+ .text-\[26px\] {
1009
+ font-size: 26px;
1010
+ }
1011
+ .text-\[28px\] {
1012
+ font-size: 28px;
1013
+ }
878
1014
  .text-\[42px\] {
879
1015
  font-size: 42px;
880
1016
  }
@@ -882,6 +1018,10 @@
882
1018
  --tw-leading: 1.3;
883
1019
  line-height: 1.3;
884
1020
  }
1021
+ .leading-\[14px\] {
1022
+ --tw-leading: 14px;
1023
+ line-height: 14px;
1024
+ }
885
1025
  .leading-\[20px\] {
886
1026
  --tw-leading: 20px;
887
1027
  line-height: 20px;
@@ -902,6 +1042,10 @@
902
1042
  --tw-leading: 1;
903
1043
  line-height: 1;
904
1044
  }
1045
+ .font-\[9px\] {
1046
+ --tw-font-weight: 9px;
1047
+ font-weight: 9px;
1048
+ }
905
1049
  .font-\[14px\] {
906
1050
  --tw-font-weight: 14px;
907
1051
  font-weight: 14px;
@@ -923,12 +1067,27 @@
923
1067
  .whitespace-nowrap {
924
1068
  white-space: nowrap;
925
1069
  }
1070
+ .text-\[\#4a4a4a\] {
1071
+ color: #4a4a4a;
1072
+ }
926
1073
  .text-\[\#9f9f9f\] {
927
1074
  color: #9f9f9f;
928
1075
  }
1076
+ .text-\[\#666\] {
1077
+ color: #666;
1078
+ }
1079
+ .text-\[\#171717\] {
1080
+ color: #171717;
1081
+ }
1082
+ .text-\[\#272727\] {
1083
+ color: #272727;
1084
+ }
929
1085
  .text-\[\#464647\] {
930
1086
  color: #464647;
931
1087
  }
1088
+ .text-\[\#FF8F45\] {
1089
+ color: #FF8F45;
1090
+ }
932
1091
  .text-\[\#c0c0c0\] {
933
1092
  color: #c0c0c0;
934
1093
  }
@@ -944,6 +1103,9 @@
944
1103
  .text-\[\#fff\] {
945
1104
  color: #fff;
946
1105
  }
1106
+ .text-\[red\] {
1107
+ color: red;
1108
+ }
947
1109
  .capitalize {
948
1110
  text-transform: capitalize;
949
1111
  }
@@ -963,6 +1125,9 @@
963
1125
  .opacity-0 {
964
1126
  opacity: 0%;
965
1127
  }
1128
+ .opacity-50 {
1129
+ opacity: 50%;
1130
+ }
966
1131
  .opacity-100 {
967
1132
  opacity: 100%;
968
1133
  }
package/dist/types.d.ts CHANGED
@@ -108,6 +108,7 @@ export interface ServiceItemProps {
108
108
  frazaIcon?: string;
109
109
  specialDeparture?: string;
110
110
  fireIcon?: string;
111
+ cancelTicketIcon?: string;
111
112
  [key: string]: string | Record<string, string | undefined> | undefined;
112
113
  };
113
114
  useLottieFor?: string[];
@@ -13,6 +13,7 @@ interface ExpandedDropdownProps {
13
13
  isSoldOut?: boolean;
14
14
  ladiesBookedSeats?: string;
15
15
  isDpEnabled?: boolean;
16
+ renderIcon?: any;
16
17
  }
17
- declare function ExpandedDropdown({ serviceItem, isPeru, translation, getAnimationIcon, isChangeTicket, isSoldOut, ladiesBookedSeats, isDpEnabled, }: ExpandedDropdownProps): React.ReactElement;
18
+ declare function ExpandedDropdown({ serviceItem, isPeru, translation, getAnimationIcon, isChangeTicket, isSoldOut, ladiesBookedSeats, isDpEnabled, renderIcon, }: ExpandedDropdownProps): React.ReactElement;
18
19
  export default ExpandedDropdown;
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import LottiePlayer from "../../assets/LottiePlayer";
3
- function ExpandedDropdown({ serviceItem, isPeru = false, translation = {}, getAnimationIcon, isChangeTicket = false, isSoldOut, ladiesBookedSeats, isDpEnabled, }) {
3
+ function ExpandedDropdown({ serviceItem, isPeru = false, translation = {}, getAnimationIcon, isChangeTicket = false, isSoldOut, ladiesBookedSeats, isDpEnabled, renderIcon, }) {
4
4
  const hasPetInfo = serviceItem.pet_seat_info &&
5
5
  Object.keys(serviceItem.pet_seat_info).length > 0;
6
6
  return (React.createElement("div", { className: "px-[15px] pt-[26px] pb-[14px] -mt-[16px] pt-[35px] relative -z-9", style: {
@@ -22,7 +22,9 @@ function ExpandedDropdown({ serviceItem, isPeru = false, translation = {}, getAn
22
22
  " horas antes"),
23
23
  " ",
24
24
  "de la salida del bus. El monto ser\u00E1 reembolsado a tu billetera kupospay."))) : (React.createElement("div", { className: "flex gap-[8px] text-[13.33px]" },
25
- React.createElement("span", { style: { marginTop: "2px" } }, "\u2022"),
25
+ React.createElement("span", { style: { marginTop: "2px" } },
26
+ " ",
27
+ React.createElement(LottiePlayer, { animationData: getAnimationIcon("flexibleIcon"), width: "20px", height: "20px" })),
26
28
  React.createElement("span", null,
27
29
  React.createElement("span", null,
28
30
  React.createElement("span", { className: "bold-text" }, "Pasaje flexible:"),
@@ -33,7 +35,7 @@ function ExpandedDropdown({ serviceItem, isPeru = false, translation = {}, getAn
33
35
  React.createElement("span", null, translation === null || translation === void 0 ? void 0 : translation.petFriendly)))),
34
36
  ladiesBookedSeats &&
35
37
  String(ladiesBookedSeats).trim() !== "" &&
36
- isDpEnabled === true && (React.createElement("div", { className: "flex gap-[6px]" },
38
+ isDpEnabled === true && (React.createElement("div", { className: "flex gap-[6px] items-center" },
37
39
  React.createElement("span", { style: { marginTop: "2px" } },
38
40
  " ",
39
41
  React.createElement(LottiePlayer, { animationData: getAnimationIcon("femaaleAnimation"), width: "20px", height: "20px" })),
@@ -41,7 +43,7 @@ function ExpandedDropdown({ serviceItem, isPeru = false, translation = {}, getAn
41
43
  React.createElement("span", { className: "bold-text" }, "Asientos para damas:"),
42
44
  " Esta empresa cuenta con asientos recomendados para mujeres."))),
43
45
  React.createElement("div", { className: "flex gap-[8px] text-[13.33px]" },
44
- React.createElement("span", { style: { marginTop: "2px" } }, "\u2022"),
46
+ React.createElement("span", null, renderIcon("cancelTicketIcon", "14px")),
45
47
  React.createElement("span", null,
46
48
  React.createElement("span", { className: "bold-text" }, "Pol\u00EDticas de anulaci\u00F3n:"),
47
49
  " Tu pasaje puede ser anulado de forma online",
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- declare const FeatureServiceUi: ({ serviceItem, showTopLabel, colors, isSoldOut, getAnimationIcon, cityOrigin, cityDestination, renderIcon, viewersConfig, }: {
2
+ declare const FeatureServiceUi: ({ serviceItem, showTopLabel, colors, isSoldOut, getAnimationIcon, cityOrigin, cityDestination, renderIcon, viewersConfig, isFeatureDropDownExpand, onToggleExpand, ticketQuantity, onIncreaseTicketQuantity, onDecreaseTicketQuantity, onBookButtonPress, }: {
3
3
  serviceItem: any;
4
4
  showTopLabel: any;
5
5
  colors: any;
@@ -9,5 +9,11 @@ declare const FeatureServiceUi: ({ serviceItem, showTopLabel, colors, isSoldOut,
9
9
  cityDestination: any;
10
10
  renderIcon: any;
11
11
  viewersConfig: any;
12
+ isFeatureDropDownExpand: any;
13
+ onToggleExpand: any;
14
+ ticketQuantity?: number;
15
+ onIncreaseTicketQuantity: any;
16
+ onDecreaseTicketQuantity: any;
17
+ onBookButtonPress: any;
12
18
  }) => React.JSX.Element;
13
19
  export default FeatureServiceUi;
@@ -77,11 +77,14 @@ const AssuranceIcon = ({ type }) => {
77
77
  React.createElement("path", { d: "M10 2.2 16.3 4v5c0 4-2.4 6.8-6.3 8.7C6.1 15.8 3.7 13 3.7 9V4L10 2.2Z", stroke: "currentColor", strokeWidth: "1.6", strokeLinejoin: "round" }),
78
78
  React.createElement("path", { d: "m6.9 9.7 2.1 2.1 4.3-4.4", stroke: "currentColor", strokeWidth: "1.7", strokeLinecap: "round", strokeLinejoin: "round" })));
79
79
  };
80
- const FeatureServiceUi = ({ serviceItem, showTopLabel, colors, isSoldOut, getAnimationIcon, cityOrigin, cityDestination, renderIcon, viewersConfig, }) => {
80
+ const FeatureServiceUi = ({ serviceItem, showTopLabel, colors, isSoldOut, getAnimationIcon, cityOrigin, cityDestination, renderIcon, viewersConfig, isFeatureDropDownExpand, onToggleExpand, ticketQuantity = 1, onIncreaseTicketQuantity, onDecreaseTicketQuantity, onBookButtonPress, }) => {
81
81
  var _a, _b, _c, _d, _e;
82
82
  const operators = ((_a = serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.operators) === null || _a === void 0 ? void 0 : _a.length) > 0
83
83
  ? serviceItem.operators
84
84
  : HARDCODED_OPERATORS;
85
+ const isItemExpanded = serviceItem.id === isFeatureDropDownExpand ||
86
+ isFeatureDropDownExpand === true;
87
+ const canDecreaseTicketQuantity = ticketQuantity > 1;
85
88
  return (React.createElement("div", {
86
89
  // ${
87
90
  // serviceItem.offer_text ? "mb-[55px]" : "mb-[10px]"
@@ -118,52 +121,51 @@ const FeatureServiceUi = ({ serviceItem, showTopLabel, colors, isSoldOut, getAni
118
121
  fontVariantNumeric: "tabular-nums",
119
122
  display: "inline-block",
120
123
  color: "#FF5C60",
124
+ minWidth: "40px",
121
125
  } })))),
122
126
  React.createElement("div", { id: `service-card-${serviceItem.id}`, className: "bg-[#0C1421] text-white mx-auto relative rounded-[14px] p-[14px] text-[13.33px]" },
123
- React.createElement("div", { className: "grid grid-cols-[1.3fr_2fr_1.2fr] gap-[16px] items-stretch" },
124
- React.createElement("div", { className: "flex flex-col justify-between gap-[20px] py-[2px] " },
127
+ React.createElement("div", { className: "grid grid-cols-[23%_50%_27%] items-stretch" },
128
+ React.createElement("div", { className: "flex flex-col justify-between gap-[20px] my-[14px] pr-[22px]" },
125
129
  React.createElement("div", { className: "flex flex-col gap-[8px]" },
126
130
  React.createElement("div", { className: "flex items-center gap-[8px]" },
127
131
  React.createElement("img", { src: (_b = serviceItem.icons) === null || _b === void 0 ? void 0 : _b.whiteOrigin, alt: "origin", className: `w-[14px] h-[14px] shrink-0 ${isSoldOut ? "grayscale" : ""}` }),
128
132
  React.createElement("span", { className: "text-[13px] bold-text" }, cityOrigin === null || cityOrigin === void 0 ? void 0 : cityOrigin.label.split(",")[0])),
129
133
  React.createElement("div", { className: "flex items-center gap-[8px]" },
130
- React.createElement("img", { src: (_c = serviceItem.icons) === null || _c === void 0 ? void 0 : _c.whiteDestination, alt: "destination", className: `w-[16px] h-[16px] shrink-0 ${isSoldOut ? "grayscale" : ""}`, style: { opacity: isSoldOut ? 0.5 : 1 } }),
134
+ React.createElement("img", { src: (_c = serviceItem.icons) === null || _c === void 0 ? void 0 : _c.whiteDestination, alt: "destination", className: `w-[14px] h-[14px] shrink-0 ${isSoldOut ? "grayscale" : ""}`, style: { opacity: isSoldOut ? 0.5 : 1 } }),
131
135
  React.createElement("span", { className: "text-[13px] bold-text" }, cityDestination === null || cityDestination === void 0 ? void 0 : cityDestination.label.split(",")[0]))),
132
136
  React.createElement("div", { className: "flex flex-col gap-[8px]" },
133
137
  React.createElement("div", { className: "text-[12px] bold-text whitespace-nowrap" }, "Entre 07:00 AM y 10:00 AM"),
134
138
  React.createElement("div", { className: "text-[11px] bold-text" }, "Viernes 23 de mayo")),
135
139
  React.createElement("div", { className: "flex flex-col items-start gap-[10px] text-[12px] " },
136
- React.createElement("div", { className: "flex items-center gap-[8px]" },
140
+ React.createElement("div", { className: "flex items-justify gap-[8px]" },
137
141
  React.createElement(AssuranceIcon, { type: "pending" }),
138
142
  React.createElement("span", { className: "text-[10px]", style: {
139
143
  lineHeight: 1.3,
140
144
  } }, "Empresa y hora a confirmar luego del pago.")),
141
- React.createElement("div", { className: "flex items-center gap-[8px]" },
145
+ React.createElement("div", { className: "flex items-justify gap-[8px]" },
142
146
  React.createElement(AssuranceIcon, { type: "secured" }),
143
147
  React.createElement("span", { className: "text-[10px]", style: {
144
148
  lineHeight: 1.3,
145
149
  } }, "Tu compra est\u00E1 100% asegurada.")))),
146
- React.createElement("div", { className: "px-[16px] flex flex-col items-center justify-between gap-[12px] py-[2px] border-r border-[#363c48] border-l border-[#363c48]" },
150
+ React.createElement("div", { className: "min-w-0 px-[22px] flex flex-col items-center justify-between gap-[16px] py-[2px] border-r border-[#363c48] border-l border-[#363c48]" },
147
151
  React.createElement("div", { className: "text-center" },
148
152
  React.createElement("div", { className: "bold-text text-[14px]" }, "3 operadores compitiendo por tu compra")),
149
- React.createElement("div", { className: "flex items-stretch justify-center gap-[8px] w-full mb-[16px]" }, operators.map((op, idx) => (React.createElement("div", { key: idx, className: "flex flex-col items-center justify-center gap-[8px] rounded-[8px]", style: {
150
- width: "140px",
153
+ React.createElement("div", { className: "grid w-full grid-cols-3 items-stretch gap-[14px] mb-[12px]" }, operators.map((op, idx) => (React.createElement("div", { key: idx, className: "flex min-w-0 flex-col items-center justify-center gap-[8px] rounded-[8px]", style: {
151
154
  // height: "80px",
152
155
  border: "1px solid #363c48",
153
156
  backgroundColor: "#1a202e",
154
- padding: "14px",
157
+ padding: "14px 10px",
155
158
  } },
156
- React.createElement("img", { src: serviceItem.operator_details[0], alt: op.name, className: `h-[24px] w-auto object-contain ${isSoldOut ? "grayscale" : ""}` }),
159
+ React.createElement("img", { src: serviceItem.operator_details[0], alt: op.name, className: `h-[24px] max-w-full object-contain ${isSoldOut ? "grayscale" : ""}` }),
157
160
  React.createElement("span", { className: "text-[11px] truncate max-w-full text-center" }, serviceItem.operator_details[2]),
158
- React.createElement("div", { className: "bg-[#FF8F45] text-white text-[12px] font-bold px-[16px] py-[4px] rounded-[4px] bold-text" },
161
+ React.createElement("div", { className: "bg-[#FF8F45] text-white text-[12px] font-bold px-[10px] py-[4px] rounded-[4px] bold-text whitespace-nowrap" },
159
162
  React.createElement("span", null, op === null || op === void 0 ? void 0 : op.time)),
160
163
  React.createElement("span", { className: "text-[10px] mt-[6px]" }, op === null || op === void 0 ? void 0 : op.seatsAvailable))))),
161
- React.createElement("div", { className: "flex items-center justify-center gap-[6px] text-[12px]", style: {
164
+ React.createElement("div", { className: "flex w-full items-center justify-center gap-[6px] text-[12px]", style: {
162
165
  border: "1px solid #363c48",
163
166
  backgroundColor: "#1a202e",
164
167
  padding: "8px 14px",
165
168
  borderRadius: "24px",
166
- width: "430px",
167
169
  } },
168
170
  React.createElement("img", { src: (_d = serviceItem.icons) === null || _d === void 0 ? void 0 : _d.userIcon, alt: "eye", style: { width: "16px", height: "16px" } }),
169
171
  React.createElement("span", null,
@@ -183,14 +185,38 @@ const FeatureServiceUi = ({ serviceItem, showTopLabel, colors, isSoldOut, getAni
183
185
  React.createElement("span", { className: "bold-text", ref: (node) => commonService.startComprandoCount(node, 4, 16), style: { fontVariantNumeric: "tabular-nums" } }),
184
186
  " ",
185
187
  "han comprado"))),
186
- React.createElement("div", { className: "flex flex-col justify-center gap-[12px] py-[2px] relative mb-[16px]" },
188
+ React.createElement("div", { className: "flex flex-col justify-center gap-[12px] py-[2px] pl-[22px] pr-[10px] relative mb-[16px]" },
187
189
  React.createElement("div", { className: "flex flex-col gap-[6px] ", style: {
188
190
  alignItems: "center",
189
191
  } },
190
192
  React.createElement("span", { className: "text-[#FF8F45] bold-text text-[26px] leading-tight" }, "60% OFF"),
191
- React.createElement("span", { className: "text-[#666] text-[14px] line-through" }, "$10.000"),
193
+ React.createElement("span", { className: "text-[13.33px] font-normal leading-[20px] text-[#9f9f9f] relative", style: { position: "relative" } },
194
+ "$10.000",
195
+ React.createElement("span", { style: {
196
+ position: "absolute",
197
+ left: "-2px",
198
+ top: "50%",
199
+ width: "calc(100% + 4px)",
200
+ height: "1px",
201
+ backgroundColor: "#FF5C60",
202
+ transform: "rotate(-10deg)",
203
+ transformOrigin: "center",
204
+ } })),
192
205
  React.createElement("span", { className: "text-white bold-text text-[28px] leading-none" }, "$4.000")),
193
- React.createElement("button", { className: "flex items-center gap-[6px] px-[20px] py-[10px] rounded-[12px] text-white bold-text text-[13px] mt-[4px] justify-center border-none cursor-pointer", style: {
206
+ React.createElement("div", { className: "mt-[4px] flex flex-col items-center gap-[8px]" },
207
+ React.createElement("span", { className: "text-[12px] text-white" }, "\u00BFCu\u00E1ntos pasajes quieres?"),
208
+ React.createElement("div", { className: "flex w-full items-center justify-between", style: {
209
+ border: "1px solid #363c48",
210
+ backgroundColor: "#1a202e",
211
+ padding: "6px 14px",
212
+ borderRadius: "14px",
213
+ } },
214
+ React.createElement("button", { type: "button", "aria-label": "Disminuir pasajes", disabled: !canDecreaseTicketQuantity, onClick: () => onDecreaseTicketQuantity === null || onDecreaseTicketQuantity === void 0 ? void 0 : onDecreaseTicketQuantity(serviceItem), className: `flex h-[34px] w-[34px] items-center justify-center rounded-full border-none text-[25px] leading-none text-white ${canDecreaseTicketQuantity
215
+ ? "cursor-pointer bg-[#2d374d]"
216
+ : "cursor-not-allowed bg-[#222b3d] opacity-50"}` }, "-"),
217
+ React.createElement("span", { className: "bold-text text-[20px] text-white" }, ticketQuantity),
218
+ React.createElement("button", { type: "button", "aria-label": "Aumentar pasajes", onClick: () => onIncreaseTicketQuantity === null || onIncreaseTicketQuantity === void 0 ? void 0 : onIncreaseTicketQuantity(serviceItem), className: "flex h-[34px] w-[34px] cursor-pointer items-center justify-center rounded-full border-none bg-[#2d374d] text-[25px] leading-none text-white" }, "+"))),
219
+ React.createElement("button", { type: "button", onClick: onBookButtonPress, className: "flex items-center gap-[6px] px-[20px] py-[10px] rounded-[16px] text-white bold-text text-[13px] mt-[4px] justify-center border-none cursor-pointer", style: {
194
220
  backgroundColor: "#FF5C60",
195
221
  } },
196
222
  React.createElement(LottiePlayer
@@ -199,17 +225,22 @@ const FeatureServiceUi = ({ serviceItem, showTopLabel, colors, isSoldOut, getAni
199
225
  // animationData={serviceItem.icons.flexibleAnim}
200
226
  animationData: getAnimationIcon("thunderAnimation"), width: "18px", height: "18px" }),
201
227
  React.createElement("span", { className: "whitespace-nowrap" }, "\u00A1Lo quiero!"))),
202
- React.createElement("div", { className: "absolute bottom-[11px] right-[18px]" },
228
+ React.createElement("div", { className: `absolute bottom-[11px] right-[18px] cursor-pointer transition-transform duration-300 ease-in-out ${isItemExpanded ? "rotate-180" : ""}`, onClick: onToggleExpand },
203
229
  React.createElement("img", { src: (_e = serviceItem.icons) === null || _e === void 0 ? void 0 : _e.downArrow, alt: "down arrow", style: {
204
230
  width: "14px",
205
231
  height: "8px",
206
232
  filter: "brightness(0) invert(1)",
207
233
  } })))),
208
- React.createElement("div", { className: "px-[16px] pt-[14px] pb-[6px] text-[13.33px]" },
209
- React.createElement("span", { className: "bold-text" }, "\u00BFC\u00F3mo funciona?"),
210
- React.createElement("div", { className: "mt-[14px] grid grid-cols-4 gap-[20px] px-[16px] " }, HOW_IT_WORKS_STEPS.map((step) => (React.createElement("div", { key: step.name, className: "flex flex-col items-center text-center text-[#272727]" },
211
- React.createElement(FeatureStepIcon, { icon: step.icon }),
212
- React.createElement("span", { className: "bold-text mt-[10px] text-[12px] leading-[14px]" }, step.name),
213
- React.createElement("span", { className: "mt-[2px] max-w-[220px] text-[12px] leading-[14px] text-[#4a4a4a]" }, step.text)))))))));
234
+ React.createElement("div", { className: "grid", style: {
235
+ gridTemplateRows: isItemExpanded ? "1fr" : "0fr",
236
+ opacity: isItemExpanded ? 1 : 0,
237
+ transition: "grid-template-rows 300ms ease-in-out, opacity 250ms ease-in-out",
238
+ } },
239
+ React.createElement("div", { className: `min-h-0 overflow-hidden px-[16px] text-[13.33px] ${isItemExpanded ? "pt-[14px] pb-[6px]" : "py-0"}`, style: { transition: "padding 300ms ease-in-out" } },
240
+ React.createElement("span", { className: "bold-text" }, "\u00BFC\u00F3mo funciona?"),
241
+ React.createElement("div", { className: "mt-[14px] grid grid-cols-4 gap-[20px] px-[16px] " }, HOW_IT_WORKS_STEPS.map((step) => (React.createElement("div", { key: step.name, className: "flex flex-col items-center text-center text-[#272727]" },
242
+ React.createElement(FeatureStepIcon, { icon: step.icon }),
243
+ React.createElement("span", { className: "bold-text mt-[10px] text-[12px] leading-[14px]" }, step.name),
244
+ React.createElement("span", { className: "mt-[2px] max-w-[220px] text-[12px] leading-[14px] text-[#4a4a4a]" }, step.text))))))))));
214
245
  };
215
246
  export default FeatureServiceUi;
@@ -15,6 +15,7 @@ interface ExpandedDropdownMobileProps {
15
15
  isDpEnabled?: boolean;
16
16
  femaleAnim?: any;
17
17
  flexibleAnim?: any;
18
+ renderIcon?: any;
18
19
  }
19
- declare function ExpandedDropdownMobile({ serviceItem, isPeru, petSeatInfo, petFriendlyAnim, isSoldOut, isChangeTicket, ladiesBookedSeats, isDpEnabled, femaleAnim, flexibleAnim, }: ExpandedDropdownMobileProps): React.ReactElement;
20
+ declare function ExpandedDropdownMobile({ serviceItem, isPeru, petSeatInfo, petFriendlyAnim, isSoldOut, isChangeTicket, ladiesBookedSeats, isDpEnabled, femaleAnim, flexibleAnim, renderIcon, }: ExpandedDropdownMobileProps): React.ReactElement;
20
21
  export default ExpandedDropdownMobile;