@asdp/ferryui 0.1.20 → 0.1.22-dev.8463

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/index.js CHANGED
@@ -4,13 +4,14 @@ var reactComponents = require('@fluentui/react-components');
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
  var React5 = require('react');
6
6
  var reactGridSystem = require('react-grid-system');
7
+ var react = require('@iconify/react');
7
8
  var iconify_js = require('@iconify/react/dist/iconify.js');
8
9
  var reactHookForm = require('react-hook-form');
9
- var react = require('@iconify/react');
10
10
  var PhoneInputComponent = require('react-phone-input-2');
11
11
  var Select = require('react-select');
12
12
  var reactCalendarCompat = require('@fluentui/react-calendar-compat');
13
13
  var moment = require('moment');
14
+ var reactRange = require('react-range');
14
15
 
15
16
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
16
17
 
@@ -479,19 +480,155 @@ var CardBanner = ({
479
480
  }
480
481
  );
481
482
  };
482
- var useStyles5 = reactComponents.makeStyles({
483
- ticketWrapper: {
484
- borderRadius: reactComponents.tokens.borderRadiusXLarge,
485
- overflow: "visible",
486
- boxShadow: reactComponents.tokens.shadow4,
487
- display: "flex",
488
- width: "100%",
489
- marginBottom: "2rem",
490
- minHeight: "323px",
491
- padding: 0,
492
- "@media (max-width: 1200px)": {
493
- flexDirection: "column"
483
+ function useWindowSize() {
484
+ const [windowSize, setWindowSize] = React5.useState({
485
+ width: 0,
486
+ height: 0
487
+ });
488
+ React5.useEffect(() => {
489
+ function handleResize() {
490
+ setWindowSize({
491
+ width: window.innerWidth,
492
+ height: window.innerHeight
493
+ });
494
494
  }
495
+ window.addEventListener("resize", handleResize);
496
+ handleResize();
497
+ return () => window.removeEventListener("resize", handleResize);
498
+ }, []);
499
+ return windowSize;
500
+ }
501
+
502
+ // src/constants/generated/tokens.ts
503
+ var brandColors = {
504
+ "10": "#000000",
505
+ "20": "#03060e",
506
+ "30": "#060b1c",
507
+ "40": "#09112a",
508
+ "50": "#0c1738",
509
+ "60": "#122255",
510
+ "70": "#182e71",
511
+ "80": "#1e398d",
512
+ "90": "#4b60a4",
513
+ "100": "#7787bb",
514
+ "110": "#a4afd1",
515
+ "120": "#bac2dd",
516
+ "130": "#d0d6e8",
517
+ "140": "#e7e9f4",
518
+ "150": "#fdfdff",
519
+ "160": "#ffffff"
520
+ };
521
+
522
+ // src/constants/generated/tokensV2.ts
523
+ var brandColors2 = {
524
+ "10": "#001a1bff",
525
+ "20": "#02383bff",
526
+ "30": "#002426",
527
+ "40": "#004044",
528
+ "50": "#005D62",
529
+ "60": "#007A81",
530
+ "70": "#00969F",
531
+ "80": "#00B3BD",
532
+ "90": "#29BFC8",
533
+ "100": "#52CBD2",
534
+ "110": "#7AD7DD",
535
+ "120": "#A3E4E7",
536
+ "130": "#CCF0F2",
537
+ "140": "#E1F7F8",
538
+ "150": "#fdfdff",
539
+ "160": "#ffffff"
540
+ };
541
+ var fontWeight = {
542
+ "Medium": 500};
543
+ var sharedColors = {
544
+ "Shared_Cranberry_Primary": "#c50f1f",
545
+ "Shared_Red_Primary": "#d13438",
546
+ "Shared_Green_Primary": "#107c10"};
547
+ var lightModeColors2 = {
548
+ "Brand_Stroke_1_Rest": "#00B3BD"};
549
+ var tokensV2_default = {
550
+ lightModeColors: lightModeColors2};
551
+
552
+ // src/constants/brandColors.ts
553
+ var isV2Path = typeof window !== "undefined" && window.location.pathname.startsWith("/v2");
554
+ var brandColors3 = !isV2Path ? brandColors2 : brandColors;
555
+ var customBrand = {
556
+ 10: brandColors3["10"],
557
+ 20: brandColors3["20"],
558
+ 30: brandColors3["30"],
559
+ 40: brandColors3["40"],
560
+ 50: brandColors3["50"],
561
+ 60: brandColors3["60"],
562
+ 70: brandColors3["70"],
563
+ 80: brandColors3["80"],
564
+ 90: brandColors3["90"],
565
+ 100: brandColors3["100"],
566
+ 110: brandColors3["110"],
567
+ 120: brandColors3["120"],
568
+ 130: brandColors3["130"],
569
+ 140: brandColors3["140"],
570
+ 150: brandColors3["150"],
571
+ 160: brandColors3["160"]
572
+ };
573
+
574
+ // src/constants/designTokens.ts
575
+ typeof window !== "undefined" && window.location.pathname.startsWith("/v2");
576
+ var designTokens = {
577
+ // Breakpoints for responsive design
578
+ breakpoints: {
579
+ xs: "320px",
580
+ sm: "480px",
581
+ md: "768px",
582
+ lg: "1024px",
583
+ xl: "1200px",
584
+ xxl: "1440px",
585
+ xxxl: "1600px"
586
+ }};
587
+
588
+ // src/constants/themes.ts
589
+ var extendedTokens = {
590
+ breakpointXs: designTokens.breakpoints.xs,
591
+ breakpointSm: designTokens.breakpoints.sm,
592
+ breakpointMd: designTokens.breakpoints.md,
593
+ breakpointLg: designTokens.breakpoints.lg,
594
+ breakpointXl: designTokens.breakpoints.xl,
595
+ breakpointXxl: designTokens.breakpoints.xxl,
596
+ breakpointXxxl: designTokens.breakpoints.xxxl
597
+ };
598
+ ({
599
+ ...reactComponents.createLightTheme(customBrand),
600
+ // Brand colors from Figma
601
+ colorBrandBackground: customBrand[80],
602
+ colorBrandBackgroundHover: customBrand[70],
603
+ colorBrandBackgroundPressed: customBrand[60],
604
+ colorBrandBackgroundSelected: customBrand[80],
605
+ colorBrandForeground1: customBrand[80],
606
+ colorBrandForeground2: customBrand[70],
607
+ colorBrandForegroundLink: customBrand[70],
608
+ colorBrandForegroundLinkHover: customBrand[60],
609
+ colorBrandForegroundLinkPressed: customBrand[50],
610
+ colorBrandForegroundLinkSelected: customBrand[70]});
611
+ ({
612
+ ...reactComponents.createDarkTheme(customBrand),
613
+ // Brand colors from Figma (inverted for dark mode)
614
+ colorBrandBackground: customBrand[100],
615
+ colorBrandBackgroundHover: customBrand[110],
616
+ colorBrandBackgroundPressed: customBrand[120],
617
+ colorBrandBackgroundSelected: customBrand[100],
618
+ colorBrandForeground1: customBrand[100],
619
+ colorBrandForeground2: customBrand[110],
620
+ colorBrandForegroundLink: customBrand[110],
621
+ colorBrandForegroundLinkHover: customBrand[120],
622
+ colorBrandForegroundLinkPressed: customBrand[130],
623
+ colorBrandForegroundLinkSelected: customBrand[110]});
624
+ var useStyle = reactComponents.makeStyles({
625
+ dividerContainer: {
626
+ position: "relative",
627
+ display: "flex",
628
+ flexDirection: "column",
629
+ alignItems: "center",
630
+ justifyItems: "center",
631
+ width: "100%"
495
632
  },
496
633
  ticketLeftCard: {
497
634
  display: "flex",
@@ -503,24 +640,20 @@ var useStyles5 = reactComponents.makeStyles({
503
640
  boxShadow: "none",
504
641
  position: "relative",
505
642
  overflow: "visible",
506
- flexDirection: "column",
507
- "@media (min-width: 1200px)": {
508
- borderRight: `0.7em dashed ${reactComponents.tokens.colorNeutralBackground1Hover}`,
643
+ [`@media (min-width: ${extendedTokens.breakpointXl})`]: {
644
+ borderRight: "0.7em dashed " + reactComponents.tokens.colorNeutralBackground1Hover,
509
645
  borderEndEndRadius: 0,
510
646
  borderEndStartRadius: 0,
511
647
  borderTopLeftRadius: reactComponents.tokens.borderRadiusXLarge,
512
648
  borderBottomLeftRadius: reactComponents.tokens.borderRadiusXLarge
513
649
  },
514
- "@media (max-width: 1200px)": {
515
- borderBottom: `0.5em dashed ${reactComponents.tokens.colorNeutralBackground1Hover}`,
650
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
651
+ borderBottom: "0.5em dashed " + reactComponents.tokens.colorNeutralBackground1Hover,
516
652
  borderTopLeftRadius: reactComponents.tokens.borderRadiusXLarge,
517
653
  borderTopRightRadius: reactComponents.tokens.borderRadiusXLarge,
518
654
  borderEndEndRadius: 0,
519
655
  borderEndStartRadius: 0,
520
- gap: "1rem",
521
- flexDirection: "row",
522
- justifyContent: "space-around",
523
- padding: "2rem"
656
+ gap: "1rem"
524
657
  }
525
658
  },
526
659
  circularLeft: {
@@ -532,28 +665,6 @@ var useStyles5 = reactComponents.makeStyles({
532
665
  left: "-50px",
533
666
  boxShadow: "inset -3px 0px 1px rgba(0, 0, 0, 0.1)"
534
667
  },
535
- circularLeftMd: {
536
- position: "absolute",
537
- width: "50px",
538
- height: "30px",
539
- borderRadius: "50%",
540
- backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover,
541
- left: "-25px",
542
- bottom: "-18px",
543
- zIndex: 2,
544
- boxShadow: "inset -3px 0px 1px rgba(0, 0, 0, 0.1)"
545
- },
546
- circularRightMd: {
547
- position: "absolute",
548
- width: "50px",
549
- height: "30px",
550
- borderRadius: "50%",
551
- backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover,
552
- right: "-25px",
553
- bottom: "-18px",
554
- zIndex: 2,
555
- boxShadow: "inset 3px 0px 1px rgba(0, 0, 0, 0.1)"
556
- },
557
668
  ticketMiddleCard: {
558
669
  width: "100%",
559
670
  height: "100%",
@@ -563,7 +674,11 @@ var useStyles5 = reactComponents.makeStyles({
563
674
  display: "flex",
564
675
  flexDirection: "column",
565
676
  justifyContent: "space-between",
566
- "@media (max-width: 768px)": {
677
+ borderBottom: "none",
678
+ [`@media (max-width: ${extendedTokens.breakpointLg})`]: {
679
+ padding: "2rem"
680
+ },
681
+ [`@media (max-width: ${extendedTokens.breakpointMd})`]: {
567
682
  padding: "1rem"
568
683
  }
569
684
  },
@@ -586,21 +701,10 @@ var useStyles5 = reactComponents.makeStyles({
586
701
  justifyContent: "center",
587
702
  gap: "0.5rem"
588
703
  },
589
- dividerContainer: {
590
- position: "relative",
591
- display: "flex",
592
- flexDirection: "column",
593
- alignItems: "center",
594
- justifyItems: "center",
595
- width: "100%"
596
- },
597
704
  ticketButtons: {
598
705
  display: "flex",
599
706
  gap: "1rem",
600
- marginTop: "1rem",
601
- "@media (max-width: 768px)": {
602
- flexDirection: "column"
603
- }
707
+ marginTop: "1rem"
604
708
  },
605
709
  ticketRightCard: {
606
710
  width: "100%",
@@ -619,18 +723,20 @@ var useStyles5 = reactComponents.makeStyles({
619
723
  flexDirection: "column",
620
724
  justifyContent: "space-between",
621
725
  color: reactComponents.tokens.colorNeutralForegroundInverted,
622
- "@media (max-width: 1200px)": {
726
+ borderBottom: "none",
727
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
623
728
  padding: "2rem",
624
729
  borderTopRightRadius: 0,
625
- borderBottomLeftRadius: reactComponents.tokens.borderRadiusXLarge,
626
- borderBottomRightRadius: reactComponents.tokens.borderRadiusXLarge
730
+ borderBottomLeftRadius: reactComponents.tokens.borderRadiusXLarge
627
731
  },
628
- "@media (max-width: 768px)": {
629
- padding: "1rem"
732
+ [`@media (max-width: ${extendedTokens.breakpointLg})`]: {
733
+ padding: "1rem",
734
+ borderTopRightRadius: 0,
735
+ borderBottomLeftRadius: reactComponents.tokens.borderRadiusXLarge
630
736
  }
631
737
  },
632
738
  priceCard: {
633
- border: "1px solid #FFF",
739
+ border: " 1px solid #FFF",
634
740
  background: "rgba(255, 255, 255, 0.30)",
635
741
  backdropFilter: "blur(17.5px)",
636
742
  borderRadius: reactComponents.tokens.borderRadiusLarge,
@@ -640,7 +746,7 @@ var useStyles5 = reactComponents.makeStyles({
640
746
  justifyContent: "space-between",
641
747
  alignItems: "center",
642
748
  flexWrap: "wrap",
643
- "@media (max-width: 768px)": {
749
+ [`@media (max-width: ${extendedTokens.breakpointMd})`]: {
644
750
  padding: "1rem"
645
751
  }
646
752
  },
@@ -669,177 +775,359 @@ var useStyles5 = reactComponents.makeStyles({
669
775
  right: "-50px",
670
776
  boxShadow: "inset 3px 0px 1px rgba(0, 0, 0, 0.1)"
671
777
  },
778
+ ticketWrapper: {
779
+ borderRadius: reactComponents.tokens.borderRadiusXLarge,
780
+ overflow: "visible",
781
+ boxShadow: reactComponents.tokens.shadow4,
782
+ display: "flex",
783
+ boxSizing: "content-box",
784
+ width: "100%",
785
+ marginBottom: "2rem",
786
+ minHeight: "323px",
787
+ justifyContent: "center",
788
+ padding: 0,
789
+ transformOrigin: "center",
790
+ marginLeft: `0px !important`,
791
+ marginRight: `0px !important`
792
+ },
793
+ circularLeftMd: {
794
+ position: "absolute",
795
+ width: "50px",
796
+ height: "30px",
797
+ borderRadius: "50%",
798
+ backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover,
799
+ left: "-25px",
800
+ bottom: "-18px",
801
+ zIndex: 2,
802
+ boxShadow: "inset -3px 0px 1px rgba(0, 0, 0, 0.1)"
803
+ },
804
+ circularRightMd: {
805
+ position: "absolute",
806
+ width: "50px",
807
+ height: "30px",
808
+ borderRadius: "50%",
809
+ backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover,
810
+ right: "-25px",
811
+ bottom: "-18px",
812
+ zIndex: 2,
813
+ boxShadow: "inset 3px 0px 1px rgba(0, 0, 0, 0.1)"
814
+ },
672
815
  asdpLogo: {
673
816
  width: "clamp(50px, 20vw, 150px)"
674
817
  }
675
818
  });
676
819
  var CardTicket = ({
677
- shipType,
678
- logoSrc = "/assets/logo/asdp-default.svg",
820
+ id,
679
821
  shipName,
822
+ shipType,
823
+ shipTypeColor = "success",
824
+ tooltipCaption = "",
680
825
  availableSeats,
681
- departure,
682
- arrival,
826
+ departureDay,
827
+ departureTime,
828
+ departureLocation,
829
+ arrivalDay,
830
+ arrivalTime,
831
+ arrivalLocation,
683
832
  duration,
684
- actionButtons = [],
685
- price,
686
- primaryButton,
687
833
  facilities,
688
- shipIcon,
689
- facilityIcon
834
+ totalPrice,
835
+ buttonText = "Pilih Tiket",
836
+ onPriceDetailClick,
837
+ onPolicyClick,
838
+ onSelectTicket
690
839
  }) => {
691
- const styles = useStyles5();
692
- const threshold = availableSeats.threshold ?? 50;
693
- const isLowSeats = availableSeats.count <= threshold;
694
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketWrapper, children: [
695
- /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Card, { className: styles.ticketLeftCard, children: [
696
- /* @__PURE__ */ jsxRuntime.jsx(
697
- reactComponents.Tooltip,
698
- {
699
- content: shipType.tooltip || shipType.label,
700
- relationship: "label",
701
- appearance: "inverted",
702
- children: /* @__PURE__ */ jsxRuntime.jsx(
703
- reactComponents.Badge,
840
+ const styles = useStyle();
841
+ const { width } = useWindowSize();
842
+ const getCircularVerticalConfig = () => {
843
+ if (width <= 1600) return { count: 6, spacing: 60, top: 10 };
844
+ return { count: 5, spacing: 60, top: 18 };
845
+ };
846
+ const circularVerticalConfig = getCircularVerticalConfig();
847
+ return /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { className: styles.ticketWrapper, children: [
848
+ /* @__PURE__ */ jsxRuntime.jsx(
849
+ reactGridSystem.Col,
850
+ {
851
+ xs: 12,
852
+ sm: 12,
853
+ md: 12,
854
+ lg: 12,
855
+ xl: 3,
856
+ xxl: 3,
857
+ xxxl: 3,
858
+ style: { padding: 0, margin: 0 },
859
+ children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Card, { className: styles.ticketLeftCard, children: [
860
+ /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { height: "100%" }, children: [
861
+ /* @__PURE__ */ jsxRuntime.jsx(
862
+ reactGridSystem.Col,
863
+ {
864
+ xs: 5,
865
+ sm: 5,
866
+ md: 5,
867
+ lg: 5,
868
+ xl: 12,
869
+ xxl: 12,
870
+ xxxl: 12,
871
+ style: {
872
+ display: "flex",
873
+ justifyContent: "center",
874
+ alignItems: "center"
875
+ },
876
+ children: /* @__PURE__ */ jsxRuntime.jsx(
877
+ reactComponents.Tooltip,
878
+ {
879
+ content: tooltipCaption,
880
+ relationship: "label",
881
+ appearance: "inverted",
882
+ children: /* @__PURE__ */ jsxRuntime.jsx(
883
+ reactComponents.Badge,
884
+ {
885
+ size: "large",
886
+ appearance: "filled",
887
+ color: shipTypeColor,
888
+ iconPosition: "before",
889
+ shape: "rounded",
890
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:info-24-regular" }),
891
+ children: shipType
892
+ }
893
+ )
894
+ }
895
+ )
896
+ }
897
+ ),
898
+ /* @__PURE__ */ jsxRuntime.jsx(
899
+ reactGridSystem.Col,
900
+ {
901
+ xs: 2,
902
+ sm: 2,
903
+ md: 2,
904
+ lg: 2,
905
+ xl: 12,
906
+ xxl: 12,
907
+ xxxl: 12,
908
+ style: {
909
+ display: "flex",
910
+ justifyContent: "center",
911
+ alignItems: "center"
912
+ },
913
+ children: /* @__PURE__ */ jsxRuntime.jsx(
914
+ "img",
915
+ {
916
+ src: "/assets/logo/asdp-default.svg",
917
+ className: styles.asdpLogo,
918
+ alt: "asdp",
919
+ height: 56,
920
+ width: 82
921
+ }
922
+ )
923
+ }
924
+ ),
925
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Visible, { md: true, sm: true, xs: true, lg: true, children: /* @__PURE__ */ jsxRuntime.jsx(
926
+ reactGridSystem.Col,
927
+ {
928
+ xs: 5,
929
+ sm: 5,
930
+ md: 5,
931
+ lg: 5,
932
+ xl: 12,
933
+ xxl: 12,
934
+ xxxl: 12,
935
+ style: {
936
+ display: "flex",
937
+ justifyContent: "center",
938
+ alignItems: "center"
939
+ },
940
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
941
+ reactComponents.Badge,
942
+ {
943
+ size: "large",
944
+ style: {
945
+ color: availableSeats > 50 ? sharedColors.Shared_Green_Primary : sharedColors.Shared_Red_Primary
946
+ },
947
+ appearance: "tint",
948
+ color: availableSeats > 50 ? "success" : "danger",
949
+ iconPosition: "after",
950
+ shape: "rounded",
951
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:ticket-diagonal-24-regular" }),
952
+ children: [
953
+ "Tersedia ",
954
+ availableSeats
955
+ ]
956
+ }
957
+ )
958
+ }
959
+ ) }),
960
+ /* @__PURE__ */ jsxRuntime.jsx(
961
+ reactGridSystem.Col,
962
+ {
963
+ style: { textAlign: "center" },
964
+ xs: 12,
965
+ sm: 12,
966
+ md: 12,
967
+ lg: 12,
968
+ xl: 12,
969
+ xxl: 12,
970
+ xxxl: 12,
971
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: shipName })
972
+ }
973
+ )
974
+ ] }),
975
+ /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Visible, { md: true, sm: true, xs: true, lg: true, children: [
976
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.circularLeftMd }),
977
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.circularRightMd })
978
+ ] }),
979
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Visible, { xl: true, xxl: true, xxxl: true, children: Array.from({ length: circularVerticalConfig.count }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
980
+ "div",
704
981
  {
705
- size: "large",
706
- appearance: "filled",
707
- color: shipType.color,
708
- iconPosition: "before",
982
+ className: styles.circularLeft,
983
+ style: {
984
+ top: `${circularVerticalConfig.top + index * circularVerticalConfig.spacing}px`
985
+ }
986
+ },
987
+ index
988
+ )) })
989
+ ] })
990
+ }
991
+ ),
992
+ /* @__PURE__ */ jsxRuntime.jsx(
993
+ reactGridSystem.Col,
994
+ {
995
+ xs: 12,
996
+ sm: 12,
997
+ md: 12,
998
+ lg: 12,
999
+ xl: 4.5,
1000
+ xxl: 4.5,
1001
+ xxxl: 4.5,
1002
+ style: { padding: 0, margin: 0 },
1003
+ children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Card, { className: styles.ticketMiddleCard, children: [
1004
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Visible, { lg: true, xl: true, xxl: true, xxxl: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
1005
+ reactComponents.Badge,
1006
+ {
1007
+ size: "extra-large",
1008
+ style: {
1009
+ color: availableSeats > 50 ? sharedColors.Shared_Green_Primary : sharedColors.Shared_Red_Primary
1010
+ },
1011
+ appearance: "tint",
1012
+ color: availableSeats > 50 ? "success" : "danger",
1013
+ iconPosition: "after",
709
1014
  shape: "rounded",
710
- children: shipType.label
1015
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:ticket-diagonal-24-regular" }),
1016
+ children: [
1017
+ "Tersedia ",
1018
+ availableSeats
1019
+ ]
711
1020
  }
712
- )
713
- }
714
- ),
715
- /* @__PURE__ */ jsxRuntime.jsx(
716
- "img",
717
- {
718
- src: logoSrc,
719
- className: styles.asdpLogo,
720
- alt: "Logo"
721
- }
722
- ),
723
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "none" }, children: /* @__PURE__ */ jsxRuntime.jsxs(
724
- reactComponents.Badge,
725
- {
726
- size: "large",
727
- appearance: "tint",
728
- color: isLowSeats ? "danger" : "success",
729
- iconPosition: "after",
730
- shape: "rounded",
731
- children: [
732
- "Tersedia ",
733
- availableSeats.count
734
- ]
735
- }
736
- ) }),
737
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: shipName }),
738
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "none" }, children: Array.from({ length: 5 }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
739
- "div",
740
- {
741
- className: styles.circularLeft,
742
- style: {
743
- top: `${18 + index * 60}px`
744
- }
745
- },
746
- index
747
- )) }),
748
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.circularLeftMd }),
749
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.circularRightMd })
750
- ] }),
751
- /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Card, { className: styles.ticketMiddleCard, children: [
752
- /* @__PURE__ */ jsxRuntime.jsxs(
753
- reactComponents.Badge,
754
- {
755
- size: "extra-large",
756
- appearance: "tint",
757
- color: isLowSeats ? "danger" : "success",
758
- iconPosition: "after",
759
- shape: "rounded",
760
- children: [
761
- "Tersedia ",
762
- availableSeats.count
763
- ]
764
- }
765
- ),
766
- /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketInfo, children: [
767
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketTime, children: [
768
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: departure.day }),
769
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Title2, { children: departure.time }),
770
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: departure.location })
771
- ] }),
772
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketDuration, children: [
773
- /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Caption2, { children: [
774
- "Estimasi ",
775
- duration
1021
+ ) }),
1022
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketInfo, children: [
1023
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketTime, children: [
1024
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: departureDay }),
1025
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Title2, { children: departureTime }),
1026
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: departureLocation })
1027
+ ] }),
1028
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketDuration, children: [
1029
+ /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Caption2, { children: [
1030
+ "Estimasi ",
1031
+ duration
1032
+ ] }),
1033
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.dividerContainer, children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, { children: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:vehicle-ship-24-regular", height: 24 }) }) })
1034
+ ] }),
1035
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketTime, children: [
1036
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: arrivalDay }),
1037
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Title2, { children: arrivalTime }),
1038
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: arrivalLocation })
1039
+ ] })
1040
+ ] }) }),
1041
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketButtons, children: [
1042
+ /* @__PURE__ */ jsxRuntime.jsx(
1043
+ reactComponents.Button,
1044
+ {
1045
+ appearance: "outline",
1046
+ shape: "circular",
1047
+ style: {
1048
+ flex: 1,
1049
+ borderColor: reactComponents.tokens.colorBrandBackground,
1050
+ color: reactComponents.tokens.colorBrandBackground
1051
+ },
1052
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:money-24-regular" }),
1053
+ size: "medium",
1054
+ onClick: onPriceDetailClick,
1055
+ children: "Rincian Harga"
1056
+ }
1057
+ ),
1058
+ /* @__PURE__ */ jsxRuntime.jsx(
1059
+ reactComponents.Button,
1060
+ {
1061
+ appearance: "outline",
1062
+ shape: "circular",
1063
+ style: {
1064
+ flex: 1,
1065
+ borderColor: reactComponents.tokens.colorBrandBackground,
1066
+ color: reactComponents.tokens.colorBrandBackground
1067
+ },
1068
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:document-bullet-list-24-regular" }),
1069
+ size: "medium",
1070
+ onClick: onPolicyClick,
1071
+ children: "Kebijakan"
1072
+ }
1073
+ )
1074
+ ] })
1075
+ ] })
1076
+ }
1077
+ ),
1078
+ /* @__PURE__ */ jsxRuntime.jsx(
1079
+ reactGridSystem.Col,
1080
+ {
1081
+ xs: 12,
1082
+ sm: 12,
1083
+ md: 12,
1084
+ lg: 12,
1085
+ xl: 4.5,
1086
+ xxl: 4.5,
1087
+ xxxl: 4.5,
1088
+ style: { padding: 0, margin: 0 },
1089
+ children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Card, { className: styles.ticketRightCard, children: [
1090
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.priceCard, children: [
1091
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "0.25rem" }, children: [
1092
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: "Total harga" }),
1093
+ /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Title3, { style: { display: "flex", flex: "column", justifyContent: "end" }, children: [
1094
+ "IDR\xA0",
1095
+ totalPrice.toLocaleString("id-ID")
1096
+ ] })
1097
+ ] }),
1098
+ /* @__PURE__ */ jsxRuntime.jsx(
1099
+ reactComponents.Button,
1100
+ {
1101
+ onClick: onSelectTicket,
1102
+ appearance: "primary",
1103
+ style: { backgroundColor: brandColors2["60"] },
1104
+ size: "medium",
1105
+ shape: "circular",
1106
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:ticket-diagonal-24-filled" }),
1107
+ children: buttonText
1108
+ }
1109
+ )
776
1110
  ] }),
777
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.dividerContainer, children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, { children: shipIcon || /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u{1F6A2}" }) }) })
778
- ] }),
779
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketTime, children: [
780
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: arrival.day }),
781
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Title2, { children: arrival.time }),
782
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: arrival.location })
1111
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.facilitiesSection, children: [
1112
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: "Fasilitas" }),
1113
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.facilitiesList, children: facilities.map((facility, idx) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.facilityItem, children: [
1114
+ /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:checkmark-circle-24-filled" }),
1115
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1Strong, { children: facility })
1116
+ ] }, idx)) })
1117
+ ] }),
1118
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Visible, { xl: true, xxl: true, xxxl: true, children: Array.from({ length: circularVerticalConfig.count }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
1119
+ "div",
1120
+ {
1121
+ className: styles.circularRight,
1122
+ style: {
1123
+ top: `${circularVerticalConfig.top + index * circularVerticalConfig.spacing}px`
1124
+ }
1125
+ },
1126
+ index
1127
+ )) })
783
1128
  ] })
784
- ] }) }),
785
- actionButtons.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.ticketButtons, children: actionButtons.slice(0, 2).map((button, idx) => /* @__PURE__ */ jsxRuntime.jsx(
786
- reactComponents.Button,
787
- {
788
- appearance: "outline",
789
- shape: "circular",
790
- style: {
791
- flex: 1,
792
- borderColor: reactComponents.tokens.colorBrandBackground,
793
- color: reactComponents.tokens.colorBrandBackground
794
- },
795
- icon: button.icon,
796
- size: "medium",
797
- onClick: button.onClick,
798
- children: button.label
799
- },
800
- idx
801
- )) })
802
- ] }),
803
- /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Card, { className: styles.ticketRightCard, children: [
804
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.priceCard, children: [
805
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "0.25rem" }, children: [
806
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: "Total harga" }),
807
- /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Title3, { style: { display: "flex", flexDirection: "row", alignItems: "center" }, children: [
808
- "IDR ",
809
- price
810
- ] })
811
- ] }),
812
- /* @__PURE__ */ jsxRuntime.jsx(
813
- reactComponents.Button,
814
- {
815
- onClick: primaryButton.onClick,
816
- appearance: "primary",
817
- size: "medium",
818
- shape: "circular",
819
- icon: primaryButton.icon,
820
- style: { backgroundColor: "#58C91B" },
821
- children: primaryButton.label
822
- }
823
- )
824
- ] }),
825
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.facilitiesSection, children: [
826
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: "Fasilitas" }),
827
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.facilitiesList, children: facilities.map((facility, idx) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.facilityItem, children: [
828
- facilityIcon || /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u2713" }),
829
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1Strong, { children: facility })
830
- ] }, idx)) })
831
- ] }),
832
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "none" }, children: Array.from({ length: 5 }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
833
- "div",
834
- {
835
- className: styles.circularRight,
836
- style: {
837
- top: `${18 + index * 60}px`
838
- }
839
- },
840
- index
841
- )) })
842
- ] })
1129
+ }
1130
+ )
843
1131
  ] });
844
1132
  };
845
1133
  var BackgroundTicketCard = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
@@ -1019,7 +1307,7 @@ var BackgroundTicketCardVertical = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
1019
1307
  }
1020
1308
  );
1021
1309
  var BackgroundTicketCardVertical_default = BackgroundTicketCardVertical;
1022
- var useStyles6 = reactComponents.makeStyles({
1310
+ var useStyles5 = reactComponents.makeStyles({
1023
1311
  card: {
1024
1312
  width: "100%",
1025
1313
  boxSizing: "border-box",
@@ -1160,7 +1448,7 @@ var CardServiceMenu = ({
1160
1448
  showDescriptions = true,
1161
1449
  className
1162
1450
  }) => {
1163
- const styles = useStyles6();
1451
+ const styles = useStyles5();
1164
1452
  const getMenuItemClass = (serviceId) => {
1165
1453
  const isActive = activeServiceId === serviceId;
1166
1454
  return reactComponents.mergeClasses(
@@ -1200,34 +1488,6 @@ var CardServiceMenu = ({
1200
1488
  ] }, item.id);
1201
1489
  }) }) });
1202
1490
  };
1203
-
1204
- // src/constants/generated/tokensV2.ts
1205
- var brandColors = {
1206
- "10": "#001a1bff",
1207
- "20": "#02383bff",
1208
- "30": "#002426",
1209
- "40": "#004044",
1210
- "50": "#005D62",
1211
- "60": "#007A81",
1212
- "70": "#00969F",
1213
- "80": "#00B3BD",
1214
- "90": "#29BFC8",
1215
- "100": "#52CBD2",
1216
- "110": "#7AD7DD",
1217
- "120": "#A3E4E7",
1218
- "130": "#CCF0F2",
1219
- "140": "#E1F7F8",
1220
- "150": "#fdfdff",
1221
- "160": "#ffffff"
1222
- };
1223
- var fontWeight = {
1224
- "Medium": 500};
1225
- var sharedColors = {
1226
- "Shared_Cranberry_Primary": "#c50f1f"};
1227
- var lightModeColors = {
1228
- "Brand_Stroke_1_Rest": "#00B3BD"};
1229
- var tokensV2_default = {
1230
- lightModeColors};
1231
1491
  var DatePickerInput = React5.forwardRef(
1232
1492
  ({
1233
1493
  field,
@@ -1320,7 +1580,7 @@ var DatePickerInput = React5.forwardRef(
1320
1580
  DatePickerInput.displayName = "DatePickerInput";
1321
1581
  var DatePickerInput_default = DatePickerInput;
1322
1582
  var PhoneInput = PhoneInputComponent__default.default.default || PhoneInputComponent__default.default;
1323
- var useStyles7 = reactComponents.makeStyles({
1583
+ var useStyles6 = reactComponents.makeStyles({
1324
1584
  field: {
1325
1585
  display: "flex",
1326
1586
  flexDirection: "column",
@@ -1563,7 +1823,7 @@ var InputDynamic = ({
1563
1823
  contentAfter,
1564
1824
  onChange
1565
1825
  }) => {
1566
- const styles = useStyles7();
1826
+ const styles = useStyles6();
1567
1827
  const [showPassword, setShowPassword] = React5.useState(false);
1568
1828
  const [isPhoneMode, setIsPhoneMode] = React5.useState(false);
1569
1829
  const [emailOrPhoneType, setEmailOrPhoneType] = React5.useState("none");
@@ -2671,90 +2931,7 @@ var DEFAULT_LABELS = {
2671
2931
  placeholderPassenger: "Select Number of Passengers"
2672
2932
  }
2673
2933
  };
2674
-
2675
- // src/constants/generated/tokens.ts
2676
- var brandColors2 = {
2677
- "10": "#000000",
2678
- "20": "#03060e",
2679
- "30": "#060b1c",
2680
- "40": "#09112a",
2681
- "50": "#0c1738",
2682
- "60": "#122255",
2683
- "70": "#182e71",
2684
- "80": "#1e398d",
2685
- "90": "#4b60a4",
2686
- "100": "#7787bb",
2687
- "110": "#a4afd1",
2688
- "120": "#bac2dd",
2689
- "130": "#d0d6e8",
2690
- "140": "#e7e9f4",
2691
- "150": "#fdfdff",
2692
- "160": "#ffffff"
2693
- };
2694
-
2695
- // src/constants/brandColors.ts
2696
- var isV2Path = typeof window !== "undefined" && window.location.pathname.startsWith("/v2");
2697
- var brandColors3 = !isV2Path ? brandColors : brandColors2;
2698
- var customBrand = {
2699
- 10: brandColors3["10"],
2700
- 20: brandColors3["20"],
2701
- 30: brandColors3["30"],
2702
- 40: brandColors3["40"],
2703
- 50: brandColors3["50"],
2704
- 60: brandColors3["60"],
2705
- 70: brandColors3["70"],
2706
- 80: brandColors3["80"],
2707
- 90: brandColors3["90"],
2708
- 100: brandColors3["100"],
2709
- 110: brandColors3["110"],
2710
- 120: brandColors3["120"],
2711
- 130: brandColors3["130"],
2712
- 140: brandColors3["140"],
2713
- 150: brandColors3["150"],
2714
- 160: brandColors3["160"]
2715
- };
2716
-
2717
- // src/constants/designTokens.ts
2718
- typeof window !== "undefined" && window.location.pathname.startsWith("/v2");
2719
- var designTokens = {
2720
- // Breakpoints for responsive design
2721
- breakpoints: {
2722
- md: "768px",
2723
- lg: "1024px",
2724
- xl: "1200px"}};
2725
-
2726
- // src/constants/themes.ts
2727
- var extendedTokens = {
2728
- breakpointMd: designTokens.breakpoints.md,
2729
- breakpointLg: designTokens.breakpoints.lg,
2730
- breakpointXl: designTokens.breakpoints.xl};
2731
- ({
2732
- ...reactComponents.createLightTheme(customBrand),
2733
- // Brand colors from Figma
2734
- colorBrandBackground: customBrand[80],
2735
- colorBrandBackgroundHover: customBrand[70],
2736
- colorBrandBackgroundPressed: customBrand[60],
2737
- colorBrandBackgroundSelected: customBrand[80],
2738
- colorBrandForeground1: customBrand[80],
2739
- colorBrandForeground2: customBrand[70],
2740
- colorBrandForegroundLink: customBrand[70],
2741
- colorBrandForegroundLinkHover: customBrand[60],
2742
- colorBrandForegroundLinkPressed: customBrand[50],
2743
- colorBrandForegroundLinkSelected: customBrand[70]});
2744
- ({
2745
- ...reactComponents.createDarkTheme(customBrand),
2746
- // Brand colors from Figma (inverted for dark mode)
2747
- colorBrandBackground: customBrand[100],
2748
- colorBrandBackgroundHover: customBrand[110],
2749
- colorBrandBackgroundPressed: customBrand[120],
2750
- colorBrandBackgroundSelected: customBrand[100],
2751
- colorBrandForeground1: customBrand[100],
2752
- colorBrandForeground2: customBrand[110],
2753
- colorBrandForegroundLink: customBrand[110],
2754
- colorBrandForegroundLinkHover: customBrand[120],
2755
- colorBrandForegroundLinkPressed: customBrand[130],
2756
- colorBrandForegroundLinkSelected: customBrand[110]});
2757
- var useStyles8 = reactComponents.makeStyles({
2934
+ var useStyles7 = reactComponents.makeStyles({
2758
2935
  card: {
2759
2936
  position: "relative",
2760
2937
  width: "100%",
@@ -2889,7 +3066,7 @@ var CardTicketSearch = ({
2889
3066
  showPassengerField = false,
2890
3067
  showRoundTrip = true
2891
3068
  }) => {
2892
- const styles = useStyles8();
3069
+ const styles = useStyles7();
2893
3070
  const labels = React5__default.default.useMemo(
2894
3071
  () => ({ ...DEFAULT_LABELS[language], ...customLabels }),
2895
3072
  [language, customLabels]
@@ -3274,32 +3451,429 @@ var CardTicketSearch = ({
3274
3451
  )
3275
3452
  ] });
3276
3453
  };
3277
- var useStyles9 = reactComponents.makeStyles({
3278
- dialogTitle: {
3279
- display: "flex",
3280
- justifyContent: "space-between",
3281
- alignItems: "center",
3282
- paddingRight: "8px"
3283
- },
3284
- dialogSurface: {
3285
- maxWidth: "600px",
3286
- width: "100%"
3454
+
3455
+ // src/components/CardTicketSearchSummary/CardTicketSearchSummary.constants.ts
3456
+ var DEFAULT_LABELS2 = {
3457
+ originHarbor: "Pelabuhan Keberangkatan",
3458
+ destinationHarbor: "Pelabuhan Tujuan",
3459
+ departureDate: "Tanggal Keberangkatan",
3460
+ serviceClass: "Kelas Layanan",
3461
+ typeOfService: "Jenis Layanan",
3462
+ totalPassengers: "Jumlah Penumpang",
3463
+ changeSearchButton: "Ganti Pencarian"
3464
+ };
3465
+ var useStyles8 = reactComponents.makeStyles({
3466
+ cardSearchTicket: {
3467
+ borderRadius: "32px",
3468
+ // borderBottomLeftRadius: '0',
3469
+ // borderBottomRightRadius: '0',
3470
+ padding: "3rem",
3471
+ paddingBottom: "8rem",
3472
+ position: "relative",
3473
+ overflow: "visible",
3474
+ // boxShadow: '0 0 2px rgba(0,0,0,0.12), 0 -8px 16px rgba(0,0,0,0.14)',
3475
+ // boxShadow: 'none',
3476
+ borderBottom: "none",
3477
+ [`@media (max-width: ${extendedTokens.breakpointLg})`]: {
3478
+ padding: "2rem",
3479
+ paddingBottom: "6rem"
3480
+ },
3481
+ [`@media (max-width: ${extendedTokens.breakpointMd})`]: {
3482
+ padding: "1rem",
3483
+ paddingBottom: "5rem"
3484
+ }
3287
3485
  },
3288
- closeButton: {
3289
- minWidth: "32px",
3290
- minHeight: "32px"
3486
+ paddingResponsive: {
3487
+ [`@media (max-width: ${extendedTokens.breakpointXxxl})`]: {
3488
+ padding: "5px"
3489
+ }
3291
3490
  },
3292
- content: {
3491
+ formField: {
3492
+ padding: "12px",
3293
3493
  display: "flex",
3294
3494
  flexDirection: "column",
3295
3495
  gap: "0px",
3296
- paddingTop: "10px",
3297
- paddingLeft: "10px",
3298
- paddingRight: "10px"
3299
- },
3300
- searchInput: {
3301
- width: "100%",
3302
- marginBottom: "16px"
3496
+ borderRadius: reactComponents.tokens.borderRadiusXLarge,
3497
+ border: "1px solid " + reactComponents.tokens.colorNeutralStroke1,
3498
+ height: "100%"
3499
+ },
3500
+ field: {
3501
+ display: "flex",
3502
+ flexDirection: "column",
3503
+ gap: reactComponents.tokens.spacingVerticalXS
3504
+ },
3505
+ buttonSwitch: {
3506
+ background: reactComponents.tokens.colorNeutralBackground1,
3507
+ boxShadow: `0 1px 2px 0 ${reactComponents.tokens.colorNeutralShadowKey}, 0 0 2px 0 ${reactComponents.tokens.colorNeutralShadowAmbient}`
3508
+ },
3509
+ buttonSearchContainer: {
3510
+ display: "flex",
3511
+ justifyContent: "center",
3512
+ alignItems: "center",
3513
+ height: "100%",
3514
+ width: "100%"
3515
+ },
3516
+ filterButtonContainer: {
3517
+ marginTop: "1rem",
3518
+ display: "flex",
3519
+ gap: "1rem"
3520
+ // flexWrap: 'wrap',
3521
+ },
3522
+ circular: {
3523
+ position: "absolute",
3524
+ width: "clamp(40px, 7vw, 90px)",
3525
+ height: "clamp(40px, 7vw, 90px)",
3526
+ borderRadius: "50% 50% 0 0",
3527
+ backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover,
3528
+ bottom: "-10px",
3529
+ boxShadow: "inset 0 2px 0px rgba(0, 0, 0, 0.1)"
3530
+ }
3531
+ });
3532
+ var CardTicketSearchSummary = ({
3533
+ originHarbor,
3534
+ destinationHarbor,
3535
+ departureDate,
3536
+ serviceClass,
3537
+ typeOfService,
3538
+ totalPassengers,
3539
+ onChangeSearch,
3540
+ labels,
3541
+ showSwapButton = false,
3542
+ children
3543
+ }) => {
3544
+ const styles = useStyles8();
3545
+ const mergedLabels = { ...DEFAULT_LABELS2, ...labels };
3546
+ const { width } = useWindowSize();
3547
+ const getCircularConfig = () => {
3548
+ if (width <= parseInt(extendedTokens.breakpointXs))
3549
+ return { count: 4, spacing: 65, size: 30, height: 30 };
3550
+ if (width <= parseInt(extendedTokens.breakpointSm))
3551
+ return { count: 5, spacing: 71, size: 40, height: 40 };
3552
+ if (width <= parseInt(extendedTokens.breakpointMd))
3553
+ return { count: 8, spacing: 87, size: 50, height: 50 };
3554
+ if (width <= parseInt(extendedTokens.breakpointLg))
3555
+ return { count: 9, spacing: 100, size: 60, height: 60 };
3556
+ if (width <= parseInt(extendedTokens.breakpointXl))
3557
+ return { count: 8, spacing: 115, size: 70, height: 70 };
3558
+ if (width <= parseInt(extendedTokens.breakpointXxl))
3559
+ return { count: 8, spacing: 136, size: 90, height: 90 };
3560
+ if (width <= parseInt(extendedTokens.breakpointXxxl))
3561
+ return { count: 8, spacing: 136, size: 90, height: 90 };
3562
+ return { count: 11, spacing: 136, size: 100, height: 90 };
3563
+ };
3564
+ const circularConfig = getCircularConfig();
3565
+ return /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Card, { className: styles.cardSearchTicket, children: [
3566
+ /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { children: [
3567
+ /* @__PURE__ */ jsxRuntime.jsx(
3568
+ reactGridSystem.Col,
3569
+ {
3570
+ xs: 12,
3571
+ sm: 12,
3572
+ md: 12,
3573
+ lg: 12,
3574
+ xl: 12,
3575
+ xxl: 5,
3576
+ xxxl: 5,
3577
+ className: styles.paddingResponsive,
3578
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.formField, children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { padding: "12px" }, children: [
3579
+ /* @__PURE__ */ jsxRuntime.jsx(
3580
+ reactGridSystem.Col,
3581
+ {
3582
+ xs: 12,
3583
+ sm: 12,
3584
+ md: 12,
3585
+ lg: 12,
3586
+ xl: 12,
3587
+ xxl: 5,
3588
+ xxxl: 5,
3589
+ className: styles.paddingResponsive,
3590
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Field, { label: mergedLabels.originHarbor, className: styles.field, children: /* @__PURE__ */ jsxRuntime.jsx(
3591
+ reactComponents.Input,
3592
+ {
3593
+ name: "from",
3594
+ disabled: true,
3595
+ type: "text",
3596
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3597
+ react.Icon,
3598
+ {
3599
+ icon: "fluent:vehicle-ship-16-filled",
3600
+ color: reactComponents.tokens.colorNeutralForegroundDisabled
3601
+ }
3602
+ ),
3603
+ value: originHarbor,
3604
+ appearance: "outline",
3605
+ size: "medium"
3606
+ }
3607
+ ) })
3608
+ }
3609
+ ),
3610
+ /* @__PURE__ */ jsxRuntime.jsx(
3611
+ reactGridSystem.Col,
3612
+ {
3613
+ xs: 12,
3614
+ sm: 12,
3615
+ md: 12,
3616
+ lg: 12,
3617
+ xl: 12,
3618
+ xxl: 1,
3619
+ xxxl: 1,
3620
+ className: styles.paddingResponsive,
3621
+ style: {
3622
+ display: "flex",
3623
+ alignItems: "center",
3624
+ justifyContent: "center"
3625
+ },
3626
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Visible, { lg: true, xl: true, xxl: true, xxxl: true, children: /* @__PURE__ */ jsxRuntime.jsx(
3627
+ reactComponents.Button,
3628
+ {
3629
+ className: styles.buttonSwitch,
3630
+ shape: "circular",
3631
+ disabled: true,
3632
+ appearance: "secondary",
3633
+ size: "medium",
3634
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:arrow-swap-24-filled" })
3635
+ }
3636
+ ) })
3637
+ }
3638
+ ),
3639
+ /* @__PURE__ */ jsxRuntime.jsx(
3640
+ reactGridSystem.Col,
3641
+ {
3642
+ xs: 12,
3643
+ sm: 12,
3644
+ md: 12,
3645
+ lg: 12,
3646
+ xl: 12,
3647
+ xxl: 6,
3648
+ xxxl: 6,
3649
+ className: styles.paddingResponsive,
3650
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Field, { label: mergedLabels.destinationHarbor, className: styles.field, children: /* @__PURE__ */ jsxRuntime.jsx(
3651
+ reactComponents.Input,
3652
+ {
3653
+ name: "to",
3654
+ type: "text",
3655
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3656
+ react.Icon,
3657
+ {
3658
+ icon: "fluent:location-24-filled",
3659
+ color: reactComponents.tokens.colorNeutralForegroundDisabled
3660
+ }
3661
+ ),
3662
+ disabled: true,
3663
+ appearance: "outline",
3664
+ size: "medium",
3665
+ value: destinationHarbor
3666
+ }
3667
+ ) })
3668
+ }
3669
+ )
3670
+ ] }) })
3671
+ }
3672
+ ),
3673
+ /* @__PURE__ */ jsxRuntime.jsx(
3674
+ reactGridSystem.Col,
3675
+ {
3676
+ xs: 12,
3677
+ sm: 12,
3678
+ md: 12,
3679
+ lg: 12,
3680
+ xl: 12,
3681
+ xxl: 5,
3682
+ xxxl: 5,
3683
+ className: styles.paddingResponsive,
3684
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.formField, children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { height: "100%", alignItems: "center" }, children: [
3685
+ /* @__PURE__ */ jsxRuntime.jsx(
3686
+ reactGridSystem.Col,
3687
+ {
3688
+ xs: 12,
3689
+ sm: 12,
3690
+ md: 6,
3691
+ lg: 6,
3692
+ xl: 6,
3693
+ xxl: 3,
3694
+ xxxl: 3,
3695
+ className: styles.paddingResponsive,
3696
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Field, { className: styles.field, children: /* @__PURE__ */ jsxRuntime.jsx(
3697
+ reactComponents.Input,
3698
+ {
3699
+ name: "startDate",
3700
+ type: "text",
3701
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3702
+ react.Icon,
3703
+ {
3704
+ icon: "fluent:calendar-24-regular",
3705
+ color: reactComponents.tokens.colorNeutralForegroundDisabled
3706
+ }
3707
+ ),
3708
+ disabled: true,
3709
+ appearance: "outline",
3710
+ size: "medium",
3711
+ value: departureDate
3712
+ }
3713
+ ) })
3714
+ }
3715
+ ),
3716
+ /* @__PURE__ */ jsxRuntime.jsx(
3717
+ reactGridSystem.Col,
3718
+ {
3719
+ xs: 12,
3720
+ sm: 12,
3721
+ md: 6,
3722
+ lg: 6,
3723
+ xl: 6,
3724
+ xxl: 3,
3725
+ xxxl: 3,
3726
+ className: styles.paddingResponsive,
3727
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Label, { className: styles.field, children: /* @__PURE__ */ jsxRuntime.jsx(
3728
+ reactComponents.Input,
3729
+ {
3730
+ name: "serviceClass",
3731
+ type: "text",
3732
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3733
+ react.Icon,
3734
+ {
3735
+ icon: "fluent:ribbon-star-24-regular",
3736
+ color: reactComponents.tokens.colorNeutralForegroundDisabled
3737
+ }
3738
+ ),
3739
+ disabled: true,
3740
+ appearance: "outline",
3741
+ size: "medium",
3742
+ value: serviceClass
3743
+ }
3744
+ ) })
3745
+ }
3746
+ ),
3747
+ /* @__PURE__ */ jsxRuntime.jsx(
3748
+ reactGridSystem.Col,
3749
+ {
3750
+ xs: 12,
3751
+ sm: 12,
3752
+ md: 6,
3753
+ lg: 6,
3754
+ xl: 6,
3755
+ xxl: 3,
3756
+ xxxl: 3,
3757
+ className: styles.paddingResponsive,
3758
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Field, { className: styles.field, children: /* @__PURE__ */ jsxRuntime.jsx(
3759
+ reactComponents.Input,
3760
+ {
3761
+ type: "text",
3762
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3763
+ react.Icon,
3764
+ {
3765
+ icon: "fluent:vehicle-car-24-regular",
3766
+ color: reactComponents.tokens.colorNeutralForegroundDisabled
3767
+ }
3768
+ ),
3769
+ disabled: true,
3770
+ appearance: "outline",
3771
+ size: "medium",
3772
+ value: typeOfService
3773
+ }
3774
+ ) })
3775
+ }
3776
+ ),
3777
+ /* @__PURE__ */ jsxRuntime.jsx(
3778
+ reactGridSystem.Col,
3779
+ {
3780
+ xs: 12,
3781
+ sm: 12,
3782
+ md: 6,
3783
+ lg: 6,
3784
+ xl: 6,
3785
+ xxl: 3,
3786
+ xxxl: 3,
3787
+ className: styles.paddingResponsive,
3788
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Field, { className: styles.field, children: /* @__PURE__ */ jsxRuntime.jsx(
3789
+ reactComponents.Input,
3790
+ {
3791
+ name: "passenger",
3792
+ type: "text",
3793
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3794
+ react.Icon,
3795
+ {
3796
+ icon: "fluent:people-24-regular",
3797
+ color: reactComponents.tokens.colorNeutralForegroundDisabled
3798
+ }
3799
+ ),
3800
+ disabled: true,
3801
+ appearance: "outline",
3802
+ size: "medium",
3803
+ value: totalPassengers
3804
+ }
3805
+ ) })
3806
+ }
3807
+ )
3808
+ ] }) })
3809
+ }
3810
+ ),
3811
+ /* @__PURE__ */ jsxRuntime.jsx(
3812
+ reactGridSystem.Col,
3813
+ {
3814
+ xs: 12,
3815
+ sm: 12,
3816
+ md: 12,
3817
+ lg: 12,
3818
+ xl: 12,
3819
+ xxl: 2,
3820
+ xxxl: 2,
3821
+ className: styles.paddingResponsive,
3822
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.buttonSearchContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
3823
+ reactComponents.Button,
3824
+ {
3825
+ type: "button",
3826
+ appearance: "primary",
3827
+ size: "medium",
3828
+ style: { width: "100%", borderRadius: reactComponents.tokens.borderRadiusCircular },
3829
+ iconPosition: "before",
3830
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:search-24-filled" }),
3831
+ onClick: onChangeSearch,
3832
+ children: mergedLabels.changeSearchButton
3833
+ }
3834
+ ) })
3835
+ }
3836
+ )
3837
+ ] }),
3838
+ children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.filterButtonContainer, children }),
3839
+ Array.from({ length: circularConfig.count }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
3840
+ "div",
3841
+ {
3842
+ className: styles.circular,
3843
+ style: {
3844
+ left: `${30 + index * circularConfig.spacing}px`
3845
+ }
3846
+ },
3847
+ index
3848
+ ))
3849
+ ] });
3850
+ };
3851
+ var useStyles9 = reactComponents.makeStyles({
3852
+ dialogTitle: {
3853
+ display: "flex",
3854
+ justifyContent: "space-between",
3855
+ alignItems: "center",
3856
+ paddingRight: "8px"
3857
+ },
3858
+ dialogSurface: {
3859
+ maxWidth: "600px",
3860
+ width: "100%"
3861
+ },
3862
+ closeButton: {
3863
+ minWidth: "32px",
3864
+ minHeight: "32px"
3865
+ },
3866
+ content: {
3867
+ display: "flex",
3868
+ flexDirection: "column",
3869
+ gap: "0px",
3870
+ paddingTop: "10px",
3871
+ paddingLeft: "10px",
3872
+ paddingRight: "10px"
3873
+ },
3874
+ searchInput: {
3875
+ width: "100%",
3876
+ marginBottom: "16px"
3303
3877
  },
3304
3878
  resultList: {
3305
3879
  display: "flex",
@@ -3646,7 +4220,8 @@ var ModalSelectDate = ({
3646
4220
  onTabChange,
3647
4221
  minDate = /* @__PURE__ */ new Date(),
3648
4222
  maxDate,
3649
- dateFormat = "DD MMMM YYYY"
4223
+ dateFormat = "DD MMMM YYYY",
4224
+ showRoundtrip = true
3650
4225
  }) => {
3651
4226
  const styles = useStyles10();
3652
4227
  const [selectedDate, setSelectedDate] = React5.useState(selectedDepartureDate);
@@ -3825,7 +4400,7 @@ var ModalSelectDate = ({
3825
4400
  children: "Sekali Jalan"
3826
4401
  }
3827
4402
  ),
3828
- /* @__PURE__ */ jsxRuntime.jsx(
4403
+ showRoundtrip && /* @__PURE__ */ jsxRuntime.jsx(
3829
4404
  "button",
3830
4405
  {
3831
4406
  className: `${styles.tab} ${activeTab === "round-trip" ? styles.tabActive : ""}`,
@@ -4637,6 +5212,1224 @@ var DEFAULT_VEHICLE_ICONS = {
4637
5212
  looseLoad: "/assets/images/icons/loose-load.webp"
4638
5213
  };
4639
5214
 
5215
+ // src/components/SortMenu/SortMenu.constants.ts
5216
+ var DEFAULT_SORT_OPTIONS = [
5217
+ { value: "rekomendasi", label: "Rekomendasi" },
5218
+ { value: "harga-tertinggi", label: "Harga Tertinggi" },
5219
+ { value: "harga-terendah", label: "Harga Terendah" },
5220
+ { value: "keberangkatan-paling-awal", label: "Keberangkatan Paling Awal" },
5221
+ { value: "keberangkatan-paling-akhir", label: "Keberangkatan Paling Akhir" }
5222
+ ];
5223
+ var getSortLabel = (value) => {
5224
+ const option = DEFAULT_SORT_OPTIONS.find((opt) => opt.value === value);
5225
+ return option?.label || "Rekomendasi";
5226
+ };
5227
+ var useStyles14 = reactComponents.makeStyles({
5228
+ container: {
5229
+ display: "flex",
5230
+ width: "100%",
5231
+ gap: reactComponents.tokens.spacingHorizontalM,
5232
+ "@media (max-width: 768px)": {
5233
+ flexDirection: "column",
5234
+ gap: reactComponents.tokens.spacingVerticalS
5235
+ }
5236
+ },
5237
+ divider: {
5238
+ width: "100%",
5239
+ maxWidth: "min-content",
5240
+ "@media (max-width: 768px)": {
5241
+ display: "none"
5242
+ }
5243
+ },
5244
+ button: {
5245
+ borderRadius: reactComponents.tokens.borderRadiusCircular,
5246
+ color: reactComponents.tokens.colorBrandBackground,
5247
+ border: "1px solid " + reactComponents.tokens.colorBrandBackground
5248
+ }
5249
+ });
5250
+ var SortMenu = ({
5251
+ value,
5252
+ onChange,
5253
+ totalActiveFilters = 0,
5254
+ onFilterClick,
5255
+ onClearFilters,
5256
+ sortOptions = DEFAULT_SORT_OPTIONS,
5257
+ filterButtonText = "Filter",
5258
+ sortButtonText = "Urutkan Berdasarkan",
5259
+ clearFiltersText = "{count} Filter Dipilih"
5260
+ }) => {
5261
+ const styles = useStyles14();
5262
+ const handleReset = () => {
5263
+ onChange("rekomendasi");
5264
+ };
5265
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.container, children: [
5266
+ onFilterClick && /* @__PURE__ */ jsxRuntime.jsx(
5267
+ reactComponents.Button,
5268
+ {
5269
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:filter-16-regular" }),
5270
+ size: "medium",
5271
+ type: "button",
5272
+ appearance: "outline",
5273
+ shape: "circular",
5274
+ className: styles.button,
5275
+ onClick: onFilterClick,
5276
+ children: filterButtonText
5277
+ }
5278
+ ),
5279
+ /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Menu, { children: [
5280
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.MenuTrigger, { disableButtonEnhancement: true, children: /* @__PURE__ */ jsxRuntime.jsx(
5281
+ reactComponents.Button,
5282
+ {
5283
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:arrow-sort-16-regular" }),
5284
+ size: "medium",
5285
+ type: "button",
5286
+ shape: "circular",
5287
+ className: styles.button,
5288
+ children: sortButtonText
5289
+ }
5290
+ ) }),
5291
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.MenuPopover, { children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.MenuList, { children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.RadioGroup, { value, onChange: (_, data) => onChange(data.value), children: sortOptions.map((option) => /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Radio, { value: option.value, label: option.label }, option.value)) }) }) })
5292
+ ] }),
5293
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, { vertical: true, className: styles.divider }),
5294
+ /* @__PURE__ */ jsxRuntime.jsx(
5295
+ reactComponents.Button,
5296
+ {
5297
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-32-regular" }),
5298
+ size: "medium",
5299
+ iconPosition: "after",
5300
+ onClick: handleReset,
5301
+ type: "button",
5302
+ shape: "circular",
5303
+ className: styles.button,
5304
+ children: getSortLabel(value)
5305
+ }
5306
+ ),
5307
+ totalActiveFilters > 0 && onClearFilters && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5308
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, { vertical: true, className: styles.divider }),
5309
+ /* @__PURE__ */ jsxRuntime.jsx(
5310
+ reactComponents.Button,
5311
+ {
5312
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-32-regular" }),
5313
+ size: "medium",
5314
+ iconPosition: "after",
5315
+ type: "button",
5316
+ onClick: onClearFilters,
5317
+ shape: "circular",
5318
+ className: styles.button,
5319
+ children: clearFiltersText.replace("{count}", totalActiveFilters.toString())
5320
+ }
5321
+ )
5322
+ ] })
5323
+ ] });
5324
+ };
5325
+
5326
+ // src/components/ModalFilterTicket/ModalFilterTicket.constants.ts
5327
+ var DEFAULT_LABELS3 = {
5328
+ title: "Filter dengan",
5329
+ serviceTypeLabel: "Jenis Layanan",
5330
+ departureTimeLabel: "Waktu pergi",
5331
+ arrivalTimeLabel: "Waktu tiba",
5332
+ priceLabel: "Harga",
5333
+ priceRangeText: (min, max) => {
5334
+ const formatPrice = (price) => new Intl.NumberFormat("id-ID").format(price);
5335
+ return `Mulai dari IDR ${formatPrice(min)} - ${formatPrice(max)}`;
5336
+ },
5337
+ durationLabel: "Durasi perjalanan",
5338
+ durationRangeText: (min, max) => `Perjalanan ${min} - ${max} jam`,
5339
+ resetButton: "Reset",
5340
+ applyButton: "Terapkan"
5341
+ };
5342
+ var DEFAULT_SERVICE_TYPES = [
5343
+ { value: "ropax-regular", label: "Ropax Regular" },
5344
+ { value: "ropax-express", label: "Ropax Express" },
5345
+ { value: "fast-ferry", label: "Fast Ferry" },
5346
+ { value: "bus-air", label: "Bus Air" },
5347
+ { value: "water-taxi", label: "Water Taxi" },
5348
+ { value: "pctc", label: "PCTC" },
5349
+ { value: "pcc", label: "PCC" }
5350
+ ];
5351
+ var DEFAULT_TIME_SLOTS = [
5352
+ { value: "00:00 - 06:00", label: "00:00 - 06:00" },
5353
+ { value: "06:00 - 12:00", label: "06:00 - 12:00" },
5354
+ { value: "12:00 - 18:00", label: "12:00 - 18:00" },
5355
+ { value: "18:00 - 24:00", label: "18:00 - 24:00" }
5356
+ ];
5357
+ var DEFAULT_PRICE_RANGE = {
5358
+ min: 2e5,
5359
+ max: 8e5
5360
+ };
5361
+ var DEFAULT_DURATION_RANGE = {
5362
+ min: 0,
5363
+ max: 8
5364
+ };
5365
+ var useStyles15 = reactComponents.makeStyles({
5366
+ dialogSurface: {
5367
+ maxWidth: "600px",
5368
+ width: "100%"
5369
+ },
5370
+ content: {
5371
+ display: "flex",
5372
+ flexDirection: "column",
5373
+ gap: reactComponents.tokens.spacingHorizontalXXL,
5374
+ paddingTop: reactComponents.tokens.spacingVerticalMNudge,
5375
+ paddingLeft: reactComponents.tokens.spacingHorizontalSNudge,
5376
+ paddingRight: reactComponents.tokens.spacingHorizontalSNudge,
5377
+ paddingBottom: reactComponents.tokens.spacingHorizontalXL,
5378
+ maxHeight: "70vh",
5379
+ overflowY: "auto"
5380
+ },
5381
+ closeButton: {
5382
+ minWidth: "32px",
5383
+ minHeight: "32px"
5384
+ },
5385
+ section: {
5386
+ display: "flex",
5387
+ flexDirection: "column",
5388
+ gap: "12px"
5389
+ },
5390
+ containerRange: {
5391
+ display: "flex",
5392
+ flexDirection: "column",
5393
+ gap: reactComponents.tokens.spacingVerticalM
5394
+ },
5395
+ spaceText: {
5396
+ display: "flex",
5397
+ flexDirection: "column",
5398
+ gap: reactComponents.tokens.spacingHorizontalXXS
5399
+ },
5400
+ sliderContainer: {
5401
+ display: "flex",
5402
+ flexDirection: "column",
5403
+ gap: reactComponents.tokens.spacingVerticalS,
5404
+ ...reactComponents.shorthands.padding(reactComponents.tokens.spacingHorizontalNone, reactComponents.tokens.spacingHorizontalSNudge)
5405
+ },
5406
+ sliderValues: {
5407
+ display: "flex",
5408
+ justifyContent: "space-between",
5409
+ fontSize: reactComponents.tokens.fontSizeBase200,
5410
+ color: reactComponents.tokens.colorNeutralForeground2,
5411
+ marginTop: reactComponents.tokens.spacingVerticalXS
5412
+ },
5413
+ footerButtons: {
5414
+ display: "flex",
5415
+ gap: reactComponents.tokens.spacingVerticalM,
5416
+ justifyContent: "flex-end",
5417
+ paddingTop: reactComponents.tokens.spacingVerticalL
5418
+ },
5419
+ checkboxWrapper: {
5420
+ "& label": {
5421
+ whiteSpace: "nowrap"
5422
+ }
5423
+ },
5424
+ buttonGrid: {
5425
+ display: "grid",
5426
+ gridTemplateColumns: "repeat(2, 1fr)",
5427
+ gap: "0.5rem"
5428
+ },
5429
+ outlinePrimary: {
5430
+ color: reactComponents.tokens.colorBrandBackground,
5431
+ ...reactComponents.shorthands.border("1px", "solid", reactComponents.tokens.colorBrandBackground),
5432
+ ":hover": {
5433
+ backgroundColor: reactComponents.tokens.colorBrandBackgroundHover,
5434
+ ...reactComponents.shorthands.borderColor(reactComponents.tokens.colorBrandBackgroundHover),
5435
+ color: reactComponents.tokens.colorNeutralForegroundOnBrand
5436
+ }
5437
+ },
5438
+ outlineDanger: {
5439
+ color: reactComponents.tokens.colorPaletteRedForeground1,
5440
+ ...reactComponents.shorthands.border("1px", "solid", reactComponents.tokens.colorPaletteRedForeground1),
5441
+ ":hover": {
5442
+ backgroundColor: reactComponents.tokens.colorPaletteRedBackground1,
5443
+ ...reactComponents.shorthands.borderColor(reactComponents.tokens.colorPaletteRedForeground1)
5444
+ }
5445
+ }
5446
+ });
5447
+ var ModalFilterTicket = ({
5448
+ open,
5449
+ onOpenChange,
5450
+ selectedServiceTypes,
5451
+ onServiceTypesChange,
5452
+ departureTime,
5453
+ onDepartureTimeChange,
5454
+ arrivalTime,
5455
+ onArrivalTimeChange,
5456
+ priceRange,
5457
+ onPriceRangeChange,
5458
+ durationRange,
5459
+ onDurationRangeChange,
5460
+ onReset,
5461
+ onApply,
5462
+ labels,
5463
+ serviceTypes = DEFAULT_SERVICE_TYPES,
5464
+ timeSlots = DEFAULT_TIME_SLOTS,
5465
+ minPrice = DEFAULT_PRICE_RANGE.min,
5466
+ maxPrice = DEFAULT_PRICE_RANGE.max,
5467
+ minDuration = DEFAULT_DURATION_RANGE.min,
5468
+ maxDuration = DEFAULT_DURATION_RANGE.max
5469
+ }) => {
5470
+ const styles = useStyles15();
5471
+ const mergedLabels = { ...DEFAULT_LABELS3, ...labels };
5472
+ const [rangeReady, setRangeReady] = React5.useState(false);
5473
+ React5.useEffect(() => {
5474
+ if (open) {
5475
+ const timer = setTimeout(() => {
5476
+ setRangeReady(true);
5477
+ }, 200);
5478
+ return () => {
5479
+ clearTimeout(timer);
5480
+ setRangeReady(false);
5481
+ };
5482
+ }
5483
+ }, [open]);
5484
+ const handleServiceTypeToggle = (value) => {
5485
+ if (selectedServiceTypes.includes(value)) {
5486
+ onServiceTypesChange(selectedServiceTypes.filter((s) => s !== value));
5487
+ } else {
5488
+ onServiceTypesChange([...selectedServiceTypes, value]);
5489
+ }
5490
+ };
5491
+ const handleDepartureTimeChange = (value, checked) => {
5492
+ if (checked) {
5493
+ onDepartureTimeChange([...departureTime, value]);
5494
+ } else {
5495
+ onDepartureTimeChange(departureTime.filter((t) => t !== value));
5496
+ }
5497
+ };
5498
+ const handleArrivalTimeChange = (value, checked) => {
5499
+ if (checked) {
5500
+ onArrivalTimeChange([...arrivalTime, value]);
5501
+ } else {
5502
+ onArrivalTimeChange(arrivalTime.filter((t) => t !== value));
5503
+ }
5504
+ };
5505
+ const formatPrice = (price) => {
5506
+ return new Intl.NumberFormat("id-ID").format(price);
5507
+ };
5508
+ const renderPriceTrack = React5.useCallback(
5509
+ ({ props, children }) => {
5510
+ const [value1, value2] = priceRange;
5511
+ const percent1 = (value1 - minPrice) / (maxPrice - minPrice) * 100;
5512
+ const percent2 = (value2 - minPrice) / (maxPrice - minPrice) * 100;
5513
+ return /* @__PURE__ */ jsxRuntime.jsxs(
5514
+ "div",
5515
+ {
5516
+ ...props,
5517
+ ref: props.ref,
5518
+ style: {
5519
+ ...props.style,
5520
+ height: "4px",
5521
+ width: "100%",
5522
+ backgroundColor: reactComponents.tokens.colorNeutralStroke2,
5523
+ borderRadius: reactComponents.tokens.borderRadiusSmall,
5524
+ position: "relative"
5525
+ },
5526
+ children: [
5527
+ /* @__PURE__ */ jsxRuntime.jsx(
5528
+ "div",
5529
+ {
5530
+ style: {
5531
+ position: "absolute",
5532
+ height: "100%",
5533
+ left: `${percent1}%`,
5534
+ right: `${100 - percent2}%`,
5535
+ backgroundColor: reactComponents.tokens.colorBrandBackground,
5536
+ borderRadius: reactComponents.tokens.borderRadiusSmall
5537
+ }
5538
+ }
5539
+ ),
5540
+ children
5541
+ ]
5542
+ }
5543
+ );
5544
+ },
5545
+ [priceRange, minPrice, maxPrice]
5546
+ );
5547
+ const renderDurationTrack = React5.useCallback(
5548
+ ({ props, children }) => {
5549
+ const [value1, value2] = durationRange;
5550
+ const percent1 = (value1 - minDuration) / (maxDuration - minDuration) * 100;
5551
+ const percent2 = (value2 - minDuration) / (maxDuration - minDuration) * 100;
5552
+ return /* @__PURE__ */ jsxRuntime.jsxs(
5553
+ "div",
5554
+ {
5555
+ ...props,
5556
+ ref: props.ref,
5557
+ style: {
5558
+ ...props.style,
5559
+ height: "4px",
5560
+ width: "100%",
5561
+ backgroundColor: reactComponents.tokens.colorNeutralStroke2,
5562
+ borderRadius: reactComponents.tokens.borderRadiusSmall,
5563
+ position: "relative"
5564
+ },
5565
+ children: [
5566
+ /* @__PURE__ */ jsxRuntime.jsx(
5567
+ "div",
5568
+ {
5569
+ style: {
5570
+ position: "absolute",
5571
+ height: "100%",
5572
+ left: `${percent1}%`,
5573
+ right: `${100 - percent2}%`,
5574
+ backgroundColor: reactComponents.tokens.colorBrandBackground,
5575
+ borderRadius: reactComponents.tokens.borderRadiusSmall
5576
+ }
5577
+ }
5578
+ ),
5579
+ children
5580
+ ]
5581
+ }
5582
+ );
5583
+ },
5584
+ [durationRange, minDuration, maxDuration]
5585
+ );
5586
+ const renderThumb = ({ props }) => /* @__PURE__ */ jsxRuntime.jsx(
5587
+ "div",
5588
+ {
5589
+ ...props,
5590
+ ref: props.ref,
5591
+ style: {
5592
+ ...props.style,
5593
+ height: "15px",
5594
+ width: "15px",
5595
+ borderRadius: "50%",
5596
+ backgroundColor: reactComponents.tokens.colorBrandBackground,
5597
+ display: "flex",
5598
+ justifyContent: "center",
5599
+ alignItems: "center",
5600
+ boxShadow: reactComponents.tokens.shadow4
5601
+ }
5602
+ }
5603
+ );
5604
+ return /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Dialog, { open, onOpenChange: (_, data) => onOpenChange(data.open), children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogSurface, { className: styles.dialogSurface, children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogBody, { children: [
5605
+ /* @__PURE__ */ jsxRuntime.jsx(
5606
+ reactComponents.DialogTitle,
5607
+ {
5608
+ action: /* @__PURE__ */ jsxRuntime.jsx(
5609
+ reactComponents.Button,
5610
+ {
5611
+ appearance: "subtle",
5612
+ "aria-label": "close",
5613
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-24-regular" }),
5614
+ className: styles.closeButton,
5615
+ onClick: () => onOpenChange(false)
5616
+ }
5617
+ ),
5618
+ children: mergedLabels.title
5619
+ }
5620
+ ),
5621
+ /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogContent, { className: styles.content, children: [
5622
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, {}),
5623
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.section, children: [
5624
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: mergedLabels.serviceTypeLabel }),
5625
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.buttonGrid, children: serviceTypes.map((service) => {
5626
+ const isSelected = selectedServiceTypes.includes(service.value);
5627
+ return /* @__PURE__ */ jsxRuntime.jsx(
5628
+ reactComponents.Button,
5629
+ {
5630
+ appearance: isSelected ? "primary" : "outline",
5631
+ className: isSelected ? "" : styles.outlinePrimary,
5632
+ size: "large",
5633
+ onClick: () => handleServiceTypeToggle(service.value),
5634
+ style: { width: "100%" },
5635
+ children: service.label
5636
+ },
5637
+ service.value
5638
+ );
5639
+ }) })
5640
+ ] }),
5641
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, {}),
5642
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.section, children: [
5643
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: mergedLabels.departureTimeLabel }),
5644
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Row, { children: timeSlots.map((slot) => /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 6, sm: 6, md: 6, lg: 3, xl: 3, xxl: 3, xxxl: 3, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.checkboxWrapper, children: /* @__PURE__ */ jsxRuntime.jsx(
5645
+ reactComponents.Checkbox,
5646
+ {
5647
+ label: slot.label,
5648
+ checked: departureTime.includes(slot.value),
5649
+ onChange: (_, data) => handleDepartureTimeChange(slot.value, data.checked)
5650
+ }
5651
+ ) }) }, slot.value)) })
5652
+ ] }),
5653
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, {}),
5654
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.section, children: [
5655
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: mergedLabels.arrivalTimeLabel }),
5656
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Row, { children: timeSlots.map((slot) => /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 6, sm: 6, md: 6, lg: 3, xl: 3, xxl: 3, xxxl: 3, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.checkboxWrapper, children: /* @__PURE__ */ jsxRuntime.jsx(
5657
+ reactComponents.Checkbox,
5658
+ {
5659
+ label: slot.label,
5660
+ checked: arrivalTime.includes(slot.value),
5661
+ onChange: (_, data) => handleArrivalTimeChange(slot.value, data.checked)
5662
+ }
5663
+ ) }) }, slot.value)) })
5664
+ ] }),
5665
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, {}),
5666
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.containerRange, children: [
5667
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.spaceText, children: [
5668
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: mergedLabels.priceLabel }),
5669
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: mergedLabels.priceRangeText(priceRange[0], priceRange[1]) })
5670
+ ] }),
5671
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.sliderContainer, children: [
5672
+ rangeReady && /* @__PURE__ */ jsxRuntime.jsx(
5673
+ reactRange.Range,
5674
+ {
5675
+ min: minPrice,
5676
+ max: maxPrice,
5677
+ values: priceRange,
5678
+ onChange: (values) => onPriceRangeChange(values),
5679
+ renderTrack: renderPriceTrack,
5680
+ renderThumb
5681
+ },
5682
+ open ? "open" : "closed"
5683
+ ),
5684
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.sliderValues, children: [
5685
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatPrice(minPrice) }),
5686
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatPrice(maxPrice) })
5687
+ ] })
5688
+ ] })
5689
+ ] }),
5690
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, {}),
5691
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.containerRange, children: [
5692
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.spaceText, children: [
5693
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: mergedLabels.durationLabel }),
5694
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: mergedLabels.durationRangeText(durationRange[0], durationRange[1]) })
5695
+ ] }),
5696
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.sliderContainer, children: [
5697
+ rangeReady && /* @__PURE__ */ jsxRuntime.jsx(
5698
+ reactRange.Range,
5699
+ {
5700
+ step: 1,
5701
+ min: minDuration,
5702
+ max: maxDuration,
5703
+ values: durationRange,
5704
+ onChange: (values) => onDurationRangeChange(values),
5705
+ renderTrack: renderDurationTrack,
5706
+ renderThumb
5707
+ },
5708
+ open ? "open" : "closed"
5709
+ ),
5710
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.sliderValues, children: [
5711
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
5712
+ minDuration,
5713
+ " jam"
5714
+ ] }),
5715
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
5716
+ maxDuration,
5717
+ " jam"
5718
+ ] })
5719
+ ] })
5720
+ ] })
5721
+ ] })
5722
+ ] }),
5723
+ /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogActions, { className: styles.footerButtons, children: [
5724
+ /* @__PURE__ */ jsxRuntime.jsx(
5725
+ reactComponents.Button,
5726
+ {
5727
+ className: styles.outlineDanger,
5728
+ appearance: "outline",
5729
+ shape: "circular",
5730
+ onClick: onReset,
5731
+ children: mergedLabels.resetButton
5732
+ }
5733
+ ),
5734
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Button, { appearance: "primary", onClick: onApply, shape: "circular", children: mergedLabels.applyButton })
5735
+ ] })
5736
+ ] }) }) });
5737
+ };
5738
+
5739
+ // src/components/DateFilter/DateFilter.constants.ts
5740
+ var DEFAULT_LABELS4 = {
5741
+ prevButtonAriaLabel: "Previous dates",
5742
+ nextButtonAriaLabel: "Next dates",
5743
+ calendarButtonAriaLabel: "Open calendar"
5744
+ };
5745
+ var DEFAULT_SCROLL_AMOUNT = 150;
5746
+ var useStyles16 = reactComponents.makeStyles({
5747
+ container: {
5748
+ display: "flex",
5749
+ alignItems: "stretch",
5750
+ gap: "8px",
5751
+ overflowX: "auto",
5752
+ maxWidth: "95vw",
5753
+ boxSizing: "border-box"
5754
+ },
5755
+ compoundHeight: {
5756
+ // height: '63px',
5757
+ },
5758
+ item: {
5759
+ minWidth: "clamp(50px, 10vw, 140px)",
5760
+ scrollSnapAlign: "start",
5761
+ flexShrink: 0,
5762
+ display: "flex",
5763
+ flexDirection: "column",
5764
+ justifyContent: "center",
5765
+ height: "63px",
5766
+ "@media (min-width: 1600px)": {
5767
+ flexGrow: 1,
5768
+ flexShrink: 1,
5769
+ minWidth: "120px"
5770
+ }
5771
+ },
5772
+ scrollContainer: {
5773
+ display: "flex",
5774
+ overflowX: "auto",
5775
+ scrollSnapType: "x mandatory",
5776
+ gap: "12px",
5777
+ scrollbarWidth: "none",
5778
+ msOverflowStyle: "none",
5779
+ minWidth: 0,
5780
+ flexGrow: 1,
5781
+ "@media (min-width: 1600px)": {
5782
+ overflowX: "visible",
5783
+ justifyContent: "stretch"
5784
+ },
5785
+ "::-webkit-scrollbar": {
5786
+ display: "none"
5787
+ }
5788
+ },
5789
+ compoundButton: {
5790
+ width: "100%",
5791
+ textAlign: "center",
5792
+ height: "100%",
5793
+ display: "flex",
5794
+ flexDirection: "column",
5795
+ justifyContent: "center",
5796
+ gap: "4px",
5797
+ backgroundColor: "white"
5798
+ },
5799
+ button: {
5800
+ minWidth: "48px",
5801
+ height: "100%"
5802
+ },
5803
+ buttonCalendar: {
5804
+ minWidth: "65px",
5805
+ height: "100%"
5806
+ },
5807
+ selected: {
5808
+ color: reactComponents.tokens.colorBrandBackground,
5809
+ ...reactComponents.shorthands.borderColor(reactComponents.tokens.colorBrandBackground),
5810
+ ":hover": {
5811
+ backgroundColor: reactComponents.tokens.colorBrandBackgroundHover,
5812
+ ...reactComponents.shorthands.borderColor(reactComponents.tokens.colorBrandBackgroundHover),
5813
+ color: reactComponents.tokens.colorNeutralForegroundOnBrand
5814
+ }
5815
+ }
5816
+ });
5817
+ var DateFilter = ({
5818
+ dates,
5819
+ selectedDate,
5820
+ onDateClick,
5821
+ onCalendarClick,
5822
+ showNavigation = true,
5823
+ showCalendarButton = true,
5824
+ scrollAmount = DEFAULT_SCROLL_AMOUNT,
5825
+ labels
5826
+ }) => {
5827
+ const styles = useStyles16();
5828
+ const scrollRef = React5.useRef(null);
5829
+ const mergedLabels = { ...DEFAULT_LABELS4, ...labels };
5830
+ const handlePrev = () => {
5831
+ scrollRef.current?.scrollBy({ left: -scrollAmount, behavior: "smooth" });
5832
+ };
5833
+ const handleNext = () => {
5834
+ scrollRef.current?.scrollBy({ left: scrollAmount, behavior: "smooth" });
5835
+ };
5836
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.container, children: [
5837
+ showNavigation && /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Visible, { lg: true, xl: true, xxl: true, xxxl: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.compoundHeight, children: /* @__PURE__ */ jsxRuntime.jsx(
5838
+ reactComponents.Button,
5839
+ {
5840
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:chevron-left-32-regular" }),
5841
+ size: "small",
5842
+ onClick: handlePrev,
5843
+ className: styles.button,
5844
+ "aria-label": mergedLabels.prevButtonAriaLabel
5845
+ }
5846
+ ) }) }),
5847
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollRef, className: styles.scrollContainer, children: dates.map((date, index) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.item, children: /* @__PURE__ */ jsxRuntime.jsxs(
5848
+ reactComponents.Button,
5849
+ {
5850
+ appearance: "outline",
5851
+ type: "button",
5852
+ className: reactComponents.mergeClasses(
5853
+ styles.compoundButton,
5854
+ selectedDate === date.label ? styles.selected : ""
5855
+ ),
5856
+ onClick: () => onDateClick(date.label),
5857
+ children: [
5858
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption2Strong, { truncate: true, children: date.label }),
5859
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption2Strong, { truncate: true, children: date.price })
5860
+ ]
5861
+ }
5862
+ ) }, index)) }),
5863
+ showNavigation && /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Visible, { lg: true, xl: true, xxl: true, xxxl: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.compoundHeight, children: /* @__PURE__ */ jsxRuntime.jsx(
5864
+ reactComponents.Button,
5865
+ {
5866
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:chevron-right-32-filled" }),
5867
+ onClick: handleNext,
5868
+ className: styles.button,
5869
+ size: "small",
5870
+ "aria-label": mergedLabels.nextButtonAriaLabel
5871
+ }
5872
+ ) }) }),
5873
+ showCalendarButton && /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.compoundHeight, children: /* @__PURE__ */ jsxRuntime.jsx(
5874
+ reactComponents.Button,
5875
+ {
5876
+ size: "small",
5877
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:calendar-32-regular" }),
5878
+ className: styles.buttonCalendar,
5879
+ onClick: onCalendarClick,
5880
+ "aria-label": mergedLabels.calendarButtonAriaLabel
5881
+ }
5882
+ ) })
5883
+ ] });
5884
+ };
5885
+
5886
+ // src/components/ModalSearchTicket/ModalSearchTicket.constants.ts
5887
+ var DEFAULT_FORM_VALUES = {
5888
+ from: "",
5889
+ to: "",
5890
+ startDate: "",
5891
+ roundTrip: false,
5892
+ endDate: "",
5893
+ serviceClass: "",
5894
+ typeOfService: "",
5895
+ passenger: ""
5896
+ };
5897
+ var useStyles17 = reactComponents.makeStyles({
5898
+ dialogSurface: {
5899
+ maxWidth: "900px",
5900
+ width: "100%"
5901
+ },
5902
+ closeButton: {
5903
+ minWidth: "32px",
5904
+ minHeight: "32px"
5905
+ },
5906
+ content: {
5907
+ display: "flex",
5908
+ flexDirection: "column",
5909
+ gap: "24px",
5910
+ paddingTop: "10px",
5911
+ paddingLeft: "10px",
5912
+ paddingRight: "10px",
5913
+ paddingBottom: "20px"
5914
+ },
5915
+ formInnerRow: {
5916
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
5917
+ margin: "0 !important"
5918
+ }
5919
+ },
5920
+ formFieldRow: {
5921
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
5922
+ gap: "12px !important"
5923
+ }
5924
+ },
5925
+ formField: {
5926
+ padding: "16px",
5927
+ display: "flex",
5928
+ flexDirection: "column",
5929
+ gap: "8px",
5930
+ borderRadius: reactComponents.tokens.borderRadiusXLarge,
5931
+ border: "1px solid " + reactComponents.tokens.colorNeutralStroke1,
5932
+ height: "100%",
5933
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
5934
+ padding: "20px",
5935
+ borderRadius: reactComponents.tokens.borderRadiusXLarge
5936
+ }
5937
+ },
5938
+ deviderButton: {
5939
+ display: "flex",
5940
+ justifyContent: "center",
5941
+ position: "absolute",
5942
+ left: "18px",
5943
+ bottom: "-10px",
5944
+ width: "90%"
5945
+ },
5946
+ serviceCol: {
5947
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
5948
+ paddingLeft: "15px !important",
5949
+ paddingRight: "15px !important",
5950
+ marginTop: "16px"
5951
+ }
5952
+ },
5953
+ searchButton: {
5954
+ width: "100%",
5955
+ borderRadius: reactComponents.tokens.borderRadiusCircular
5956
+ },
5957
+ buttonSwitch: {
5958
+ background: reactComponents.tokens.colorNeutralBackground1,
5959
+ boxShadow: `0 1px 2px 0 ${reactComponents.tokens.colorNeutralShadowKey}, 0 0 2px 0 ${reactComponents.tokens.colorNeutralShadowAmbient}`
5960
+ },
5961
+ switchIcon: {
5962
+ display: "inline-flex",
5963
+ transition: "transform 0.3s ease"
5964
+ },
5965
+ switchIconRotate: {
5966
+ transform: "rotate(180deg)"
5967
+ }
5968
+ });
5969
+ var ModalSearchTicket = ({
5970
+ open,
5971
+ onClose,
5972
+ defaultValues,
5973
+ onSelectOrigin,
5974
+ onSelectDestination,
5975
+ onFromChange,
5976
+ onSelectDepartureDate,
5977
+ onSelectReturnDate,
5978
+ onSelectServiceClass,
5979
+ onSelectTypeOfService,
5980
+ onSelectPassenger,
5981
+ onSwitchHarbor,
5982
+ onSwitchClick,
5983
+ onRoundTripChange,
5984
+ onSubmit,
5985
+ toDisabled = false,
5986
+ endDateDisabled = false,
5987
+ serviceClassDisabled = false,
5988
+ typeOfServiceDisabled = false,
5989
+ roundTripDisabled = false,
5990
+ isSubmitDisabled = false,
5991
+ switchDisabled = false,
5992
+ isRotating = false,
5993
+ showPassengerField = false,
5994
+ showRoundTrip = true,
5995
+ ...props
5996
+ }) => {
5997
+ const styles = useStyles17();
5998
+ const { control, setValue, handleSubmit, watch } = reactHookForm.useForm({
5999
+ defaultValues: {
6000
+ ...DEFAULT_FORM_VALUES,
6001
+ ...defaultValues
6002
+ }
6003
+ });
6004
+ const roundTripValue = reactHookForm.useWatch({
6005
+ control,
6006
+ name: "roundTrip",
6007
+ defaultValue: defaultValues?.roundTrip || false
6008
+ });
6009
+ const isUpdatingFromProps = React5.useRef(false);
6010
+ React5.useEffect(() => {
6011
+ if (defaultValues) {
6012
+ isUpdatingFromProps.current = true;
6013
+ Object.entries(defaultValues).forEach(([key, value]) => {
6014
+ setValue(key, value);
6015
+ });
6016
+ setTimeout(() => {
6017
+ isUpdatingFromProps.current = false;
6018
+ }, 0);
6019
+ }
6020
+ }, [defaultValues, setValue]);
6021
+ React5.useEffect(() => {
6022
+ if (onRoundTripChange && !isUpdatingFromProps.current) {
6023
+ onRoundTripChange(roundTripValue);
6024
+ }
6025
+ }, [roundTripValue, onRoundTripChange]);
6026
+ const handleFromChange = () => {
6027
+ setValue("to", "");
6028
+ if (onFromChange) {
6029
+ onFromChange();
6030
+ }
6031
+ };
6032
+ const onFormSubmit = (data) => {
6033
+ if (onSubmit) {
6034
+ onSubmit(data);
6035
+ }
6036
+ };
6037
+ return /* @__PURE__ */ jsxRuntime.jsx(
6038
+ reactComponents.Dialog,
6039
+ {
6040
+ open,
6041
+ onOpenChange: (_, data) => !data.open && onClose(),
6042
+ ...props,
6043
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogSurface, { className: styles.dialogSurface, children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogBody, { children: [
6044
+ /* @__PURE__ */ jsxRuntime.jsx(
6045
+ reactComponents.DialogTitle,
6046
+ {
6047
+ action: /* @__PURE__ */ jsxRuntime.jsx(
6048
+ reactComponents.Button,
6049
+ {
6050
+ appearance: "subtle",
6051
+ "aria-label": "close",
6052
+ className: styles.closeButton,
6053
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-24-regular" }),
6054
+ onClick: onClose
6055
+ }
6056
+ ),
6057
+ children: "Cari Jadwal Lainnya"
6058
+ }
6059
+ ),
6060
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogContent, { className: styles.content, children: /* @__PURE__ */ jsxRuntime.jsx("form", { onSubmit: handleSubmit(onFormSubmit), children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { width: "100%" }, className: styles.formInnerRow, children: [
6061
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, lg: 12, xl: 6, xxl: 6, xxxl: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { gap: "16px" }, className: styles.formFieldRow, children: [
6062
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.formField, children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { children: [
6063
+ /* @__PURE__ */ jsxRuntime.jsxs(
6064
+ reactGridSystem.Col,
6065
+ {
6066
+ xs: 12,
6067
+ sm: 12,
6068
+ md: 12,
6069
+ lg: 12,
6070
+ xl: 12,
6071
+ xxl: 12,
6072
+ xxxl: 12,
6073
+ children: [
6074
+ /* @__PURE__ */ jsxRuntime.jsx(
6075
+ InputDynamic_default,
6076
+ {
6077
+ name: "from",
6078
+ label: "Dari",
6079
+ control,
6080
+ type: "text",
6081
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
6082
+ react.Icon,
6083
+ {
6084
+ icon: "fluent:vehicle-ship-16-filled",
6085
+ color: reactComponents.tokens.colorBrandBackground
6086
+ }
6087
+ ),
6088
+ appearance: "filled-lighter",
6089
+ size: "medium",
6090
+ placeholder: "Pilih pelabuhan asal",
6091
+ onClick: onSelectOrigin,
6092
+ onChange: handleFromChange,
6093
+ validationRules: {
6094
+ required: "Pelabuhan asal wajib diisi"
6095
+ },
6096
+ required: true
6097
+ }
6098
+ ),
6099
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.deviderButton, children: [
6100
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, {}),
6101
+ " ",
6102
+ /* @__PURE__ */ jsxRuntime.jsx(
6103
+ reactComponents.Button,
6104
+ {
6105
+ onClick: onSwitchClick,
6106
+ className: styles.buttonSwitch,
6107
+ shape: "circular",
6108
+ appearance: "secondary",
6109
+ size: "large",
6110
+ disabled: switchDisabled,
6111
+ icon: /* @__PURE__ */ jsxRuntime.jsx(
6112
+ "div",
6113
+ {
6114
+ className: `${styles.switchIcon} ${isRotating ? styles.switchIconRotate : ""}`,
6115
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6116
+ "img",
6117
+ {
6118
+ src: "/assets/images/icons/switch.svg",
6119
+ alt: "Switch",
6120
+ width: 26,
6121
+ height: 26
6122
+ }
6123
+ )
6124
+ }
6125
+ )
6126
+ }
6127
+ )
6128
+ ] })
6129
+ ]
6130
+ }
6131
+ ),
6132
+ /* @__PURE__ */ jsxRuntime.jsx(
6133
+ reactGridSystem.Col,
6134
+ {
6135
+ xs: 12,
6136
+ sm: 12,
6137
+ md: 12,
6138
+ lg: 12,
6139
+ xl: 12,
6140
+ xxl: 12,
6141
+ xxxl: 12,
6142
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6143
+ InputDynamic_default,
6144
+ {
6145
+ name: "to",
6146
+ label: "Ke",
6147
+ control,
6148
+ type: "text",
6149
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
6150
+ react.Icon,
6151
+ {
6152
+ icon: "fluent:location-24-filled",
6153
+ color: reactComponents.tokens.colorBrandBackground
6154
+ }
6155
+ ),
6156
+ disabled: toDisabled,
6157
+ appearance: "filled-lighter",
6158
+ size: "medium",
6159
+ placeholder: "Pilih pelabuhan tujuan",
6160
+ onClick: onSelectDestination,
6161
+ validationRules: {
6162
+ required: "Pelabuhan tujuan wajib diisi"
6163
+ },
6164
+ required: true
6165
+ }
6166
+ )
6167
+ }
6168
+ )
6169
+ ] }) }) }),
6170
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.formField, children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { height: "100%" }, children: [
6171
+ /* @__PURE__ */ jsxRuntime.jsx(
6172
+ reactGridSystem.Col,
6173
+ {
6174
+ xs: 6,
6175
+ sm: 6,
6176
+ md: 6,
6177
+ lg: 6,
6178
+ xl: 6,
6179
+ xxl: 6,
6180
+ xxxl: 6,
6181
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { position: "relative", zIndex: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
6182
+ InputDynamic_default,
6183
+ {
6184
+ name: "startDate",
6185
+ label: "Tanggal Berangkat",
6186
+ control,
6187
+ type: "text",
6188
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
6189
+ react.Icon,
6190
+ {
6191
+ icon: "fluent:calendar-24-filled",
6192
+ color: reactComponents.tokens.colorBrandBackground
6193
+ }
6194
+ ),
6195
+ appearance: "filled-lighter",
6196
+ size: "medium",
6197
+ placeholder: "Pilih Tanggal Berangkat",
6198
+ onClick: onSelectDepartureDate,
6199
+ required: true,
6200
+ validationRules: {
6201
+ required: "Tanggal Berangkat wajib diisi"
6202
+ }
6203
+ }
6204
+ ) })
6205
+ }
6206
+ ),
6207
+ showRoundTrip && /* @__PURE__ */ jsxRuntime.jsx(
6208
+ reactGridSystem.Col,
6209
+ {
6210
+ xs: 6,
6211
+ sm: 6,
6212
+ md: 6,
6213
+ lg: 6,
6214
+ xl: 6,
6215
+ xxl: 6,
6216
+ xxxl: 6,
6217
+ style: { display: "flex", justifyContent: "end" },
6218
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6219
+ InputDynamic_default,
6220
+ {
6221
+ name: "roundTrip",
6222
+ label: "Pulang Pergi",
6223
+ control,
6224
+ type: "switch",
6225
+ disabled: roundTripDisabled,
6226
+ size: "medium"
6227
+ }
6228
+ )
6229
+ }
6230
+ ),
6231
+ roundTripValue && /* @__PURE__ */ jsxRuntime.jsx(
6232
+ reactGridSystem.Col,
6233
+ {
6234
+ xs: 12,
6235
+ sm: 12,
6236
+ md: 12,
6237
+ lg: 12,
6238
+ xl: 12,
6239
+ xxl: 12,
6240
+ xxxl: 12,
6241
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6242
+ InputDynamic_default,
6243
+ {
6244
+ name: "endDate",
6245
+ label: "Tanggal Pulang",
6246
+ control,
6247
+ type: "text",
6248
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
6249
+ react.Icon,
6250
+ {
6251
+ icon: "fluent:calendar-24-filled",
6252
+ color: reactComponents.tokens.colorBrandBackground
6253
+ }
6254
+ ),
6255
+ appearance: "filled-lighter",
6256
+ size: "medium",
6257
+ placeholder: "Pilih Tanggal Pulang",
6258
+ onClick: onSelectReturnDate,
6259
+ disabled: endDateDisabled,
6260
+ style: { borderColor: "transparent" },
6261
+ required: roundTripValue,
6262
+ validationRules: {
6263
+ required: "Tanggal Pulang wajib diisi"
6264
+ }
6265
+ }
6266
+ )
6267
+ }
6268
+ )
6269
+ ] }) }) })
6270
+ ] }) }),
6271
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Visible, { xl: true, xxl: true, xxxl: true, children: /* @__PURE__ */ jsxRuntime.jsx(
6272
+ reactGridSystem.Col,
6273
+ {
6274
+ xs: 12,
6275
+ sm: 12,
6276
+ lg: 12,
6277
+ xl: 1,
6278
+ xxl: 1,
6279
+ xxxl: 1,
6280
+ style: {
6281
+ display: "flex",
6282
+ alignItems: "center",
6283
+ justifyContent: "center"
6284
+ },
6285
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, { vertical: true, style: { height: "100%" } })
6286
+ }
6287
+ ) }),
6288
+ /* @__PURE__ */ jsxRuntime.jsx(
6289
+ reactGridSystem.Col,
6290
+ {
6291
+ xs: 12,
6292
+ sm: 12,
6293
+ lg: 12,
6294
+ xl: 5,
6295
+ xxl: 5,
6296
+ xxxl: 5,
6297
+ className: styles.serviceCol,
6298
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Row, { style: { height: "100%", gap: "16px" }, children: /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.formField, children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { height: "100%", gap: "16px" }, children: [
6299
+ /* @__PURE__ */ jsxRuntime.jsx(
6300
+ reactGridSystem.Col,
6301
+ {
6302
+ xs: 12,
6303
+ sm: 12,
6304
+ md: 12,
6305
+ lg: 12,
6306
+ xl: 12,
6307
+ xxl: 12,
6308
+ xxxl: 12,
6309
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6310
+ InputDynamic_default,
6311
+ {
6312
+ name: "serviceClass",
6313
+ label: "Kelas Layanan",
6314
+ control,
6315
+ type: "text",
6316
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
6317
+ react.Icon,
6318
+ {
6319
+ icon: "fluent:ribbon-star-24-filled",
6320
+ color: reactComponents.tokens.colorBrandBackground
6321
+ }
6322
+ ),
6323
+ appearance: "filled-lighter",
6324
+ size: "medium",
6325
+ placeholder: "Pilih Kelas Layanan",
6326
+ onClick: onSelectServiceClass,
6327
+ required: true,
6328
+ disabled: serviceClassDisabled
6329
+ }
6330
+ )
6331
+ }
6332
+ ),
6333
+ /* @__PURE__ */ jsxRuntime.jsx(
6334
+ reactGridSystem.Col,
6335
+ {
6336
+ xs: 12,
6337
+ sm: 12,
6338
+ md: 12,
6339
+ lg: 12,
6340
+ xl: 12,
6341
+ xxl: 12,
6342
+ xxxl: 12,
6343
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6344
+ InputDynamic_default,
6345
+ {
6346
+ name: "typeOfService",
6347
+ label: "Jenis penumpang",
6348
+ control,
6349
+ type: "text",
6350
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
6351
+ react.Icon,
6352
+ {
6353
+ icon: "fluent:apps-list-24-filled",
6354
+ color: reactComponents.tokens.colorBrandBackground
6355
+ }
6356
+ ),
6357
+ appearance: "filled-lighter",
6358
+ size: "medium",
6359
+ placeholder: "Pilih Jenis penumpang",
6360
+ onClick: onSelectTypeOfService,
6361
+ required: true,
6362
+ disabled: typeOfServiceDisabled
6363
+ }
6364
+ )
6365
+ }
6366
+ ),
6367
+ showPassengerField && /* @__PURE__ */ jsxRuntime.jsx(
6368
+ reactGridSystem.Col,
6369
+ {
6370
+ xs: 12,
6371
+ sm: 12,
6372
+ md: 12,
6373
+ lg: 12,
6374
+ xl: 12,
6375
+ xxl: 12,
6376
+ xxxl: 12,
6377
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6378
+ InputDynamic_default,
6379
+ {
6380
+ required: true,
6381
+ name: "passenger",
6382
+ label: "Penumpang",
6383
+ control,
6384
+ type: "text",
6385
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
6386
+ react.Icon,
6387
+ {
6388
+ icon: "fluent:people-24-filled",
6389
+ color: reactComponents.tokens.colorBrandBackground
6390
+ }
6391
+ ),
6392
+ appearance: "filled-lighter",
6393
+ size: "medium",
6394
+ placeholder: "Pilih Penumpang",
6395
+ onClick: onSelectPassenger
6396
+ }
6397
+ )
6398
+ }
6399
+ )
6400
+ ] }) }) }) })
6401
+ }
6402
+ ),
6403
+ /* @__PURE__ */ jsxRuntime.jsx(
6404
+ reactGridSystem.Col,
6405
+ {
6406
+ xs: 12,
6407
+ sm: 12,
6408
+ lg: 12,
6409
+ xl: 12,
6410
+ xxl: 12,
6411
+ xxxl: 12,
6412
+ style: { paddingTop: "2rem" },
6413
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6414
+ reactComponents.Button,
6415
+ {
6416
+ className: styles.searchButton,
6417
+ appearance: "primary",
6418
+ size: "large",
6419
+ type: "submit",
6420
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:vehicle-ship-20-filled" }),
6421
+ disabled: isSubmitDisabled,
6422
+ children: "Cari Tiket"
6423
+ }
6424
+ )
6425
+ }
6426
+ )
6427
+ ] }) }) })
6428
+ ] }) })
6429
+ }
6430
+ );
6431
+ };
6432
+
4640
6433
  exports.BackgroundTicketCard = BackgroundTicketCard_default;
4641
6434
  exports.BackgroundTicketCardVertical = BackgroundTicketCardVertical_default;
4642
6435
  exports.CardBanner = CardBanner;
@@ -4645,18 +6438,33 @@ exports.CardServiceMenu = CardServiceMenu;
4645
6438
  exports.CardTicket = CardTicket;
4646
6439
  exports.CardTicketSearch = CardTicketSearch;
4647
6440
  exports.CardTicketSearchDefaultLabels = DEFAULT_LABELS;
6441
+ exports.CardTicketSearchSummary = CardTicketSearchSummary;
6442
+ exports.CardTicketSearchSummaryDefaultLabels = DEFAULT_LABELS2;
4648
6443
  exports.CarouselWithCustomNav = CarouselWithCustomNav;
4649
6444
  exports.DEFAULT_COUNTRY_CODES = DEFAULT_COUNTRY_CODES;
6445
+ exports.DEFAULT_DURATION_RANGE = DEFAULT_DURATION_RANGE;
6446
+ exports.DEFAULT_PRICE_RANGE = DEFAULT_PRICE_RANGE;
6447
+ exports.DEFAULT_SCROLL_AMOUNT = DEFAULT_SCROLL_AMOUNT;
4650
6448
  exports.DEFAULT_SERVICE_CLASSES = DEFAULT_SERVICE_CLASSES;
6449
+ exports.DEFAULT_SERVICE_TYPES = DEFAULT_SERVICE_TYPES;
6450
+ exports.DEFAULT_SORT_OPTIONS = DEFAULT_SORT_OPTIONS;
6451
+ exports.DEFAULT_TIME_SLOTS = DEFAULT_TIME_SLOTS;
4651
6452
  exports.DEFAULT_VEHICLE_ICONS = DEFAULT_VEHICLE_ICONS;
6453
+ exports.DateFilter = DateFilter;
6454
+ exports.DateFilterDefaultLabels = DEFAULT_LABELS4;
4652
6455
  exports.InputDynamic = InputDynamic_default;
4653
6456
  exports.MODAL_PRESETS = MODAL_PRESETS;
6457
+ exports.ModalFilterTicket = ModalFilterTicket;
6458
+ exports.ModalFilterTicketDefaultLabels = DEFAULT_LABELS3;
4654
6459
  exports.ModalIllustration = ModalIllustration;
4655
6460
  exports.ModalSearchHarbor = ModalSearchHarbor;
6461
+ exports.ModalSearchTicket = ModalSearchTicket;
4656
6462
  exports.ModalSelectDate = ModalSelectDate;
4657
6463
  exports.ModalService = ModalService;
4658
6464
  exports.ModalTotalPassengers = ModalTotalPassengers;
4659
6465
  exports.ModalTypeOfService = ModalTypeOfService;
6466
+ exports.SortMenu = SortMenu;
4660
6467
  exports.getModalPreset = getModalPreset;
6468
+ exports.getSortLabel = getSortLabel;
4661
6469
  //# sourceMappingURL=index.js.map
4662
6470
  //# sourceMappingURL=index.js.map