kupos-ui-components-lib 10.4.13 → 10.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/images/anims/service_list/60_percent_anim.json +1 -0
- package/dist/assets/images/filter/arrow-down.png +0 -0
- package/dist/assets/images/filter/rapido.svg +14 -0
- package/dist/components/FilterSortBar/FilterChip.d.ts +6 -2
- package/dist/components/FilterSortBar/FilterChip.js +10 -32
- package/dist/components/FilterSortBar/FilterSortBarMobile.d.ts +1 -1
- package/dist/components/FilterSortBar/FilterSortBarMobile.js +86 -38
- package/dist/components/FilterSortBar/FiltersMasterSheet.d.ts +3 -1
- package/dist/components/FilterSortBar/FiltersMasterSheet.js +28 -97
- package/dist/components/FilterSortBar/OptionCheckboxList.js +5 -16
- package/dist/components/FilterSortBar/PriceRangeSlider.js +17 -55
- package/dist/components/FilterSortBar/SheetFooter.js +3 -30
- package/dist/components/FilterSortBar/defaultIcons.js +9 -0
- package/dist/components/FilterSortBar/icons.d.ts +7 -0
- package/dist/components/FilterSortBar/icons.js +8 -1
- package/dist/components/FilterSortBar/index.d.ts +1 -1
- package/dist/components/FilterSortBar/types.d.ts +34 -0
- package/dist/components/PaymentOptions/PaymentOptionsDesktop.d.ts +4 -0
- package/dist/components/PaymentOptions/PaymentOptionsDesktop.js +5 -0
- package/dist/components/PaymentOptions/PaymentOptionsMobile.d.ts +4 -0
- package/dist/components/PaymentOptions/PaymentOptionsMobile.js +5 -0
- package/dist/components/PaymentOptions/ResponsivePaymentOptions.d.ts +3 -0
- package/dist/components/PaymentOptions/ResponsivePaymentOptions.js +10 -0
- package/dist/components/PaymentOptions/index.d.ts +5 -0
- package/dist/components/PaymentOptions/index.js +4 -0
- package/dist/components/PaymentOptions/mobileTypes.d.ts +0 -0
- package/dist/components/PaymentOptions/mobileTypes.js +0 -0
- package/dist/components/PaymentOptions/type.d.ts +4 -0
- package/dist/components/PaymentOptions/type.js +1 -0
- package/dist/components/PaymentSideBar/PaymentSideBarMobile.js +1 -1
- package/dist/components/ServiceItem/ExpandedDropdown.d.ts +19 -0
- package/dist/components/ServiceItem/ExpandedDropdown.js +28 -0
- package/dist/components/ServiceItem/ServiceItemDesktopPeru.d.ts +6 -0
- package/dist/components/ServiceItem/ServiceItemDesktopPeru.js +612 -0
- package/dist/index.d.ts +1 -1
- package/dist/styles.css +233 -0
- package/dist/ui/PaymentCardMobile/PaymentCardMobile.js +40 -51
- package/dist/ui/TopAmenities/PromoCountdown.d.ts +18 -0
- package/dist/ui/TopAmenities/PromoCountdown.js +55 -0
- package/package.json +2 -2
- package/src/assets/images/filter/arrow-down.png +0 -0
- package/src/assets/images/filter/rapido.svg +14 -0
- package/src/components/FilterSortBar/FilterChip.tsx +31 -35
- package/src/components/FilterSortBar/FilterSortBarMobile.tsx +122 -66
- package/src/components/FilterSortBar/FiltersMasterSheet.tsx +34 -118
- package/src/components/FilterSortBar/OptionCheckboxList.tsx +5 -16
- package/src/components/FilterSortBar/PriceRangeSlider.tsx +20 -61
- package/src/components/FilterSortBar/SheetFooter.tsx +4 -32
- package/src/components/FilterSortBar/defaultIcons.ts +11 -0
- package/src/components/FilterSortBar/icons.tsx +38 -2
- package/src/components/FilterSortBar/index.ts +2 -0
- package/src/components/FilterSortBar/types.ts +36 -0
- package/src/components/PaymentSideBar/PaymentSideBarMobile.tsx +4 -1
- package/src/index.ts +2 -0
- package/src/ui/PaymentCardMobile/PaymentCardMobile.tsx +136 -98
- package/src/components/FilterSortBar/SingleFilterSheet.tsx +0 -82
|
@@ -12,45 +12,17 @@ const SheetFooter = ({ onClear, onApply, colors }: SheetFooterProps) => {
|
|
|
12
12
|
const buttonTextColor = colors.buttonTextColor || colors.primaryTextColor;
|
|
13
13
|
|
|
14
14
|
return (
|
|
15
|
-
<div
|
|
16
|
-
style={{
|
|
17
|
-
display: "flex",
|
|
18
|
-
gap: 12,
|
|
19
|
-
paddingTop: 16,
|
|
20
|
-
marginBottom: 8,
|
|
21
|
-
}}
|
|
22
|
-
>
|
|
15
|
+
<div className="flex gap-[12px] pt-[16px] mb-[8px]">
|
|
23
16
|
<button
|
|
24
17
|
onClick={onClear}
|
|
25
|
-
|
|
26
|
-
flex: 1,
|
|
27
|
-
padding: "12px 16px",
|
|
28
|
-
borderRadius: 10,
|
|
29
|
-
border: "1px solid #E5E5E5",
|
|
30
|
-
background: "#fff",
|
|
31
|
-
color: "#464647",
|
|
32
|
-
fontSize: 14,
|
|
33
|
-
fontWeight: 600,
|
|
34
|
-
cursor: "pointer",
|
|
35
|
-
WebkitTapHighlightColor: "transparent",
|
|
36
|
-
}}
|
|
18
|
+
className="flex-1 px-[16px] py-[12px] rounded-[10px] border border-[#E5E5E5] bg-[#fff] text-[#464647] text-[14px] font-semibold cursor-pointer [-webkit-tap-highlight-color:transparent] font-['DMSans-Regular',sans-serif]"
|
|
37
19
|
>
|
|
38
20
|
Borrar filtro
|
|
39
21
|
</button>
|
|
40
22
|
<button
|
|
41
23
|
onClick={onApply}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
padding: "12px 16px",
|
|
45
|
-
borderRadius: 10,
|
|
46
|
-
border: "none",
|
|
47
|
-
background: buttonColor,
|
|
48
|
-
color: buttonTextColor,
|
|
49
|
-
fontSize: 14,
|
|
50
|
-
fontWeight: 600,
|
|
51
|
-
cursor: "pointer",
|
|
52
|
-
WebkitTapHighlightColor: "transparent",
|
|
53
|
-
}}
|
|
24
|
+
className="flex-1 px-[16px] py-[12px] rounded-[10px] border-none text-[14px] font-semibold cursor-pointer [-webkit-tap-highlight-color:transparent] font-['DMSans-Regular',sans-serif]"
|
|
25
|
+
style={{ background: buttonColor, color: buttonTextColor }}
|
|
54
26
|
>
|
|
55
27
|
Aplicar
|
|
56
28
|
</button>
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
import { FilterSortBarIcons } from "./types";
|
|
11
11
|
|
|
12
12
|
export const DEFAULT_ICONS: FilterSortBarIcons = {
|
|
13
|
+
// Sourced from src/assets/images/filter/arrow-down.png (re-exported without
|
|
14
|
+
// its stray XMP orientation metadata, which browsers don't honor for PNGs —
|
|
15
|
+
// using the file as-is would render sideways).
|
|
16
|
+
sortArrowIcon:
|
|
17
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAABDCAYAAADatIboAAADC0lEQVR4nNWaMWsUQRTHf741ixERIqIICopgY4qA2iimM42Q4gqvsxEE8WPYWKRJkc4qnYWNlUqaFJIuVfIFBOUaUQhETvQiA2/gMc7e3uZuc/d+sMUNdzvv/+b/ZuaYgclTAqvADtAHesBLYAEnLABvNPgjYAB8AJba6ExaGoEgYk4/nwIuAWe9CJgzgbeO4BzBOYJzBOcIzhGcIzhHcI7gHME5gnME5wjOEZwjOEdwjuAcwTmCcwTnCM4RnCM4R3CO4BzBOYJzBOcIzhGcIzhHcI7gHME5gnME55wG5oFrwHngB/AN+MXsUQAXgSvAH+BriDcIeAg8AW4Du8Bb4DPwl9mhBG4BXeAe8Bv4CGyjJ+oHeih9qIfSd3VkjsNV4J2+Lz4hMffHyPwisG4Oz8PzBdgMNXBDFQbOAA+A18Aj0z4tSuAm8EKzH8+g0cP0O8FCn4DHwAU9nD6ntgo++zlFOxXAdeA58FTjigQL7QFb6B2GTbXPwAzRgdppuaGdJmGhQjO/lomrr7bvxgskpXo+XND4br48MCJW9KUnIaAwwfcywW9r8PO5Kt9UEbbzkIH3DUZiHAGFFuyrJJlp5suqHy+ZqzKpnbb0HlDZkoBCM7+eCf7Q9G9r4T9KUxPpSPSNncoJCyg08xsV/YbgO6PaONppw6wPuUzMT1DAoukvzfxOTX/U2SmdBaKIqsJuIqAALhvbHGUKtnHwdiQWVUQvefmBFvZK5uWjCoi2WdNVtVHBjkrsxN6BqyvsUQWEgs3Zpq/f70zqomC6TuRqwhZ2nYDCBN+rsE1njL1YpYi4oaoSEb1aJyCOaG6qPFbBTsJOfTMSVQKWawp2R38/dJ4fl6pthy3sZ7pe2AD3tX09KdjBsO1BmyLiSBxm7LSrQdr2nrbntgf7o6ywbdopXezSbUhsy9lu+yRsU7ftiMt/GnTVY22zelK2GTYScRebZrjqibaZWuabFPawzM9E8FW72JyIWODdWQs+tVNudhroPN/07+nU7BRHot/kzwgzgrVTmP/j9qCV4P8B53h9Q9i84bIAAAAASUVORK5CYII=",
|
|
13
18
|
filterIcon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyLjM5NTggNy4wMDAyNkg1LjE4ODcxTTUuMTg4NzEgNy4wMDAyNkM1LjE4ODcxIDYuNjYyOTkgNS4wNTQxNSA2LjMzOTU0IDQuODE1NjYgNi4xMDEwNUM0LjU3NzE4IDUuODYyNTcgNC4yNTM3MyA1LjcyODU5IDMuOTE2NDYgNS43Mjg1OUMzLjU3OTE5IDUuNzI4NTkgMy4yNTU3NCA1Ljg2MjU3IDMuMDE3MjYgNi4xMDEwNUMyLjc3ODc3IDYuMzM5NTQgMi42NDQ3OSA2LjY2Mjk5IDIuNjQ0NzkgNy4wMDAyNk01LjE4ODcxIDcuMDAwMjZDNS4xODg3MSA3LjMzNzUyIDUuMDU0MTUgNy42NjA5OCA0LjgxNTY2IDcuODk5NDZDNC41NzcxOCA4LjEzNzk0IDQuMjUzNzMgOC4yNzE5MiAzLjkxNjQ2IDguMjcxOTJDMy41NzkxOSA4LjI3MTkyIDMuMjU1NzQgOC4xMzc5NCAzLjAxNzI2IDcuODk5NDZDMi43Nzg3NyA3LjY2MDk4IDIuNjQ0NzkgNy4zMzc1MiAyLjY0NDc5IDcuMDAwMjZNMi42NDQ3OSA3LjAwMDI2SDEuNjA0MTNNMTIuMzk1OCAxMC44NTQzSDkuMDQyNzlNOS4wNDI3OSAxMC44NTQzQzkuMDQyNzkgMTEuMTkxNiA4LjkwODQ5IDExLjUxNTUgOC42Njk5NSAxMS43NTRDOC40MzE0MiAxMS45OTI1IDguMTA3ODkgMTIuMTI2NiA3Ljc3MDU0IDEyLjEyNjZDNy40MzMyOCAxMi4xMjY2IDcuMTA5ODIgMTEuOTkyIDYuODcxMzQgMTEuNzUzNUM2LjYzMjg2IDExLjUxNSA2LjQ5ODg4IDExLjE5MTYgNi40OTg4OCAxMC44NTQzTTkuMDQyNzkgMTAuODU0M0M5LjA0Mjc5IDEwLjUxNyA4LjkwODQ5IDEwLjE5MzcgOC42Njk5NSA5Ljk1NTIyQzguNDMxNDIgOS43MTY2OCA4LjEwNzg5IDkuNTgyNjcgNy43NzA1NCA5LjU4MjY3QzcuNDMzMjggOS41ODI2NyA3LjEwOTgyIDkuNzE2NjUgNi44NzEzNCA5Ljk1NTE0QzYuNjMyODYgMTAuMTkzNiA2LjQ5ODg4IDEwLjUxNyA2LjQ5ODg4IDEwLjg1NDNNNi40OTg4OCAxMC44NTQzSDEuNjA0MTNNMTIuMzk1OCAzLjE0NjE3SDEwLjU4NDVNMTAuNTg0NSAzLjE0NjE3QzEwLjU4NDUgMi45NzkxOCAxMC41NTExIDIuODEzODEgMTAuNDg3MiAyLjY1OTUzQzEwLjQyMzMgMi41MDUyNCAxMC4zMjk2IDIuMzY1MDYgMTAuMjExNSAyLjI0Njk3QzEwLjA5MzQgMi4xMjg4OCA5Ljk1MzIyIDIuMDM1MjEgOS43OTg5NCAxLjk3MTMxQzkuNjQ0NjUgMS45MDc0IDkuNDc5MjkgMS44NzQ1MSA5LjMxMjI5IDEuODc0NTFDOC45NzUwMyAxLjg3NDUxIDguNjUxNTcgMi4wMDg0OSA4LjQxMzA5IDIuMjQ2OTdDOC4xNzQ2MSAyLjQ4NTQ1IDguMDQwNjMgMi44MDg5MSA4LjA0MDYzIDMuMTQ2MTdNMTAuNTg0NSAzLjE0NjE3QzEwLjU4NDUgMy4zMTMxNyAxMC41NTExIDMuNDc4NTMgMTAuNDg3MiAzLjYzMjgyQzEwLjQyMzMgMy43ODcxMSAxMC4zMjk2IDMuOTI3MjkgMTAuMjExNSA0LjA0NTM4QzEwLjA5MzQgNC4xNjM0NiA5Ljk1MzIyIDQuMjU3MTMgOS43OTg5NCA0LjMyMTA0QzkuNjQ0NjUgNC4zODQ5NSA5LjQ3OTI5IDQuNDE3ODQgOS4zMTIyOSA0LjQxNzg0QzguOTc1MDMgNC40MTc4NCA4LjY1MTU3IDQuMjgzODYgOC40MTMwOSA0LjA0NTM4QzguMTc0NjEgMy44MDY4OSA4LjA0MDYzIDMuNDgzNDQgOC4wNDA2MyAzLjE0NjE3TTguMDQwNjMgMy4xNDYxN0gxLjYwNDEzIiBzdHJva2U9IiM0NjQ2NDciIHN0cm9rZS13aWR0aD0iMC44NzUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo=",
|
|
14
19
|
searchIcon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUuNjg3NSAxMC4wNjI1QzguMTAzNzUgMTAuMDYyNSAxMC4wNjI1IDguMTAzNzUgMTAuMDYyNSA1LjY4NzVDMTAuMDYyNSAzLjI3MTI1IDguMTAzNzUgMS4zMTI1IDUuNjg3NSAxLjMxMjVDMy4yNzEyNSAxLjMxMjUgMS4zMTI1IDMuMjcxMjUgMS4zMTI1IDUuNjg3NUMxLjMxMjUgOC4xMDM3NSAzLjI3MTI1IDEwLjA2MjUgNS42ODc1IDEwLjA2MjVaIiBzdHJva2U9IiM0NjQ2NDciLz4KPHBhdGggZD0iTTguNzUgOC43NUwxMS4zNzUgMTEuMzc1IiBzdHJva2U9IiM0NjQ2NDciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K",
|
|
15
20
|
categoryIcons: {
|
|
@@ -26,4 +31,10 @@ export const DEFAULT_ICONS: FilterSortBarIcons = {
|
|
|
26
31
|
sunset: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI5MF8zOTIpIj4KPG1hc2sgaWQ9Im1hc2swXzI5MF8zOTIiIHN0eWxlPSJtYXNrLXR5cGU6bHVtaW5hbmNlIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTQiIGhlaWdodD0iMTQiPgo8cGF0aCBkPSJNMTQgMEgwVjE0SDE0VjBaIiBmaWxsPSJ3aGl0ZSIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfMjkwXzM5MikiPgo8cGF0aCBkPSJNMy41MzUyOCAxMi4xOTg5QzQuMjQxMSAxMi41MTk3IDUuMTM5NDQgMTIuNTE5NyA1Ljg0NTMgMTIuMTk4OUM2LjU1MTEzIDExLjg3ODEgNy40NDk0OCAxMS44NzgxIDguMTU1MjkgMTIuMTk4OUM4Ljg2MTEgMTIuNTE5NyA5Ljc1OTUgMTIuNTE5NyAxMC40NjUzIDEyLjE5ODlNNy4wMDAyMiAxLjc1VjIuOTE2NjdNMi4zMzM1OCA3LjU4MzMxSDEuMTY2OU0zLjY4MzQ4IDQuMjY2NTdMMi44NTg1MiAzLjQ0MTYxTTEwLjMxNjggNC4yNjY1N0wxMS4xNDE4IDMuNDQxNjFNMTIuODMzNiA3LjU4MzMxSDExLjY2N000LjA4MzU4IDcuNTgzMzFDNC4wODM1OCA1Ljk3MjUyIDUuMzg5NDEgNC42NjY2NyA3LjAwMDIyIDQuNjY2NjdDOC42MTEwNiA0LjY2NjY3IDkuOTE2OTYgNS45NzI1MiA5LjkxNjk2IDcuNTgzMzFNMS4yMjUzIDEwLjE1NzNDMS45MzExMyA5LjgzNjQ5IDIuODI5NDcgOS44MzY0OSAzLjUzNTMgMTAuMTU3M0M0LjI0MTEzIDEwLjQ3ODIgNS4xMzk0NyAxMC40NzgyIDUuODQ1MyAxMC4xNTczQzYuNTUxMTMgOS44MzY0OSA3LjQ0OTQ4IDkuODM2NDkgOC4xNTUyOSAxMC4xNTczQzguODYxMSAxMC40NzgyIDkuNzU5NSAxMC40NzgyIDEwLjQ2NTMgMTAuMTU3M0MxMS4xNzExIDkuODM2NDkgMTIuMDY5NSA5LjgzNjQ5IDEyLjc3NTMgMTAuMTU3MyIgc3Ryb2tlPSIjNDY0NjQ3IiBzdHJva2Utd2lkdGg9IjEuMDUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L2c+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjkwXzM5MiI+CjxyZWN0IHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K",
|
|
27
32
|
night: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyLjI1IDcuNDYwODFDMTIuMTU4MyA4LjQ1Mzc2IDExLjc4NTYgOS40MDAwNyAxMS4xNzU2IDEwLjE4OUMxMC41NjU3IDEwLjk3NzkgOS43NDM3MiAxMS41NzY4IDguODA1ODYgMTEuOTE1NUM3Ljg2NzkzIDEyLjI1NDMgNi44NTI5OSAxMi4zMTg5IDUuODc5NzEgMTIuMTAxOUM0LjkwNjQ0IDExLjg4NDkgNC4wMTUwOCAxMS4zOTUyIDMuMzA5OTcgMTAuNjlDMi42MDQ4NSA5Ljk4NDg5IDIuMTE1MTQgOS4wOTM1NiAxLjg5ODEyIDguMTIwMjhDMS42ODExIDcuMTQ3IDEuNzQ1NzYgNi4xMzIwNSAyLjA4NDUyIDUuMTk0MThDMi40MjMyOSA0LjI1NjI5IDMuMDIyMTYgMy40MzQzIDMuODExMDUgMi44MjQzNUM0LjU5OTk0IDIuMjE0NDIgNS41NDYyMiAxLjg0MTc3IDYuNTM5MTcgMS43NUM1Ljk1Nzg0IDIuNTM2NDkgNS42NzgwOSAzLjUwNTUxIDUuNzUwODEgNC40ODA4MkM1LjgyMzU1IDUuNDU2MTQgNi4yNDM5MiA2LjM3Mjk2IDYuOTM1NDggNy4wNjQ1NEM3LjYyNzA2IDcuNzU2MDcgOC41NDM4NSA4LjE3NjQ5IDkuNTE5MTYgOC4yNDkyMkMxMC40OTQ1IDguMzIxOTUgMTEuNDYzNSA4LjA0MjE2IDEyLjI1IDcuNDYwODFaIiBzdHJva2U9IiM0NjQ2NDciIHN0cm9rZS13aWR0aD0iMC45OTc1IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTExLjM3NSAyLjUwODUzQzExLjYzMjcgMi41MDg1MyAxMS44NDE3IDIuMjk5NiAxMS44NDE3IDIuMDQxODZDMTEuODQxNyAxLjc4NDEzIDExLjYzMjcgMS41NzUyIDExLjM3NSAxLjU3NTJDMTEuMTE3MiAxLjU3NTIgMTAuOTA4MyAxLjc4NDEzIDEwLjkwODMgMi4wNDE4NkMxMC45MDgzIDIuMjk5NiAxMS4xMTcyIDIuNTA4NTMgMTEuMzc1IDIuNTA4NTNaIiBmaWxsPSIjNDY0NjQ3Ii8+CjxwYXRoIGQ9Ik0xMi41NDE3IDQuMTQxODlDMTIuNzM1IDQuMTQxODkgMTIuODkxNyAzLjk4NTIgMTIuODkxNyAzLjc5MTg5QzEyLjg5MTcgMy41OTg1OSAxMi43MzUgMy40NDE4OSAxMi41NDE3IDMuNDQxODlDMTIuMzQ4NCAzLjQ0MTg5IDEyLjE5MTcgMy41OTg1OSAxMi4xOTE3IDMuNzkxODlDMTIuMTkxNyAzLjk4NTIgMTIuMzQ4NCA0LjE0MTg5IDEyLjU0MTcgNC4xNDE4OVoiIGZpbGw9IiM0NjQ2NDciLz4KPC9zdmc+Cg==",
|
|
28
33
|
},
|
|
34
|
+
sortIcons: {
|
|
35
|
+
// Rápido (duration sort) — the only sort chip with no existing category
|
|
36
|
+
// or time-of-day icon to reuse. Sourced from src/assets/images/filter/rapido.svg.
|
|
37
|
+
duration:
|
|
38
|
+
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTMiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMyAxMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcuMjY0NzEgMS40MTUyOEM5LjkyMDg0IDEuNDE1MzIgMTIuMDgyMSAzLjU3NjUzIDEyLjA4MjEgNi4yMzI2N0MxMi4wODIxIDguODg4NzggOS45MjA4MiAxMS4wNSA3LjI2NDcxIDExLjA1QzQuNjA4NTcgMTEuMDUgMi40NDczNSA4Ljg4ODggMi40NDczMyA2LjIzMjY3QzIuNDQ3MzMgMy41NzY1MSA0LjYwODU1IDEuNDE1MjggNy4yNjQ3MSAxLjQxNTI4Wk03LjI2NDcxIDEuOTg5NUM0LjkyMzYyIDEuOTg5NSAzLjAyMTU1IDMuODkxNTggMy4wMjE1NSA2LjIzMjY3QzMuMDIxNTcgOC41NzM3MyA0LjkyMzY0IDEwLjQ3NTggNy4yNjQ3MSAxMC40NzU4QzkuNjA1NzUgMTAuNDc1OCAxMS41MDc4IDguNTczNzEgMTEuNTA3OSA2LjIzMjY3QzExLjUwNzkgMy44OTE2IDkuNjA1NzcgMS45ODk1MyA3LjI2NDcxIDEuOTg5NVoiIGZpbGw9IiM0NjQ2NDciIHN0cm9rZT0iIzQ2NDY0NyIgc3Ryb2tlLXdpZHRoPSIwLjEiLz4KPHBhdGggZD0iTTcuMjY0MjUgMi41MTEyM0M5LjMxNzc5IDIuNTExMzQgMTAuOTg1OSA0LjE3OTM1IDEwLjk4NTkgNi4yMzI5MUMxMC45ODU4IDguMjg2MzggOS4zMTc3MiA5Ljk1NDQ4IDcuMjY0MjUgOS45NTQ1OUM1LjIxNDQ5IDkuOTU0NTkgMy41NDI2OCA4LjI4NjQ4IDMuNTQyNTcgNi4yMzI5MUMzLjU0MjU3IDQuMTc5MjggNS4yMTA2MyAyLjUxMTIzIDcuMjY0MjUgMi41MTEyM1pNNy4yNjQyNSAzLjA4NTQ1QzUuNTI5NDYgMy4wODU0NSA0LjExNjc5IDQuNDk4MTIgNC4xMTY3OSA2LjIzMjkxQzQuMTE2OSA3Ljk2NzYxIDUuNTI5NTMgOS4zODAzNyA3LjI2NDI1IDkuMzgwMzdDOC45OTg4OCA5LjM4MDI2IDEwLjQxMTYgNy45Njc1NCAxMC40MTE3IDYuMjMyOTFDMTAuNDExNyA0LjQ5ODE5IDguOTk4OTUgMy4wODU1NiA3LjI2NDI1IDMuMDg1NDVaIiBmaWxsPSIjNDY0NjQ3IiBzdHJva2U9IiM0NjQ2NDciIHN0cm9rZS13aWR0aD0iMC4xIi8+CjxwYXRoIGQ9Ik03LjI2NDQzIDUuNTY1OTJDNi44OTUzOCA1LjU2NTkyIDYuNTk3OSA1Ljg2MzQxIDYuNTk3OSA2LjIzMjQ2QzYuNTk3OSA2LjYwMTUxIDYuODk1MzggNi44OTkwMSA3LjI2NDQzIDYuODk5MDFDNy42MzM0OSA2Ljg5OTAxIDcuOTMwOTkgNi42MDE1MSA3LjkzMDk5IDYuMjMyNDZDNy45MzA5OSA1Ljg2MzQxIDcuNjMzNDkgNS41NjU5MiA3LjI2NDQzIDUuNTY1OTJaIiBmaWxsPSIjNDY0NjQ3Ii8+CjxwYXRoIGQ9Ik02LjUzMzkxIDEuMTI1OThMNi43NTIzMyAxLjI3Mjg0QzYuNzE0NjcgMS4xODI0NiA2LjYzMTgyIDEuMTI1OTggNi41MzM5MSAxLjEyNTk4WiIgZmlsbD0iIzQ2NDY0NyIvPgo8cGF0aCBkPSJNNy45OTQ0OSAxLjEyNTk4SDcuMjI2MjdMNi44Nzk4MiAxLjM1OTQ2SDYuNTMzMzRINi4yOTk4N1YxLjc1MTFDNi4yOTk4NyAxLjg3OTE0IDYuNDA1MzEgMS45ODQ1OCA2LjUzMzM0IDEuOTg0NThDNi41NjcyNCAxLjk4NDU4IDYuNTk3MzYgMS45NzcwNSA2LjYyNzQ5IDEuOTY1NzVDNi42Njg5MSAxLjk1ODIyIDYuODIzMzMgMS45NDMxNiA3LjI3ODk5IDEuOTQzMTZDNy43MDgzIDEuOTQzMTYgNy44NTUxNSAxLjk1ODIyIDcuODk2NTcgMS45NjU3NUM4LjAxMzMxIDIuMDE4NDcgOC4xNTI2NSAxLjk2NTc1IDguMjA5MTQgMS44NDkwMUM4LjIyNDIgMS44MTg4OSA4LjIzMTczIDEuNzg1IDguMjMxNzMgMS43NTExVjEuMzU5NDZDOC4yMzE3MyAxLjIzMTQyIDguMTI2MjkgMS4xMjU5OCA3Ljk5ODI1IDEuMTI1OThINy45OTQ0OVpNNi43NDQyMyAxLjg1Mjc4QzYuNzQ0MjMgMS44NTI3OCA2Ljc1OTMxIDEuODIyNjUgNi43NjMwOCAxLjgwMzgzQzYuNzU5MzEgMS44MTg4OSA2Ljc1MTc2IDEuODM3NzEgNi43NDQyMyAxLjg1Mjc4Wk02Ljc2MzA4IDEuODAzODNDNi43NjMwOCAxLjgwMzgzIDYuNzYzMDYgMS43ODg3NiA2Ljc2NjgyIDEuNzc3NDZDNi43NjY4MiAxLjc4NDk5IDYuNzY2ODQgMS43OTYyOSA2Ljc2MzA4IDEuODAzODNaTTcuNzY4NTQgMS44MDM4M0M3Ljc2ODU0IDEuODAzODMgNy43NzYwNyAxLjgzNzcxIDcuNzgzNiAxLjg1Mjc4QzcuNzc2MDcgMS44Mzc3MSA3Ljc3MjMxIDEuODIyNjUgNy43Njg1NCAxLjgwMzgzWk03Ljc2NDc4IDEuNzc3NDZDNy43NjQ3OCAxLjc3NzQ2IDcuNzY0NzggMS43OTI1MiA3Ljc2ODU0IDEuODAwMDZDNy43Njg1NCAxLjc5MjUyIDcuNzY4NTQgMS43ODQ5OSA3Ljc2NDc4IDEuNzc3NDZaIiBmaWxsPSIjNDY0NjQ3Ii8+CjxwYXRoIGQ9Ik03Ljk5NDM5IDEuNDY4NjdINi41MzMyNEM2LjEyNjU0IDEuNDY4NjcgNS43OTg5MSAxLjEzMzUxIDUuODAyNjcgMC43MzA1N0M1LjgwMjY3IDAuMzMxMzkzIDYuMTM0MDcgMC4wMDM3NjU4MiA2LjUzMzI0IDBINy45OTgxNUM4LjE5Mzk4IDAgOC4zNzg1IDAuMDc5MDgyOSA4LjUxNzg0IDAuMjE4NDE4QzguNjU3MTcgMC4zNTc3NTQgOC43Mjg3MiAwLjU0MjI4MSA4LjcyODcyIDAuNzM4MTAzQzguNzI4NzIgMS4xMzcyOCA4LjM5NzMzIDEuNDY0OTEgNy45OTgxNSAxLjQ2ODY3SDcuOTk0MzlaTTcuOTk0MzkgMC40NzQ0OTdINi41MzMyNEM2LjM5MzkxIDAuNDc0NDk3IDYuMjc3MTcgMC41OTEyMzUgNi4yNzcxNyAwLjczMDU3QzYuMjc3MTcgMC44NzM2NzEgNi4zOTAxNCAwLjk5MDQxMyA2LjUzMzI0IDAuOTkwNDEzSDcuOTkwNjJDOC4xMjk5NSAwLjk5MDQxMyA4LjI0NjY5IDAuODczNjc1IDguMjQ2NjkgMC43MzQzNEM4LjI0NjY5IDAuNjY2NTU1IDguMjIwMzUgMC41OTg3NjggOC4xNzEzOSAwLjU0OTgxMkM4LjEyMjQzIDAuNTAwODU3IDguMDU4NDIgMC40NzQ0OTMgNy45ODY4NyAwLjQ3MDcyOEw3Ljk5NDM5IDAuNDc0NDk3WiIgZmlsbD0iIzQ2NDY0NyIvPgo8cGF0aCBkPSJNMy42Mzc5NSAzLjcyNDQ5SDEuODY0MjZDMS43MzI0NiAzLjcyNDQ5IDEuNjI3MDEgMy42MTkwNSAxLjYyNzAxIDMuNDg3MjVDMS42MjcwMSAzLjM1NTQ0IDEuNzMyNDYgMy4yNSAxLjg2NDI2IDMuMjVIMy42Mzc5NUMzLjc2OTc1IDMuMjUgMy44NzUyIDMuMzU1NDQgMy44NzUyIDMuNDg3MjVDMy44NzUyIDMuNjE5MDUgMy43Njk3NSAzLjcyNDQ5IDMuNjM3OTUgMy43MjQ0OVoiIGZpbGw9IiM0NjQ2NDciLz4KPHBhdGggZD0iTTIuNjc3MzYgNi41NDg3SDEuNDUzNDdDMS4zMjE2NiA2LjU0ODcgMS4yMTYyMiA2LjQ0MzI2IDEuMjE2MjIgNi4zMTE0NkMxLjIxNjIyIDYuMTc5NjUgMS4zMjE2NiA2LjA3NDIyIDEuNDUzNDcgNi4wNzQyMkgyLjY3NzM2QzIuODA5MTYgNi4wNzQyMiAyLjkxNDYxIDYuMTc5NjUgMi45MTQ2MSA2LjMxMTQ2QzIuOTE0NjEgNi40NDMyNiAyLjgwOTE2IDYuNTQ4NyAyLjY3NzM2IDYuNTQ4N1oiIGZpbGw9IiM0NjQ2NDciLz4KPHBhdGggZD0iTTIuODYxNjUgNy45MzQ5M0gxLjIwODQ3QzEuMDc2NjcgNy45MzQ5MyAwLjk3MTIyMiA3LjgyOTUgMC45NzEyMjIgNy42OTc3QzAuOTcxMjIyIDcuNTY1ODkgMS4wNzY2NyA3LjQ2MDQ1IDEuMjA4NDcgNy40NjA0NUgyLjg2MTY1QzIuOTkzNDUgNy40NjA0NSAzLjA5ODkgNy41NjU4OSAzLjA5ODkgNy42OTc3QzMuMDk4OSA3LjgyOTUgMi45OTM0NSA3LjkzNDkzIDIuODYxNjUgNy45MzQ5M1oiIGZpbGw9IiM0NjQ2NDciLz4KPHBhdGggZD0iTTIuOTE0NzQgNS4xMzYzNkgwLjIzNzI0OUMwLjEwNTQ0NSA1LjEzNjM2IDAgNS4wMzA5MSAwIDQuODk5MTFDMCA0Ljc2NzMgMC4xMDU0NDUgNC42NjE4NyAwLjIzNzI0OSA0LjY2MTg3SDIuOTE0NzRDMy4wNDY1NSA0LjY2MTg3IDMuMTUxOTkgNC43NjczIDMuMTUxOTkgNC44OTkxMUMzLjE1MTk5IDUuMDMwOTEgMy4wNDY1NSA1LjEzNjM2IDIuOTE0NzQgNS4xMzYzNloiIGZpbGw9IiM0NjQ2NDciLz4KPHBhdGggZD0iTTcuMDkxMjEgNi4yMTcyOUM3LjAzMDk2IDYuMjE3MjkgNi45NzA3MSA2LjE5NDY5IDYuOTI1NTIgNi4xNDk1TDUuOTc2NTIgNS4yMTU1OEM1Ljg4MjM4IDUuMTI1MiA1Ljg4MjM4IDQuOTc0NTcgNS45NzY1MiA0Ljg4MDQyQzYuMDY2OSA0Ljc4NjI4IDYuMjE3NTQgNC43ODYyOCA2LjMxMTY5IDQuODgwNDJMNy4yNjA2NiA1LjgxNDM1QzcuMzU0OCA1LjkwNDczIDcuMzU0OCA2LjA1NTM2IDcuMjYwNjYgNi4xNDk1QzcuMjE1NDcgNi4xOTg0NiA3LjE1MTQ3IDYuMjIxMDUgNy4wOTEyMSA2LjIyMTA1VjYuMjE3MjlaIiBmaWxsPSIjNDY0NjQ3Ii8+CjxwYXRoIGQ9Ik03LjUxMzA0IDYuMjgxMzNDNy40NTI3OSA2LjI4MTMzIDcuMzkyNTMgNi4yNTg3NCA3LjM0NzM0IDYuMjEzNTVDNy4yNTMyIDYuMTE5NCA3LjI1MzIgNS45NzI1MyA3LjM0NzM0IDUuODc4MzhMOC45NTkxIDQuMjU5MDlDOS4wNTMyNSA0LjE2NDk0IDkuMjAwMTIgNC4xNjQ5NCA5LjI5NDI3IDQuMjU5MDlDOS4zODg0MSA0LjM1MzIzIDkuMzg4NDEgNC41MDAxIDkuMjk0MjcgNC41OTQyNEw3LjY4MjQ4IDYuMjEzNTVDNy42MzcyOSA2LjI1ODc0IDcuNTc3MDYgNi4yODUxIDcuNTEzMDQgNi4yODUxVjYuMjgxMzNaIiBmaWxsPSIjNDY0NjQ3Ii8+Cjwvc3ZnPgo=",
|
|
39
|
+
},
|
|
29
40
|
};
|
|
@@ -40,7 +40,7 @@ export const ChevronDownIcon = ({
|
|
|
40
40
|
width={size}
|
|
41
41
|
height={size * 0.6}
|
|
42
42
|
alt=""
|
|
43
|
-
|
|
43
|
+
className={`flex-shrink-0 transition-transform duration-200 ease-in-out ${open ? "rotate-180" : "rotate-0"}`}
|
|
44
44
|
/>
|
|
45
45
|
) : (
|
|
46
46
|
<svg
|
|
@@ -49,12 +49,48 @@ export const ChevronDownIcon = ({
|
|
|
49
49
|
viewBox="0 0 10 6"
|
|
50
50
|
fill="none"
|
|
51
51
|
xmlns="http://www.w3.org/2000/svg"
|
|
52
|
-
|
|
52
|
+
className={`flex-shrink-0 transition-transform duration-200 ease-in-out ${open ? "rotate-180" : "rotate-0"}`}
|
|
53
53
|
>
|
|
54
54
|
<path d="M1 1L5 5L9 1" stroke={color} strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round" />
|
|
55
55
|
</svg>
|
|
56
56
|
);
|
|
57
57
|
|
|
58
|
+
export const SortArrowIcon = ({
|
|
59
|
+
size = 9,
|
|
60
|
+
color = "#464647",
|
|
61
|
+
direction = "desc",
|
|
62
|
+
src,
|
|
63
|
+
/** True once the chip is highlighted (colored background) — flips the raster arrow to white via CSS filter, since unlike the SVG fallback it can't take `color` directly. */
|
|
64
|
+
active,
|
|
65
|
+
}: {
|
|
66
|
+
size?: number;
|
|
67
|
+
color?: string;
|
|
68
|
+
direction?: "asc" | "desc";
|
|
69
|
+
src?: string;
|
|
70
|
+
active?: boolean;
|
|
71
|
+
}) =>
|
|
72
|
+
src ? (
|
|
73
|
+
// arrow-down.png is taller than wide (48x67) — keep its aspect ratio
|
|
74
|
+
// instead of forcing a square box, which would squash it.
|
|
75
|
+
<img
|
|
76
|
+
src={src}
|
|
77
|
+
width={size}
|
|
78
|
+
height={Math.round(size * 1.4)}
|
|
79
|
+
alt=""
|
|
80
|
+
className={`flex-shrink-0 ${direction === "asc" ? "rotate-180" : "rotate-0"} ${active ? "brightness-0 invert" : ""}`}
|
|
81
|
+
/>
|
|
82
|
+
) : (
|
|
83
|
+
<svg width={size} height={size} viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" className="flex-shrink-0">
|
|
84
|
+
<path
|
|
85
|
+
d={direction === "asc" ? "M2 6.2L5 3.2L8 6.2" : "M2 3.8L5 6.8L8 3.8"}
|
|
86
|
+
stroke={color}
|
|
87
|
+
strokeWidth="1.4"
|
|
88
|
+
strokeLinecap="round"
|
|
89
|
+
strokeLinejoin="round"
|
|
90
|
+
/>
|
|
91
|
+
</svg>
|
|
92
|
+
);
|
|
93
|
+
|
|
58
94
|
export const SearchIcon = ({
|
|
59
95
|
size = 16,
|
|
60
96
|
color = "#9B9B9B",
|
|
@@ -16,6 +16,10 @@ export interface FilterOptionItem {
|
|
|
16
16
|
selected: boolean;
|
|
17
17
|
stars?: number;
|
|
18
18
|
icon?: TimeOfDayVariant;
|
|
19
|
+
/** Excludes this option from the category's inline top-bar chips (still shown/selectable inside the Filtros sheet) — for an option whose concept already has its own standalone chip elsewhere, e.g. an inline time bucket duplicating a "Después de las 6 PM" sort chip. */
|
|
20
|
+
excludeFromInline?: boolean;
|
|
21
|
+
/** True when `selected` is only a display mirror of an active sort chip (e.g. a cohort sort chip's matching checkbox), not a real filter selection. Renders checked like any selected option, but is excluded from active-filter counts — the sort chip itself already accounts for that selection, so counting both would double it. */
|
|
22
|
+
checkedViaSort?: boolean;
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
export interface PriceRangeValue {
|
|
@@ -34,6 +38,8 @@ export interface FilterCategory {
|
|
|
34
38
|
options?: FilterOptionItem[];
|
|
35
39
|
priceRange?: PriceRangeValue;
|
|
36
40
|
inlineOptions?: boolean;
|
|
41
|
+
/** When true, this category gets no standalone top-bar chip — it's still a tab inside the Filtros master sheet, just reachable only via the "Filtros" button. */
|
|
42
|
+
hideChip?: boolean;
|
|
37
43
|
}
|
|
38
44
|
|
|
39
45
|
export const DEFAULT_CATEGORY_LABELS: Record<FilterCategoryKey, string> = {
|
|
@@ -45,6 +51,29 @@ export const DEFAULT_CATEGORY_LABELS: Record<FilterCategoryKey, string> = {
|
|
|
45
51
|
seatType: "Tipo de asiento",
|
|
46
52
|
};
|
|
47
53
|
|
|
54
|
+
export type SortDirection = "asc" | "desc";
|
|
55
|
+
|
|
56
|
+
export interface SortOption {
|
|
57
|
+
key: string;
|
|
58
|
+
label: string;
|
|
59
|
+
/**
|
|
60
|
+
* Present only on directional (base) sorts — e.g. Horario, Precio, Rápido.
|
|
61
|
+
* These are mutually exclusive: activating one deactivates the others, and
|
|
62
|
+
* tapping the already-active one flips its direction instead. Always
|
|
63
|
+
* renders a directional arrow.
|
|
64
|
+
*/
|
|
65
|
+
direction?: SortDirection;
|
|
66
|
+
/** Whether this sort is currently applied. */
|
|
67
|
+
active: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Result count for this cohort (e.g. buses departing after 6 PM), shown as
|
|
70
|
+
* a small badge. Only meaningful on non-directional (cohort) sorts, which
|
|
71
|
+
* toggle on/off independently and combine with whichever directional sort
|
|
72
|
+
* is active — e.g. "Horario" desc + "Después de las 6 PM" together.
|
|
73
|
+
*/
|
|
74
|
+
count?: number;
|
|
75
|
+
}
|
|
76
|
+
|
|
48
77
|
export interface FilterSortBarColors {
|
|
49
78
|
primaryColor?: string;
|
|
50
79
|
primaryTextColor?: string;
|
|
@@ -59,6 +88,8 @@ export interface FilterSortBarColors {
|
|
|
59
88
|
export interface FilterSortBarIcons {
|
|
60
89
|
closeIcon?: string;
|
|
61
90
|
chevronDownIcon?: string;
|
|
91
|
+
/** Directional arrow shown on active base sort chips (Horario/Empresas/Precio/Rápido). Drawn pointing down; rotated 180° for ascending. */
|
|
92
|
+
sortArrowIcon?: string;
|
|
62
93
|
searchIcon?: string;
|
|
63
94
|
filterIcon?: string;
|
|
64
95
|
starFilledIcon?: string;
|
|
@@ -67,12 +98,17 @@ export interface FilterSortBarIcons {
|
|
|
67
98
|
categoryIcons?: Partial<Record<FilterCategoryKey, string>>;
|
|
68
99
|
categoryIconsActive?: Partial<Record<FilterCategoryKey, string>>;
|
|
69
100
|
timeOfDayIcons?: Partial<Record<TimeOfDayVariant, string>>;
|
|
101
|
+
/** Icons for sort chips whose key doesn't already map to a category/time-of-day icon (e.g. "duration" for a Rápido chip). Keyed by SortOption.key. */
|
|
102
|
+
sortIcons?: Partial<Record<string, string>>;
|
|
70
103
|
}
|
|
71
104
|
|
|
72
105
|
export interface FilterSortBarMobileProps {
|
|
73
106
|
categories: FilterCategory[];
|
|
74
107
|
onApply: (categoryKey: FilterCategoryKey | "all", updatedCategories: FilterCategory[]) => void;
|
|
75
108
|
onClearFilter: (categoryKey: FilterCategoryKey | "all") => void;
|
|
109
|
+
/** Sort chips rendered before the filter category chips — see SortOption. */
|
|
110
|
+
sortOptions?: SortOption[];
|
|
111
|
+
onSortChange?: (updatedSortOptions: SortOption[]) => void;
|
|
76
112
|
currencySign?: string;
|
|
77
113
|
colors?: FilterSortBarColors;
|
|
78
114
|
icons?: FilterSortBarIcons;
|
|
@@ -710,7 +710,10 @@ const PaymentSideBarMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
710
710
|
style={{ color: "var(--secondary-color)" }}
|
|
711
711
|
>{`${creditosLabel}(${virtualLimit}%)`}</span>
|
|
712
712
|
}
|
|
713
|
-
amount={CommonService.currency(
|
|
713
|
+
amount={CommonService.currency(
|
|
714
|
+
((virtualLimit ?? 0) / 100) * Number(virtualMoney ?? 0),
|
|
715
|
+
currencySign
|
|
716
|
+
)}
|
|
714
717
|
customStyle={{ color: "var(--secondary-color)" }}
|
|
715
718
|
className="text-[14px]"
|
|
716
719
|
currency=""
|
package/src/index.ts
CHANGED
|
@@ -90,6 +90,8 @@ export type {
|
|
|
90
90
|
FilterSortBarIcons,
|
|
91
91
|
FilterSortBarMobileProps,
|
|
92
92
|
TimeOfDayVariant,
|
|
93
|
+
SortDirection,
|
|
94
|
+
SortOption,
|
|
93
95
|
} from "./components/FilterSortBar";
|
|
94
96
|
export { DEFAULT_CATEGORY_LABELS } from "./components/FilterSortBar";
|
|
95
97
|
export type { SurveyProps } from "./components/Survey/types";
|
|
@@ -65,10 +65,14 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
65
65
|
currency,
|
|
66
66
|
insuranceData,
|
|
67
67
|
isPeru,
|
|
68
|
+
walletMoney,
|
|
69
|
+
walletLabel,
|
|
70
|
+
virtualMoney,
|
|
71
|
+
virtualLimit,
|
|
72
|
+
creditosLabel,
|
|
68
73
|
showDetails = false,
|
|
69
74
|
setShowDetails,
|
|
70
75
|
} = props;
|
|
71
|
-
console.log("🚀 ~ PaymentCardMobile ~ selectSeatOnward:", selectSeatOnward);
|
|
72
76
|
|
|
73
77
|
// We use a Class component wrapper below to hold the state,
|
|
74
78
|
// avoiding Invalid Hook Call issues when linked in external apps with multiple React instances.
|
|
@@ -85,8 +89,13 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
85
89
|
? droppingStageReturn
|
|
86
90
|
: droppingStageOnward;
|
|
87
91
|
const activeDroppingTime = isReturn ? droppingTimeReturn : droppingTimeOnward;
|
|
88
|
-
const activeSource = isReturn ? sourceReturn : sourceOnward
|
|
89
|
-
|
|
92
|
+
const activeSource = (isReturn ? sourceReturn : sourceOnward)?.replace(
|
|
93
|
+
/,\s*/g,
|
|
94
|
+
", ",
|
|
95
|
+
);
|
|
96
|
+
const activeDest = (
|
|
97
|
+
isReturn ? destinationReturn : destinationOnward
|
|
98
|
+
)?.replace(/,\s*/g, ", ");
|
|
90
99
|
const activeServiceName = isReturn ? serviceNameReturn : serviceNameOnward;
|
|
91
100
|
const activeDate = isReturn ? dateReturn : dateOnward;
|
|
92
101
|
const activeDuration = isReturn ? durationReturn : durationOnward;
|
|
@@ -202,7 +211,7 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
202
211
|
</div>
|
|
203
212
|
) : null}
|
|
204
213
|
|
|
205
|
-
<div style={{ padding: "16px
|
|
214
|
+
<div style={{ padding: "16px 10px 0 10px" }}>
|
|
206
215
|
{/* Service Name + Date Badge */}
|
|
207
216
|
<div
|
|
208
217
|
style={{
|
|
@@ -266,42 +275,19 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
266
275
|
<div
|
|
267
276
|
style={{
|
|
268
277
|
flexShrink: 0,
|
|
269
|
-
width: "
|
|
270
|
-
height: "
|
|
278
|
+
width: "20px",
|
|
279
|
+
height: "20px",
|
|
271
280
|
display: "flex",
|
|
272
281
|
alignItems: "center",
|
|
273
282
|
justifyContent: "center",
|
|
274
283
|
marginTop: "2px",
|
|
275
284
|
}}
|
|
276
285
|
>
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
/>
|
|
283
|
-
) : (
|
|
284
|
-
<div
|
|
285
|
-
style={{
|
|
286
|
-
width: "22px",
|
|
287
|
-
height: "22px",
|
|
288
|
-
borderRadius: "50%",
|
|
289
|
-
border: "2.5px solid #e0321c",
|
|
290
|
-
display: "flex",
|
|
291
|
-
alignItems: "center",
|
|
292
|
-
justifyContent: "center",
|
|
293
|
-
}}
|
|
294
|
-
>
|
|
295
|
-
<div
|
|
296
|
-
style={{
|
|
297
|
-
width: "8px",
|
|
298
|
-
height: "8px",
|
|
299
|
-
borderRadius: "50%",
|
|
300
|
-
backgroundColor: "#e0321c",
|
|
301
|
-
}}
|
|
302
|
-
/>
|
|
303
|
-
</div>
|
|
304
|
-
)}
|
|
286
|
+
<img
|
|
287
|
+
src={icons.origin}
|
|
288
|
+
style={{ width: "18px", height: "18px" }}
|
|
289
|
+
alt="origin"
|
|
290
|
+
/>
|
|
305
291
|
</div>
|
|
306
292
|
<div style={{ flex: 1 }}>
|
|
307
293
|
<div
|
|
@@ -312,6 +298,7 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
312
298
|
textTransform: "capitalize",
|
|
313
299
|
lineHeight: 1.3,
|
|
314
300
|
}}
|
|
301
|
+
className="bold-text"
|
|
315
302
|
>
|
|
316
303
|
{activeSource}
|
|
317
304
|
</div>
|
|
@@ -335,44 +322,25 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
335
322
|
style={{
|
|
336
323
|
display: "flex",
|
|
337
324
|
alignItems: "flex-start",
|
|
338
|
-
gap: "
|
|
325
|
+
gap: "7px",
|
|
339
326
|
}}
|
|
340
327
|
>
|
|
341
328
|
<div
|
|
342
329
|
style={{
|
|
343
330
|
flexShrink: 0,
|
|
344
|
-
width: "
|
|
345
|
-
height: "
|
|
331
|
+
width: "20px",
|
|
332
|
+
height: "20px",
|
|
346
333
|
display: "flex",
|
|
347
334
|
alignItems: "center",
|
|
348
335
|
justifyContent: "center",
|
|
349
336
|
marginTop: "2px",
|
|
350
337
|
}}
|
|
351
338
|
>
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
/>
|
|
358
|
-
) : (
|
|
359
|
-
<div
|
|
360
|
-
style={{
|
|
361
|
-
width: "22px",
|
|
362
|
-
height: "22px",
|
|
363
|
-
display: "flex",
|
|
364
|
-
alignItems: "center",
|
|
365
|
-
justifyContent: "center",
|
|
366
|
-
}}
|
|
367
|
-
>
|
|
368
|
-
<svg viewBox="0 0 24 24" width="24" height="24" fill="none">
|
|
369
|
-
<path
|
|
370
|
-
d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"
|
|
371
|
-
fill="#e05252"
|
|
372
|
-
/>
|
|
373
|
-
</svg>
|
|
374
|
-
</div>
|
|
375
|
-
)}
|
|
339
|
+
<img
|
|
340
|
+
src={icons.destination}
|
|
341
|
+
style={{ width: "18px", height: "18px" }}
|
|
342
|
+
alt="destination"
|
|
343
|
+
/>
|
|
376
344
|
</div>
|
|
377
345
|
<div style={{ flex: 1 }}>
|
|
378
346
|
<div
|
|
@@ -383,6 +351,7 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
383
351
|
textTransform: "capitalize",
|
|
384
352
|
lineHeight: 1.3,
|
|
385
353
|
}}
|
|
354
|
+
className="bold-text"
|
|
386
355
|
>
|
|
387
356
|
{activeDest}
|
|
388
357
|
</div>
|
|
@@ -472,10 +441,12 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
472
441
|
const modalDroppingTime = modalIsReturn
|
|
473
442
|
? droppingTimeReturn
|
|
474
443
|
: droppingTimeOnward;
|
|
475
|
-
const modalSource =
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
444
|
+
const modalSource = (
|
|
445
|
+
modalIsReturn ? sourceReturn : sourceOnward
|
|
446
|
+
)?.replace(/,\s*/g, ", ");
|
|
447
|
+
const modalDest = (
|
|
448
|
+
modalIsReturn ? destinationReturn : destinationOnward
|
|
449
|
+
)?.replace(/,\s*/g, ", ");
|
|
479
450
|
const modalServiceName = modalIsReturn
|
|
480
451
|
? serviceNameReturn
|
|
481
452
|
: serviceNameOnward;
|
|
@@ -669,41 +640,44 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
669
640
|
{(modalIsReturn
|
|
670
641
|
? selectedReturn[0]
|
|
671
642
|
: selectedOnward[0]
|
|
672
|
-
).map((val: any, idx: number) =>
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
val.
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
643
|
+
).map((val: any, idx: number) => {
|
|
644
|
+
console.log("🚀 ~ PaymentCardMobile ~ val:", val);
|
|
645
|
+
return (
|
|
646
|
+
<span
|
|
647
|
+
key={idx}
|
|
648
|
+
style={{
|
|
649
|
+
display: "inline-flex",
|
|
650
|
+
alignItems: "center",
|
|
651
|
+
}}
|
|
652
|
+
>
|
|
653
|
+
{val.number ||
|
|
654
|
+
val.seat_number ||
|
|
655
|
+
val.seatNumber ||
|
|
656
|
+
val.name ||
|
|
657
|
+
""}
|
|
658
|
+
{val.type && (
|
|
659
|
+
<span
|
|
660
|
+
style={{
|
|
661
|
+
display: "inline-flex",
|
|
662
|
+
alignItems: "center",
|
|
663
|
+
justifyContent: "center",
|
|
664
|
+
fontSize: "12px",
|
|
665
|
+
marginLeft: "4px",
|
|
666
|
+
}}
|
|
667
|
+
>
|
|
668
|
+
{val.type?.charAt(0)?.toUpperCase()}
|
|
669
|
+
</span>
|
|
670
|
+
)}
|
|
671
|
+
</span>
|
|
672
|
+
);
|
|
673
|
+
})}
|
|
700
674
|
</span>
|
|
701
675
|
</div>
|
|
702
676
|
)}
|
|
703
677
|
</div>
|
|
704
678
|
|
|
705
679
|
{/* ── POLÍTICA ── */}
|
|
706
|
-
<div style={S.section} className="mt-[30px]">
|
|
680
|
+
{/* <div style={S.section} className="mt-[30px]">
|
|
707
681
|
<div style={S.sectionTitle} className="bold-text">
|
|
708
682
|
Política
|
|
709
683
|
</div>
|
|
@@ -716,7 +690,7 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
716
690
|
Gratis hasta 24h antes
|
|
717
691
|
</span>
|
|
718
692
|
</div>
|
|
719
|
-
</div>
|
|
693
|
+
</div> */}
|
|
720
694
|
|
|
721
695
|
{/* ── TARIFA ── */}
|
|
722
696
|
<div style={S.section} className="mt-[30px]">
|
|
@@ -792,12 +766,14 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
792
766
|
) : null}
|
|
793
767
|
|
|
794
768
|
{/* Service fee */}
|
|
795
|
-
{props.serviceFeeDataStateValue
|
|
769
|
+
{props.serviceFeeDataStateValue
|
|
770
|
+
?.total_convenience_fee_amount && (
|
|
796
771
|
<div style={S.sectionRow}>
|
|
797
772
|
<span style={{ flex: 1 }}>Cargo por servicio</span>
|
|
798
773
|
<span style={S.sectionRowValue} className="bold-text">
|
|
799
774
|
{CommonService.currency(
|
|
800
|
-
props.serviceFeeDataStateValue
|
|
775
|
+
props.serviceFeeDataStateValue
|
|
776
|
+
.total_convenience_fee_amount,
|
|
801
777
|
currencySign,
|
|
802
778
|
)}
|
|
803
779
|
</span>
|
|
@@ -899,6 +875,67 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
899
875
|
</div>
|
|
900
876
|
) : null}
|
|
901
877
|
|
|
878
|
+
{/* Cupon */}
|
|
879
|
+
{removeDiscountAtomValue && (
|
|
880
|
+
<div style={S.sectionRow}>
|
|
881
|
+
<span style={{ flex: 1 }}>Cupón</span>
|
|
882
|
+
<span
|
|
883
|
+
style={{
|
|
884
|
+
...S.sectionRowValue,
|
|
885
|
+
color: "var(--secondary-color)",
|
|
886
|
+
}}
|
|
887
|
+
className="bold-text"
|
|
888
|
+
>
|
|
889
|
+
{`- ${CommonService.currency((netFare ?? 0) - (discountAmount ?? 0), currencySign)}`}
|
|
890
|
+
</span>
|
|
891
|
+
</div>
|
|
892
|
+
)}
|
|
893
|
+
|
|
894
|
+
{/* Wallet */}
|
|
895
|
+
{walletMoney ? (
|
|
896
|
+
<div style={S.sectionRow}>
|
|
897
|
+
<span style={{ flex: 1 }}>{walletLabel}</span>
|
|
898
|
+
<span
|
|
899
|
+
style={{
|
|
900
|
+
...S.sectionRowValue,
|
|
901
|
+
color: "var(--secondary-color)",
|
|
902
|
+
}}
|
|
903
|
+
className="bold-text"
|
|
904
|
+
>
|
|
905
|
+
{isPeru
|
|
906
|
+
? CommonService.currencyFixed(
|
|
907
|
+
walletMoney,
|
|
908
|
+
currencySign,
|
|
909
|
+
)
|
|
910
|
+
: CommonService.currency(walletMoney, currencySign)}
|
|
911
|
+
</span>
|
|
912
|
+
</div>
|
|
913
|
+
) : null}
|
|
914
|
+
|
|
915
|
+
{/* Virtual credits */}
|
|
916
|
+
{virtualMoney ? (
|
|
917
|
+
<div style={S.sectionRow}>
|
|
918
|
+
<span style={{ flex: 1 }}>
|
|
919
|
+
<span
|
|
920
|
+
style={{ color: "var(--secondary-color)" }}
|
|
921
|
+
>{`${creditosLabel}(${virtualLimit}%)`}</span>
|
|
922
|
+
</span>
|
|
923
|
+
<span
|
|
924
|
+
style={{
|
|
925
|
+
...S.sectionRowValue,
|
|
926
|
+
color: "var(--secondary-color)",
|
|
927
|
+
}}
|
|
928
|
+
className="bold-text"
|
|
929
|
+
>
|
|
930
|
+
{CommonService.currency(
|
|
931
|
+
((virtualLimit ?? 0) / 100) *
|
|
932
|
+
Number(virtualMoney ?? 0),
|
|
933
|
+
currencySign,
|
|
934
|
+
)}
|
|
935
|
+
</span>
|
|
936
|
+
</div>
|
|
937
|
+
) : null}
|
|
938
|
+
|
|
902
939
|
{/* Dashed separator */}
|
|
903
940
|
<div
|
|
904
941
|
style={{
|
|
@@ -946,9 +983,10 @@ export const PaymentCardMobile: React.FC<PaymentSideBarProps> = (props) => {
|
|
|
946
983
|
alignItems: "center",
|
|
947
984
|
justifyContent: "center",
|
|
948
985
|
gap: "6px",
|
|
949
|
-
paddingBottom: "
|
|
986
|
+
paddingBottom: "8px",
|
|
950
987
|
cursor: "pointer",
|
|
951
988
|
userSelect: "none",
|
|
989
|
+
marginTop: "-5px",
|
|
952
990
|
}}
|
|
953
991
|
onClick={() => setShowDetails && setShowDetails(!showDetails)}
|
|
954
992
|
>
|