kupos-ui-components-lib 10.4.13 → 10.4.14

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 (56) hide show
  1. package/dist/assets/images/anims/service_list/60_percent_anim.json +1 -0
  2. package/dist/assets/images/filter/arrow-down.png +0 -0
  3. package/dist/assets/images/filter/rapido.svg +14 -0
  4. package/dist/components/FilterSortBar/FilterChip.d.ts +6 -2
  5. package/dist/components/FilterSortBar/FilterChip.js +10 -32
  6. package/dist/components/FilterSortBar/FilterSortBarMobile.d.ts +1 -1
  7. package/dist/components/FilterSortBar/FilterSortBarMobile.js +71 -38
  8. package/dist/components/FilterSortBar/FiltersMasterSheet.d.ts +3 -1
  9. package/dist/components/FilterSortBar/FiltersMasterSheet.js +28 -97
  10. package/dist/components/FilterSortBar/OptionCheckboxList.js +5 -16
  11. package/dist/components/FilterSortBar/PriceRangeSlider.js +17 -55
  12. package/dist/components/FilterSortBar/SheetFooter.js +3 -30
  13. package/dist/components/FilterSortBar/defaultIcons.js +9 -0
  14. package/dist/components/FilterSortBar/icons.d.ts +7 -0
  15. package/dist/components/FilterSortBar/icons.js +8 -1
  16. package/dist/components/FilterSortBar/index.d.ts +1 -1
  17. package/dist/components/FilterSortBar/types.d.ts +34 -0
  18. package/dist/components/PaymentOptions/PaymentOptionsDesktop.d.ts +4 -0
  19. package/dist/components/PaymentOptions/PaymentOptionsDesktop.js +5 -0
  20. package/dist/components/PaymentOptions/PaymentOptionsMobile.d.ts +4 -0
  21. package/dist/components/PaymentOptions/PaymentOptionsMobile.js +5 -0
  22. package/dist/components/PaymentOptions/ResponsivePaymentOptions.d.ts +3 -0
  23. package/dist/components/PaymentOptions/ResponsivePaymentOptions.js +10 -0
  24. package/dist/components/PaymentOptions/index.d.ts +5 -0
  25. package/dist/components/PaymentOptions/index.js +4 -0
  26. package/dist/components/PaymentOptions/mobileTypes.d.ts +0 -0
  27. package/dist/components/PaymentOptions/mobileTypes.js +0 -0
  28. package/dist/components/PaymentOptions/type.d.ts +4 -0
  29. package/dist/components/PaymentOptions/type.js +1 -0
  30. package/dist/components/PaymentSideBar/PaymentSideBarMobile.js +1 -1
  31. package/dist/components/ServiceItem/ExpandedDropdown.d.ts +19 -0
  32. package/dist/components/ServiceItem/ExpandedDropdown.js +28 -0
  33. package/dist/components/ServiceItem/ServiceItemDesktopPeru.d.ts +6 -0
  34. package/dist/components/ServiceItem/ServiceItemDesktopPeru.js +612 -0
  35. package/dist/index.d.ts +1 -1
  36. package/dist/styles.css +233 -0
  37. package/dist/ui/PaymentCardMobile/PaymentCardMobile.js +18 -4
  38. package/dist/ui/TopAmenities/PromoCountdown.d.ts +18 -0
  39. package/dist/ui/TopAmenities/PromoCountdown.js +55 -0
  40. package/package.json +1 -1
  41. package/src/assets/images/filter/arrow-down.png +0 -0
  42. package/src/assets/images/filter/rapido.svg +14 -0
  43. package/src/components/FilterSortBar/FilterChip.tsx +31 -35
  44. package/src/components/FilterSortBar/FilterSortBarMobile.tsx +106 -66
  45. package/src/components/FilterSortBar/FiltersMasterSheet.tsx +34 -118
  46. package/src/components/FilterSortBar/OptionCheckboxList.tsx +5 -16
  47. package/src/components/FilterSortBar/PriceRangeSlider.tsx +20 -61
  48. package/src/components/FilterSortBar/SheetFooter.tsx +4 -32
  49. package/src/components/FilterSortBar/defaultIcons.ts +11 -0
  50. package/src/components/FilterSortBar/icons.tsx +38 -2
  51. package/src/components/FilterSortBar/index.ts +2 -0
  52. package/src/components/FilterSortBar/types.ts +36 -0
  53. package/src/components/PaymentSideBar/PaymentSideBarMobile.tsx +4 -1
  54. package/src/index.ts +2 -0
  55. package/src/ui/PaymentCardMobile/PaymentCardMobile.tsx +101 -31
  56. package/src/components/FilterSortBar/SingleFilterSheet.tsx +0 -82
@@ -2,35 +2,8 @@ import React from "react";
2
2
  const SheetFooter = ({ onClear, onApply, colors }) => {
3
3
  const buttonColor = colors.buttonColor || colors.primaryColor;
4
4
  const buttonTextColor = colors.buttonTextColor || colors.primaryTextColor;
5
- return (React.createElement("div", { style: {
6
- display: "flex",
7
- gap: 12,
8
- paddingTop: 16,
9
- marginBottom: 8,
10
- } },
11
- React.createElement("button", { onClick: onClear, style: {
12
- flex: 1,
13
- padding: "12px 16px",
14
- borderRadius: 10,
15
- border: "1px solid #E5E5E5",
16
- background: "#fff",
17
- color: "#464647",
18
- fontSize: 14,
19
- fontWeight: 600,
20
- cursor: "pointer",
21
- WebkitTapHighlightColor: "transparent",
22
- } }, "Borrar filtro"),
23
- React.createElement("button", { onClick: onApply, style: {
24
- flex: 1,
25
- padding: "12px 16px",
26
- borderRadius: 10,
27
- border: "none",
28
- background: buttonColor,
29
- color: buttonTextColor,
30
- fontSize: 14,
31
- fontWeight: 600,
32
- cursor: "pointer",
33
- WebkitTapHighlightColor: "transparent",
34
- } }, "Aplicar")));
5
+ return (React.createElement("div", { className: "flex gap-[12px] pt-[16px] mb-[8px]" },
6
+ React.createElement("button", { onClick: onClear, 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]" }, "Borrar filtro"),
7
+ React.createElement("button", { onClick: onApply, 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]", style: { background: buttonColor, color: buttonTextColor } }, "Aplicar")));
35
8
  };
36
9
  export default SheetFooter;
@@ -1,4 +1,8 @@
1
1
  export const DEFAULT_ICONS = {
2
+ // Sourced from src/assets/images/filter/arrow-down.png (re-exported without
3
+ // its stray XMP orientation metadata, which browsers don't honor for PNGs —
4
+ // using the file as-is would render sideways).
5
+ sortArrowIcon: "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=",
2
6
  filterIcon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyLjM5NTggNy4wMDAyNkg1LjE4ODcxTTUuMTg4NzEgNy4wMDAyNkM1LjE4ODcxIDYuNjYyOTkgNS4wNTQxNSA2LjMzOTU0IDQuODE1NjYgNi4xMDEwNUM0LjU3NzE4IDUuODYyNTcgNC4yNTM3MyA1LjcyODU5IDMuOTE2NDYgNS43Mjg1OUMzLjU3OTE5IDUuNzI4NTkgMy4yNTU3NCA1Ljg2MjU3IDMuMDE3MjYgNi4xMDEwNUMyLjc3ODc3IDYuMzM5NTQgMi42NDQ3OSA2LjY2Mjk5IDIuNjQ0NzkgNy4wMDAyNk01LjE4ODcxIDcuMDAwMjZDNS4xODg3MSA3LjMzNzUyIDUuMDU0MTUgNy42NjA5OCA0LjgxNTY2IDcuODk5NDZDNC41NzcxOCA4LjEzNzk0IDQuMjUzNzMgOC4yNzE5MiAzLjkxNjQ2IDguMjcxOTJDMy41NzkxOSA4LjI3MTkyIDMuMjU1NzQgOC4xMzc5NCAzLjAxNzI2IDcuODk5NDZDMi43Nzg3NyA3LjY2MDk4IDIuNjQ0NzkgNy4zMzc1MiAyLjY0NDc5IDcuMDAwMjZNMi42NDQ3OSA3LjAwMDI2SDEuNjA0MTNNMTIuMzk1OCAxMC44NTQzSDkuMDQyNzlNOS4wNDI3OSAxMC44NTQzQzkuMDQyNzkgMTEuMTkxNiA4LjkwODQ5IDExLjUxNTUgOC42Njk5NSAxMS43NTRDOC40MzE0MiAxMS45OTI1IDguMTA3ODkgMTIuMTI2NiA3Ljc3MDU0IDEyLjEyNjZDNy40MzMyOCAxMi4xMjY2IDcuMTA5ODIgMTEuOTkyIDYuODcxMzQgMTEuNzUzNUM2LjYzMjg2IDExLjUxNSA2LjQ5ODg4IDExLjE5MTYgNi40OTg4OCAxMC44NTQzTTkuMDQyNzkgMTAuODU0M0M5LjA0Mjc5IDEwLjUxNyA4LjkwODQ5IDEwLjE5MzcgOC42Njk5NSA5Ljk1NTIyQzguNDMxNDIgOS43MTY2OCA4LjEwNzg5IDkuNTgyNjcgNy43NzA1NCA5LjU4MjY3QzcuNDMzMjggOS41ODI2NyA3LjEwOTgyIDkuNzE2NjUgNi44NzEzNCA5Ljk1NTE0QzYuNjMyODYgMTAuMTkzNiA2LjQ5ODg4IDEwLjUxNyA2LjQ5ODg4IDEwLjg1NDNNNi40OTg4OCAxMC44NTQzSDEuNjA0MTNNMTIuMzk1OCAzLjE0NjE3SDEwLjU4NDVNMTAuNTg0NSAzLjE0NjE3QzEwLjU4NDUgMi45NzkxOCAxMC41NTExIDIuODEzODEgMTAuNDg3MiAyLjY1OTUzQzEwLjQyMzMgMi41MDUyNCAxMC4zMjk2IDIuMzY1MDYgMTAuMjExNSAyLjI0Njk3QzEwLjA5MzQgMi4xMjg4OCA5Ljk1MzIyIDIuMDM1MjEgOS43OTg5NCAxLjk3MTMxQzkuNjQ0NjUgMS45MDc0IDkuNDc5MjkgMS44NzQ1MSA5LjMxMjI5IDEuODc0NTFDOC45NzUwMyAxLjg3NDUxIDguNjUxNTcgMi4wMDg0OSA4LjQxMzA5IDIuMjQ2OTdDOC4xNzQ2MSAyLjQ4NTQ1IDguMDQwNjMgMi44MDg5MSA4LjA0MDYzIDMuMTQ2MTdNMTAuNTg0NSAzLjE0NjE3QzEwLjU4NDUgMy4zMTMxNyAxMC41NTExIDMuNDc4NTMgMTAuNDg3MiAzLjYzMjgyQzEwLjQyMzMgMy43ODcxMSAxMC4zMjk2IDMuOTI3MjkgMTAuMjExNSA0LjA0NTM4QzEwLjA5MzQgNC4xNjM0NiA5Ljk1MzIyIDQuMjU3MTMgOS43OTg5NCA0LjMyMTA0QzkuNjQ0NjUgNC4zODQ5NSA5LjQ3OTI5IDQuNDE3ODQgOS4zMTIyOSA0LjQxNzg0QzguOTc1MDMgNC40MTc4NCA4LjY1MTU3IDQuMjgzODYgOC40MTMwOSA0LjA0NTM4QzguMTc0NjEgMy44MDY4OSA4LjA0MDYzIDMuNDgzNDQgOC4wNDA2MyAzLjE0NjE3TTguMDQwNjMgMy4xNDYxN0gxLjYwNDEzIiBzdHJva2U9IiM0NjQ2NDciIHN0cm9rZS13aWR0aD0iMC44NzUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo=",
3
7
  searchIcon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUuNjg3NSAxMC4wNjI1QzguMTAzNzUgMTAuMDYyNSAxMC4wNjI1IDguMTAzNzUgMTAuMDYyNSA1LjY4NzVDMTAuMDYyNSAzLjI3MTI1IDguMTAzNzUgMS4zMTI1IDUuNjg3NSAxLjMxMjVDMy4yNzEyNSAxLjMxMjUgMS4zMTI1IDMuMjcxMjUgMS4zMTI1IDUuNjg3NUMxLjMxMjUgOC4xMDM3NSAzLjI3MTI1IDEwLjA2MjUgNS42ODc1IDEwLjA2MjVaIiBzdHJva2U9IiM0NjQ2NDciLz4KPHBhdGggZD0iTTguNzUgOC43NUwxMS4zNzUgMTEuMzc1IiBzdHJva2U9IiM0NjQ2NDciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K",
4
8
  categoryIcons: {
@@ -15,4 +19,9 @@ export const DEFAULT_ICONS = {
15
19
  sunset: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI5MF8zOTIpIj4KPG1hc2sgaWQ9Im1hc2swXzI5MF8zOTIiIHN0eWxlPSJtYXNrLXR5cGU6bHVtaW5hbmNlIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTQiIGhlaWdodD0iMTQiPgo8cGF0aCBkPSJNMTQgMEgwVjE0SDE0VjBaIiBmaWxsPSJ3aGl0ZSIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfMjkwXzM5MikiPgo8cGF0aCBkPSJNMy41MzUyOCAxMi4xOTg5QzQuMjQxMSAxMi41MTk3IDUuMTM5NDQgMTIuNTE5NyA1Ljg0NTMgMTIuMTk4OUM2LjU1MTEzIDExLjg3ODEgNy40NDk0OCAxMS44NzgxIDguMTU1MjkgMTIuMTk4OUM4Ljg2MTEgMTIuNTE5NyA5Ljc1OTUgMTIuNTE5NyAxMC40NjUzIDEyLjE5ODlNNy4wMDAyMiAxLjc1VjIuOTE2NjdNMi4zMzM1OCA3LjU4MzMxSDEuMTY2OU0zLjY4MzQ4IDQuMjY2NTdMMi44NTg1MiAzLjQ0MTYxTTEwLjMxNjggNC4yNjY1N0wxMS4xNDE4IDMuNDQxNjFNMTIuODMzNiA3LjU4MzMxSDExLjY2N000LjA4MzU4IDcuNTgzMzFDNC4wODM1OCA1Ljk3MjUyIDUuMzg5NDEgNC42NjY2NyA3LjAwMDIyIDQuNjY2NjdDOC42MTEwNiA0LjY2NjY3IDkuOTE2OTYgNS45NzI1MiA5LjkxNjk2IDcuNTgzMzFNMS4yMjUzIDEwLjE1NzNDMS45MzExMyA5LjgzNjQ5IDIuODI5NDcgOS44MzY0OSAzLjUzNTMgMTAuMTU3M0M0LjI0MTEzIDEwLjQ3ODIgNS4xMzk0NyAxMC40NzgyIDUuODQ1MyAxMC4xNTczQzYuNTUxMTMgOS44MzY0OSA3LjQ0OTQ4IDkuODM2NDkgOC4xNTUyOSAxMC4xNTczQzguODYxMSAxMC40NzgyIDkuNzU5NSAxMC40NzgyIDEwLjQ2NTMgMTAuMTU3M0MxMS4xNzExIDkuODM2NDkgMTIuMDY5NSA5LjgzNjQ5IDEyLjc3NTMgMTAuMTU3MyIgc3Ryb2tlPSIjNDY0NjQ3IiBzdHJva2Utd2lkdGg9IjEuMDUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L2c+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjkwXzM5MiI+CjxyZWN0IHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K",
16
20
  night: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyLjI1IDcuNDYwODFDMTIuMTU4MyA4LjQ1Mzc2IDExLjc4NTYgOS40MDAwNyAxMS4xNzU2IDEwLjE4OUMxMC41NjU3IDEwLjk3NzkgOS43NDM3MiAxMS41NzY4IDguODA1ODYgMTEuOTE1NUM3Ljg2NzkzIDEyLjI1NDMgNi44NTI5OSAxMi4zMTg5IDUuODc5NzEgMTIuMTAxOUM0LjkwNjQ0IDExLjg4NDkgNC4wMTUwOCAxMS4zOTUyIDMuMzA5OTcgMTAuNjlDMi42MDQ4NSA5Ljk4NDg5IDIuMTE1MTQgOS4wOTM1NiAxLjg5ODEyIDguMTIwMjhDMS42ODExIDcuMTQ3IDEuNzQ1NzYgNi4xMzIwNSAyLjA4NDUyIDUuMTk0MThDMi40MjMyOSA0LjI1NjI5IDMuMDIyMTYgMy40MzQzIDMuODExMDUgMi44MjQzNUM0LjU5OTk0IDIuMjE0NDIgNS41NDYyMiAxLjg0MTc3IDYuNTM5MTcgMS43NUM1Ljk1Nzg0IDIuNTM2NDkgNS42NzgwOSAzLjUwNTUxIDUuNzUwODEgNC40ODA4MkM1LjgyMzU1IDUuNDU2MTQgNi4yNDM5MiA2LjM3Mjk2IDYuOTM1NDggNy4wNjQ1NEM3LjYyNzA2IDcuNzU2MDcgOC41NDM4NSA4LjE3NjQ5IDkuNTE5MTYgOC4yNDkyMkMxMC40OTQ1IDguMzIxOTUgMTEuNDYzNSA4LjA0MjE2IDEyLjI1IDcuNDYwODFaIiBzdHJva2U9IiM0NjQ2NDciIHN0cm9rZS13aWR0aD0iMC45OTc1IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTExLjM3NSAyLjUwODUzQzExLjYzMjcgMi41MDg1MyAxMS44NDE3IDIuMjk5NiAxMS44NDE3IDIuMDQxODZDMTEuODQxNyAxLjc4NDEzIDExLjYzMjcgMS41NzUyIDExLjM3NSAxLjU3NTJDMTEuMTE3MiAxLjU3NTIgMTAuOTA4MyAxLjc4NDEzIDEwLjkwODMgMi4wNDE4NkMxMC45MDgzIDIuMjk5NiAxMS4xMTcyIDIuNTA4NTMgMTEuMzc1IDIuNTA4NTNaIiBmaWxsPSIjNDY0NjQ3Ii8+CjxwYXRoIGQ9Ik0xMi41NDE3IDQuMTQxODlDMTIuNzM1IDQuMTQxODkgMTIuODkxNyAzLjk4NTIgMTIuODkxNyAzLjc5MTg5QzEyLjg5MTcgMy41OTg1OSAxMi43MzUgMy40NDE4OSAxMi41NDE3IDMuNDQxODlDMTIuMzQ4NCAzLjQ0MTg5IDEyLjE5MTcgMy41OTg1OSAxMi4xOTE3IDMuNzkxODlDMTIuMTkxNyAzLjk4NTIgMTIuMzQ4NCA0LjE0MTg5IDEyLjU0MTcgNC4xNDE4OVoiIGZpbGw9IiM0NjQ2NDciLz4KPC9zdmc+Cg==",
17
21
  },
22
+ sortIcons: {
23
+ // Rápido (duration sort) — the only sort chip with no existing category
24
+ // or time-of-day icon to reuse. Sourced from src/assets/images/filter/rapido.svg.
25
+ duration: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTMiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMyAxMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcuMjY0NzEgMS40MTUyOEM5LjkyMDg0IDEuNDE1MzIgMTIuMDgyMSAzLjU3NjUzIDEyLjA4MjEgNi4yMzI2N0MxMi4wODIxIDguODg4NzggOS45MjA4MiAxMS4wNSA3LjI2NDcxIDExLjA1QzQuNjA4NTcgMTEuMDUgMi40NDczNSA4Ljg4ODggMi40NDczMyA2LjIzMjY3QzIuNDQ3MzMgMy41NzY1MSA0LjYwODU1IDEuNDE1MjggNy4yNjQ3MSAxLjQxNTI4Wk03LjI2NDcxIDEuOTg5NUM0LjkyMzYyIDEuOTg5NSAzLjAyMTU1IDMuODkxNTggMy4wMjE1NSA2LjIzMjY3QzMuMDIxNTcgOC41NzM3MyA0LjkyMzY0IDEwLjQ3NTggNy4yNjQ3MSAxMC40NzU4QzkuNjA1NzUgMTAuNDc1OCAxMS41MDc4IDguNTczNzEgMTEuNTA3OSA2LjIzMjY3QzExLjUwNzkgMy44OTE2IDkuNjA1NzcgMS45ODk1MyA3LjI2NDcxIDEuOTg5NVoiIGZpbGw9IiM0NjQ2NDciIHN0cm9rZT0iIzQ2NDY0NyIgc3Ryb2tlLXdpZHRoPSIwLjEiLz4KPHBhdGggZD0iTTcuMjY0MjUgMi41MTEyM0M5LjMxNzc5IDIuNTExMzQgMTAuOTg1OSA0LjE3OTM1IDEwLjk4NTkgNi4yMzI5MUMxMC45ODU4IDguMjg2MzggOS4zMTc3MiA5Ljk1NDQ4IDcuMjY0MjUgOS45NTQ1OUM1LjIxNDQ5IDkuOTU0NTkgMy41NDI2OCA4LjI4NjQ4IDMuNTQyNTcgNi4yMzI5MUMzLjU0MjU3IDQuMTc5MjggNS4yMTA2MyAyLjUxMTIzIDcuMjY0MjUgMi41MTEyM1pNNy4yNjQyNSAzLjA4NTQ1QzUuNTI5NDYgMy4wODU0NSA0LjExNjc5IDQuNDk4MTIgNC4xMTY3OSA2LjIzMjkxQzQuMTE2OSA3Ljk2NzYxIDUuNTI5NTMgOS4zODAzNyA3LjI2NDI1IDkuMzgwMzdDOC45OTg4OCA5LjM4MDI2IDEwLjQxMTYgNy45Njc1NCAxMC40MTE3IDYuMjMyOTFDMTAuNDExNyA0LjQ5ODE5IDguOTk4OTUgMy4wODU1NiA3LjI2NDI1IDMuMDg1NDVaIiBmaWxsPSIjNDY0NjQ3IiBzdHJva2U9IiM0NjQ2NDciIHN0cm9rZS13aWR0aD0iMC4xIi8+CjxwYXRoIGQ9Ik03LjI2NDQzIDUuNTY1OTJDNi44OTUzOCA1LjU2NTkyIDYuNTk3OSA1Ljg2MzQxIDYuNTk3OSA2LjIzMjQ2QzYuNTk3OSA2LjYwMTUxIDYuODk1MzggNi44OTkwMSA3LjI2NDQzIDYuODk5MDFDNy42MzM0OSA2Ljg5OTAxIDcuOTMwOTkgNi42MDE1MSA3LjkzMDk5IDYuMjMyNDZDNy45MzA5OSA1Ljg2MzQxIDcuNjMzNDkgNS41NjU5MiA3LjI2NDQzIDUuNTY1OTJaIiBmaWxsPSIjNDY0NjQ3Ii8+CjxwYXRoIGQ9Ik02LjUzMzkxIDEuMTI1OThMNi43NTIzMyAxLjI3Mjg0QzYuNzE0NjcgMS4xODI0NiA2LjYzMTgyIDEuMTI1OTggNi41MzM5MSAxLjEyNTk4WiIgZmlsbD0iIzQ2NDY0NyIvPgo8cGF0aCBkPSJNNy45OTQ0OSAxLjEyNTk4SDcuMjI2MjdMNi44Nzk4MiAxLjM1OTQ2SDYuNTMzMzRINi4yOTk4N1YxLjc1MTFDNi4yOTk4NyAxLjg3OTE0IDYuNDA1MzEgMS45ODQ1OCA2LjUzMzM0IDEuOTg0NThDNi41NjcyNCAxLjk4NDU4IDYuNTk3MzYgMS45NzcwNSA2LjYyNzQ5IDEuOTY1NzVDNi42Njg5MSAxLjk1ODIyIDYuODIzMzMgMS45NDMxNiA3LjI3ODk5IDEuOTQzMTZDNy43MDgzIDEuOTQzMTYgNy44NTUxNSAxLjk1ODIyIDcuODk2NTcgMS45NjU3NUM4LjAxMzMxIDIuMDE4NDcgOC4xNTI2NSAxLjk2NTc1IDguMjA5MTQgMS44NDkwMUM4LjIyNDIgMS44MTg4OSA4LjIzMTczIDEuNzg1IDguMjMxNzMgMS43NTExVjEuMzU5NDZDOC4yMzE3MyAxLjIzMTQyIDguMTI2MjkgMS4xMjU5OCA3Ljk5ODI1IDEuMTI1OThINy45OTQ0OVpNNi43NDQyMyAxLjg1Mjc4QzYuNzQ0MjMgMS44NTI3OCA2Ljc1OTMxIDEuODIyNjUgNi43NjMwOCAxLjgwMzgzQzYuNzU5MzEgMS44MTg4OSA2Ljc1MTc2IDEuODM3NzEgNi43NDQyMyAxLjg1Mjc4Wk02Ljc2MzA4IDEuODAzODNDNi43NjMwOCAxLjgwMzgzIDYuNzYzMDYgMS43ODg3NiA2Ljc2NjgyIDEuNzc3NDZDNi43NjY4MiAxLjc4NDk5IDYuNzY2ODQgMS43OTYyOSA2Ljc2MzA4IDEuODAzODNaTTcuNzY4NTQgMS44MDM4M0M3Ljc2ODU0IDEuODAzODMgNy43NzYwNyAxLjgzNzcxIDcuNzgzNiAxLjg1Mjc4QzcuNzc2MDcgMS44Mzc3MSA3Ljc3MjMxIDEuODIyNjUgNy43Njg1NCAxLjgwMzgzWk03Ljc2NDc4IDEuNzc3NDZDNy43NjQ3OCAxLjc3NzQ2IDcuNzY0NzggMS43OTI1MiA3Ljc2ODU0IDEuODAwMDZDNy43Njg1NCAxLjc5MjUyIDcuNzY4NTQgMS43ODQ5OSA3Ljc2NDc4IDEuNzc3NDZaIiBmaWxsPSIjNDY0NjQ3Ii8+CjxwYXRoIGQ9Ik03Ljk5NDM5IDEuNDY4NjdINi41MzMyNEM2LjEyNjU0IDEuNDY4NjcgNS43OTg5MSAxLjEzMzUxIDUuODAyNjcgMC43MzA1N0M1LjgwMjY3IDAuMzMxMzkzIDYuMTM0MDcgMC4wMDM3NjU4MiA2LjUzMzI0IDBINy45OTgxNUM4LjE5Mzk4IDAgOC4zNzg1IDAuMDc5MDgyOSA4LjUxNzg0IDAuMjE4NDE4QzguNjU3MTcgMC4zNTc3NTQgOC43Mjg3MiAwLjU0MjI4MSA4LjcyODcyIDAuNzM4MTAzQzguNzI4NzIgMS4xMzcyOCA4LjM5NzMzIDEuNDY0OTEgNy45OTgxNSAxLjQ2ODY3SDcuOTk0MzlaTTcuOTk0MzkgMC40NzQ0OTdINi41MzMyNEM2LjM5MzkxIDAuNDc0NDk3IDYuMjc3MTcgMC41OTEyMzUgNi4yNzcxNyAwLjczMDU3QzYuMjc3MTcgMC44NzM2NzEgNi4zOTAxNCAwLjk5MDQxMyA2LjUzMzI0IDAuOTkwNDEzSDcuOTkwNjJDOC4xMjk5NSAwLjk5MDQxMyA4LjI0NjY5IDAuODczNjc1IDguMjQ2NjkgMC43MzQzNEM4LjI0NjY5IDAuNjY2NTU1IDguMjIwMzUgMC41OTg3NjggOC4xNzEzOSAwLjU0OTgxMkM4LjEyMjQzIDAuNTAwODU3IDguMDU4NDIgMC40NzQ0OTMgNy45ODY4NyAwLjQ3MDcyOEw3Ljk5NDM5IDAuNDc0NDk3WiIgZmlsbD0iIzQ2NDY0NyIvPgo8cGF0aCBkPSJNMy42Mzc5NSAzLjcyNDQ5SDEuODY0MjZDMS43MzI0NiAzLjcyNDQ5IDEuNjI3MDEgMy42MTkwNSAxLjYyNzAxIDMuNDg3MjVDMS42MjcwMSAzLjM1NTQ0IDEuNzMyNDYgMy4yNSAxLjg2NDI2IDMuMjVIMy42Mzc5NUMzLjc2OTc1IDMuMjUgMy44NzUyIDMuMzU1NDQgMy44NzUyIDMuNDg3MjVDMy44NzUyIDMuNjE5MDUgMy43Njk3NSAzLjcyNDQ5IDMuNjM3OTUgMy43MjQ0OVoiIGZpbGw9IiM0NjQ2NDciLz4KPHBhdGggZD0iTTIuNjc3MzYgNi41NDg3SDEuNDUzNDdDMS4zMjE2NiA2LjU0ODcgMS4yMTYyMiA2LjQ0MzI2IDEuMjE2MjIgNi4zMTE0NkMxLjIxNjIyIDYuMTc5NjUgMS4zMjE2NiA2LjA3NDIyIDEuNDUzNDcgNi4wNzQyMkgyLjY3NzM2QzIuODA5MTYgNi4wNzQyMiAyLjkxNDYxIDYuMTc5NjUgMi45MTQ2MSA2LjMxMTQ2QzIuOTE0NjEgNi40NDMyNiAyLjgwOTE2IDYuNTQ4NyAyLjY3NzM2IDYuNTQ4N1oiIGZpbGw9IiM0NjQ2NDciLz4KPHBhdGggZD0iTTIuODYxNjUgNy45MzQ5M0gxLjIwODQ3QzEuMDc2NjcgNy45MzQ5MyAwLjk3MTIyMiA3LjgyOTUgMC45NzEyMjIgNy42OTc3QzAuOTcxMjIyIDcuNTY1ODkgMS4wNzY2NyA3LjQ2MDQ1IDEuMjA4NDcgNy40NjA0NUgyLjg2MTY1QzIuOTkzNDUgNy40NjA0NSAzLjA5ODkgNy41NjU4OSAzLjA5ODkgNy42OTc3QzMuMDk4OSA3LjgyOTUgMi45OTM0NSA3LjkzNDkzIDIuODYxNjUgNy45MzQ5M1oiIGZpbGw9IiM0NjQ2NDciLz4KPHBhdGggZD0iTTIuOTE0NzQgNS4xMzYzNkgwLjIzNzI0OUMwLjEwNTQ0NSA1LjEzNjM2IDAgNS4wMzA5MSAwIDQuODk5MTFDMCA0Ljc2NzMgMC4xMDU0NDUgNC42NjE4NyAwLjIzNzI0OSA0LjY2MTg3SDIuOTE0NzRDMy4wNDY1NSA0LjY2MTg3IDMuMTUxOTkgNC43NjczIDMuMTUxOTkgNC44OTkxMUMzLjE1MTk5IDUuMDMwOTEgMy4wNDY1NSA1LjEzNjM2IDIuOTE0NzQgNS4xMzYzNloiIGZpbGw9IiM0NjQ2NDciLz4KPHBhdGggZD0iTTcuMDkxMjEgNi4yMTcyOUM3LjAzMDk2IDYuMjE3MjkgNi45NzA3MSA2LjE5NDY5IDYuOTI1NTIgNi4xNDk1TDUuOTc2NTIgNS4yMTU1OEM1Ljg4MjM4IDUuMTI1MiA1Ljg4MjM4IDQuOTc0NTcgNS45NzY1MiA0Ljg4MDQyQzYuMDY2OSA0Ljc4NjI4IDYuMjE3NTQgNC43ODYyOCA2LjMxMTY5IDQuODgwNDJMNy4yNjA2NiA1LjgxNDM1QzcuMzU0OCA1LjkwNDczIDcuMzU0OCA2LjA1NTM2IDcuMjYwNjYgNi4xNDk1QzcuMjE1NDcgNi4xOTg0NiA3LjE1MTQ3IDYuMjIxMDUgNy4wOTEyMSA2LjIyMTA1VjYuMjE3MjlaIiBmaWxsPSIjNDY0NjQ3Ii8+CjxwYXRoIGQ9Ik03LjUxMzA0IDYuMjgxMzNDNy40NTI3OSA2LjI4MTMzIDcuMzkyNTMgNi4yNTg3NCA3LjM0NzM0IDYuMjEzNTVDNy4yNTMyIDYuMTE5NCA3LjI1MzIgNS45NzI1MyA3LjM0NzM0IDUuODc4MzhMOC45NTkxIDQuMjU5MDlDOS4wNTMyNSA0LjE2NDk0IDkuMjAwMTIgNC4xNjQ5NCA5LjI5NDI3IDQuMjU5MDlDOS4zODg0MSA0LjM1MzIzIDkuMzg4NDEgNC41MDAxIDkuMjk0MjcgNC41OTQyNEw3LjY4MjQ4IDYuMjEzNTVDNy42MzcyOSA2LjI1ODc0IDcuNTc3MDYgNi4yODUxIDcuNTEzMDQgNi4yODUxVjYuMjgxMzNaIiBmaWxsPSIjNDY0NjQ3Ii8+Cjwvc3ZnPgo=",
26
+ },
18
27
  };
@@ -15,6 +15,13 @@ export declare const ChevronDownIcon: ({ size, color, open, src, }: {
15
15
  open?: boolean;
16
16
  src?: string;
17
17
  }) => React.JSX.Element;
18
+ export declare const SortArrowIcon: ({ size, color, direction, src, active, }: {
19
+ size?: number;
20
+ color?: string;
21
+ direction?: "asc" | "desc";
22
+ src?: string;
23
+ active?: boolean;
24
+ }) => React.JSX.Element;
18
25
  export declare const SearchIcon: ({ size, color, src, }: {
19
26
  size?: number;
20
27
  color?: string;
@@ -6,8 +6,15 @@ import React from "react";
6
6
  */
7
7
  export const CloseIcon = ({ size = 14, color = "#464647", src, }) => src ? (React.createElement("img", { src: src, width: size, height: size, alt: "" })) : (React.createElement("svg", { width: size, height: size, viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
8
8
  React.createElement("path", { d: "M1 1L13 13M13 1L1 13", stroke: color, strokeWidth: "1.6", strokeLinecap: "round" })));
9
- export const ChevronDownIcon = ({ size = 8, color = "#464647", open = false, src, }) => src ? (React.createElement("img", { src: src, width: size, height: size * 0.6, alt: "", style: { transform: open ? "rotate(180deg)" : "none", transition: "transform 0.2s ease", flexShrink: 0 } })) : (React.createElement("svg", { width: size, height: size * 0.6, viewBox: "0 0 10 6", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { transform: open ? "rotate(180deg)" : "none", transition: "transform 0.2s ease", flexShrink: 0 } },
9
+ export const ChevronDownIcon = ({ size = 8, color = "#464647", open = false, src, }) => src ? (React.createElement("img", { src: src, width: size, height: size * 0.6, alt: "", className: `flex-shrink-0 transition-transform duration-200 ease-in-out ${open ? "rotate-180" : "rotate-0"}` })) : (React.createElement("svg", { width: size, height: size * 0.6, viewBox: "0 0 10 6", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: `flex-shrink-0 transition-transform duration-200 ease-in-out ${open ? "rotate-180" : "rotate-0"}` },
10
10
  React.createElement("path", { d: "M1 1L5 5L9 1", stroke: color, strokeWidth: "1.4", strokeLinecap: "round", strokeLinejoin: "round" })));
11
+ export const SortArrowIcon = ({ size = 9, color = "#464647", direction = "desc", src,
12
+ /** 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. */
13
+ active, }) => src ? (
14
+ // arrow-down.png is taller than wide (48x67) — keep its aspect ratio
15
+ // instead of forcing a square box, which would squash it.
16
+ React.createElement("img", { src: src, width: size, height: Math.round(size * 1.4), alt: "", className: `flex-shrink-0 ${direction === "asc" ? "rotate-180" : "rotate-0"} ${active ? "brightness-0 invert" : ""}` })) : (React.createElement("svg", { width: size, height: size, viewBox: "0 0 10 10", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "flex-shrink-0" },
17
+ React.createElement("path", { d: direction === "asc" ? "M2 6.2L5 3.2L8 6.2" : "M2 3.8L5 6.8L8 3.8", stroke: color, strokeWidth: "1.4", strokeLinecap: "round", strokeLinejoin: "round" })));
11
18
  export const SearchIcon = ({ size = 16, color = "#9B9B9B", src, }) => src ? (React.createElement("img", { src: src, width: size, height: size, alt: "" })) : (React.createElement("svg", { width: size, height: size, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
12
19
  React.createElement("circle", { cx: "7", cy: "7", r: "5.5", stroke: color, strokeWidth: "1.4" }),
13
20
  React.createElement("path", { d: "M11.5 11.5L15 15", stroke: color, strokeWidth: "1.4", strokeLinecap: "round" })));
@@ -1,4 +1,4 @@
1
1
  import FilterSortBarMobile from "./FilterSortBarMobile";
2
2
  export { FilterSortBarMobile };
3
3
  export { DEFAULT_CATEGORY_LABELS } from "./types";
4
- export type { FilterCategory, FilterCategoryKey, FilterCategoryKind, FilterOptionItem, PriceRangeValue, FilterSortBarColors, FilterSortBarIcons, FilterSortBarMobileProps, TimeOfDayVariant, } from "./types";
4
+ export type { FilterCategory, FilterCategoryKey, FilterCategoryKind, FilterOptionItem, PriceRangeValue, FilterSortBarColors, FilterSortBarIcons, FilterSortBarMobileProps, TimeOfDayVariant, SortDirection, SortOption, } from "./types";
@@ -7,6 +7,10 @@ export interface FilterOptionItem {
7
7
  selected: boolean;
8
8
  stars?: number;
9
9
  icon?: TimeOfDayVariant;
10
+ /** 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. */
11
+ excludeFromInline?: boolean;
12
+ /** 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. */
13
+ checkedViaSort?: boolean;
10
14
  }
11
15
  export interface PriceRangeValue {
12
16
  min: number;
@@ -23,8 +27,31 @@ export interface FilterCategory {
23
27
  options?: FilterOptionItem[];
24
28
  priceRange?: PriceRangeValue;
25
29
  inlineOptions?: boolean;
30
+ /** 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. */
31
+ hideChip?: boolean;
26
32
  }
27
33
  export declare const DEFAULT_CATEGORY_LABELS: Record<FilterCategoryKey, string>;
34
+ export type SortDirection = "asc" | "desc";
35
+ export interface SortOption {
36
+ key: string;
37
+ label: string;
38
+ /**
39
+ * Present only on directional (base) sorts — e.g. Horario, Precio, Rápido.
40
+ * These are mutually exclusive: activating one deactivates the others, and
41
+ * tapping the already-active one flips its direction instead. Always
42
+ * renders a directional arrow.
43
+ */
44
+ direction?: SortDirection;
45
+ /** Whether this sort is currently applied. */
46
+ active: boolean;
47
+ /**
48
+ * Result count for this cohort (e.g. buses departing after 6 PM), shown as
49
+ * a small badge. Only meaningful on non-directional (cohort) sorts, which
50
+ * toggle on/off independently and combine with whichever directional sort
51
+ * is active — e.g. "Horario" desc + "Después de las 6 PM" together.
52
+ */
53
+ count?: number;
54
+ }
28
55
  export interface FilterSortBarColors {
29
56
  primaryColor?: string;
30
57
  primaryTextColor?: string;
@@ -38,6 +65,8 @@ export interface FilterSortBarColors {
38
65
  export interface FilterSortBarIcons {
39
66
  closeIcon?: string;
40
67
  chevronDownIcon?: string;
68
+ /** Directional arrow shown on active base sort chips (Horario/Empresas/Precio/Rápido). Drawn pointing down; rotated 180° for ascending. */
69
+ sortArrowIcon?: string;
41
70
  searchIcon?: string;
42
71
  filterIcon?: string;
43
72
  starFilledIcon?: string;
@@ -46,11 +75,16 @@ export interface FilterSortBarIcons {
46
75
  categoryIcons?: Partial<Record<FilterCategoryKey, string>>;
47
76
  categoryIconsActive?: Partial<Record<FilterCategoryKey, string>>;
48
77
  timeOfDayIcons?: Partial<Record<TimeOfDayVariant, string>>;
78
+ /** 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. */
79
+ sortIcons?: Partial<Record<string, string>>;
49
80
  }
50
81
  export interface FilterSortBarMobileProps {
51
82
  categories: FilterCategory[];
52
83
  onApply: (categoryKey: FilterCategoryKey | "all", updatedCategories: FilterCategory[]) => void;
53
84
  onClearFilter: (categoryKey: FilterCategoryKey | "all") => void;
85
+ /** Sort chips rendered before the filter category chips — see SortOption. */
86
+ sortOptions?: SortOption[];
87
+ onSortChange?: (updatedSortOptions: SortOption[]) => void;
54
88
  currencySign?: string;
55
89
  colors?: FilterSortBarColors;
56
90
  icons?: FilterSortBarIcons;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { PaymentOptionsProps } from "./type";
3
+ declare const PaymentOptionsDesktop: (props: PaymentOptionsProps) => React.JSX.Element;
4
+ export default PaymentOptionsDesktop;
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ const PaymentOptionsDesktop = (props) => {
3
+ return React.createElement("div", null, "PaymentOptionsDesktop");
4
+ };
5
+ export default PaymentOptionsDesktop;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { PaymentOptionsProps } from "./type";
3
+ declare const PaymentOptionsMobile: (props: PaymentOptionsProps) => React.JSX.Element;
4
+ export default PaymentOptionsMobile;
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ const PaymentOptionsMobile = (props) => {
3
+ return React.createElement("div", null, "PaymentOptionsMobile");
4
+ };
5
+ export default PaymentOptionsMobile;
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { PaymentOptionsProps } from "./type";
3
+ export default function ResponsivePaymentOptions(props: PaymentOptionsProps): React.JSX.Element;
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import PaymentOptionsDesktop from "./PaymentOptionsDesktop";
3
+ import PaymentOptionsMobile from "./PaymentOptionsMobile";
4
+ export default function ResponsivePaymentOptions(props) {
5
+ const { variant } = props;
6
+ if (variant === "mobile") {
7
+ return React.createElement(PaymentOptionsMobile, Object.assign({}, props));
8
+ }
9
+ return React.createElement(PaymentOptionsDesktop, Object.assign({}, props));
10
+ }
@@ -0,0 +1,5 @@
1
+ import PaymentOptionsDesktop from "./PaymentOptionsDesktop";
2
+ import PaymentOptionsMobile from "./PaymentOptionsMobile";
3
+ import ResponsivePaymentOptions from "./ResponsivePaymentOptions";
4
+ export { PaymentOptionsDesktop, PaymentOptionsMobile, ResponsivePaymentOptions };
5
+ export type { PaymentOptionsProps } from "./type";
@@ -0,0 +1,4 @@
1
+ import PaymentOptionsDesktop from "./PaymentOptionsDesktop";
2
+ import PaymentOptionsMobile from "./PaymentOptionsMobile";
3
+ import ResponsivePaymentOptions from "./ResponsivePaymentOptions";
4
+ export { PaymentOptionsDesktop, PaymentOptionsMobile, ResponsivePaymentOptions };
File without changes
@@ -0,0 +1,4 @@
1
+ export interface PaymentOptionsProps {
2
+ typeOfComponent: "paymentoptions";
3
+ variant?: "desktop" | "mobile" | "auto";
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -254,7 +254,7 @@ const PaymentSideBarMobile = (props) => {
254
254
  walletMoney ? (React.createElement(PaymentItem, { label: walletLabel, amount: isPeru
255
255
  ? CommonService.currencyFixed(walletMoney, currencySign)
256
256
  : CommonService.currency(walletMoney, currencySign), className: "text-[14px]", customStyle: { color: "var(--secondary-color)" }, currency: "", isBoldText: true })) : null,
257
- virtualMoney ? (React.createElement(PaymentItem, { label: React.createElement("span", { className: "secondary-text", style: { color: "var(--secondary-color)" } }, `${creditosLabel}(${virtualLimit}%)`), amount: CommonService.currency(virtualMoney, currencySign), customStyle: { color: "var(--secondary-color)" }, className: "text-[14px]", currency: "", isBoldText: true })) : null,
257
+ virtualMoney ? (React.createElement(PaymentItem, { label: React.createElement("span", { className: "secondary-text", style: { color: "var(--secondary-color)" } }, `${creditosLabel}(${virtualLimit}%)`), amount: CommonService.currency(((virtualLimit !== null && virtualLimit !== void 0 ? virtualLimit : 0) / 100) * Number(virtualMoney !== null && virtualMoney !== void 0 ? virtualMoney : 0), currencySign), customStyle: { color: "var(--secondary-color)" }, className: "text-[14px]", currency: "", isBoldText: true })) : null,
258
258
  showUsd ? (React.createElement(PaymentItem, { label: React.createElement("span", { className: "primary-text" }, translation === null || translation === void 0 ? void 0 : translation.showUsd), amount: CommonService.currency(isAgency ? netFareInUsd + agencyFee : netFareInUsd, currencySign), currency: "USD", customStyle: { color: "var(--primary-color)" }, className: "text-[14px]", isBoldText: true })) : null)),
259
259
  React.createElement("div", { className: ` text-[#fff] p-[10px_15px] text-left w-full flex items-center absolute -bottom-[35px] pt-[50px] rounded-b-[14px] text-[14px]`, style: { backgroundColor: colors === null || colors === void 0 ? void 0 : colors.bottomStripColor } },
260
260
  React.createElement("div", { className: "flex justify-between items-center w-full text-[#fff]" },
@@ -0,0 +1,19 @@
1
+ import React from "react";
2
+ interface ExpandedDropdownProps {
3
+ serviceItem: {
4
+ pet_seat_info?: Record<string, any>;
5
+ is_change_ticket?: boolean;
6
+ is_tracking_enabled?: boolean;
7
+ };
8
+ showPromo: boolean;
9
+ colors: {
10
+ priceColor?: string;
11
+ };
12
+ grayscaleClass: string;
13
+ translation?: {
14
+ [key: string]: string;
15
+ };
16
+ getAnimationIcon: (icon: string) => any;
17
+ }
18
+ declare function ExpandedDropdown({ serviceItem, showPromo, colors, grayscaleClass, translation, getAnimationIcon, }: ExpandedDropdownProps): React.ReactElement;
19
+ export default ExpandedDropdown;
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ import LottiePlayer from "../../assets/LottiePlayer";
3
+ function ExpandedDropdown({ serviceItem, showPromo, colors, grayscaleClass, translation, getAnimationIcon, }) {
4
+ const hasPetInfo = serviceItem.pet_seat_info &&
5
+ Object.keys(serviceItem.pet_seat_info).length > 0;
6
+ return (React.createElement("div", { className: "px-[15px] pt-[26px] pb-[14px] -mt-[16px] pt-[20px] relative -z-9", style: {
7
+ backgroundColor: "#f5f5f5",
8
+ borderRadius: "0 0 10px 10px",
9
+ border: showPromo
10
+ ? `1px solid ${colors.priceColor}`
11
+ : "1px solid #ccc",
12
+ borderTop: "none",
13
+ } },
14
+ React.createElement("div", { className: "flex flex-col gap-[12px] text-[13px] text-[#464647]" },
15
+ hasPetInfo && (React.createElement("div", { className: "flex items-center gap-[10px]" },
16
+ React.createElement(LottiePlayer, { animationData: getAnimationIcon("petFriendlyAnim"), width: "20px", height: "20px" }),
17
+ React.createElement("div", { className: "h-auto mr-[4px] text-[13px] text-[#464647] bold-text" },
18
+ React.createElement("span", null, translation === null || translation === void 0 ? void 0 : translation.petFriendly)))),
19
+ serviceItem.is_change_ticket && (React.createElement("div", { className: "flex items-center gap-[10px]" },
20
+ React.createElement(LottiePlayer, { animationData: getAnimationIcon("flexibleIcon"), width: "20px", height: "20px" }),
21
+ React.createElement("div", { className: "h-auto mr-[4px] text-[13px] text-[#464647] bold-text" },
22
+ React.createElement("span", null, translation === null || translation === void 0 ? void 0 : translation.flexible)))),
23
+ (serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.is_tracking_enabled) && (React.createElement("div", { className: `${grayscaleClass} flex items-center gap-[10px]` },
24
+ React.createElement(LottiePlayer, { animationData: getAnimationIcon("locationAnim"), width: "20px", height: "20px" }),
25
+ React.createElement("div", { className: "h-auto mr-[4px] text-[13px] text-[#464647] bold-text" },
26
+ React.createElement("span", null, "GPS Tracker")))))));
27
+ }
28
+ export default ExpandedDropdown;
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { ServiceItemProps } from "./types";
3
+ declare function ServiceItemDesktopPeru({ serviceItem, onBookButtonPress, colors, metaData, children, busStage, serviceDetailsLoading, cityOrigin, cityDestination, translation, orignLabel, destinationLabel, currencySign, isCiva, showRating, showLastSeats, removeArrivalTime, removeDuplicateSeats, originIconStyle, showAvailableSeats, isSeatIcon, isTurbus, t, }: ServiceItemProps & {
4
+ currencySign?: string;
5
+ }): React.ReactElement;
6
+ export default ServiceItemDesktopPeru;