@asdp/ferryui 0.1.6 → 0.1.8

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
@@ -3562,6 +3562,595 @@ var ModalService = ({
3562
3562
  );
3563
3563
  };
3564
3564
 
3565
+ // src/components/ModalTotalPassengers/constants.ts
3566
+ var DEFAULT_SERVICE_CLASSES = [
3567
+ { id: 1, name: "Ekonomi", key: "ekonomi", serviceName: "ECONOMY" },
3568
+ { id: 2, name: "Bisnis", key: "bisnis", serviceName: "BUSINESS" },
3569
+ { id: 3, name: "Eksekutif", key: "eksekutif", serviceName: "EXECUTIVE" }
3570
+ ];
3571
+ var useStyles11 = reactComponents.makeStyles({
3572
+ dialogSurface: {
3573
+ maxWidth: "600px",
3574
+ width: "100%"
3575
+ },
3576
+ passengerSection: {
3577
+ marginTop: reactComponents.tokens.spacingHorizontalM,
3578
+ display: "flex",
3579
+ flexDirection: "column"
3580
+ },
3581
+ accordionHeader: {
3582
+ fontSize: reactComponents.tokens.fontSizeBase300,
3583
+ fontWeight: reactComponents.tokens.fontWeightBold
3584
+ },
3585
+ accordionItem: {
3586
+ borderRadius: reactComponents.tokens.borderRadiusXLarge,
3587
+ marginBottom: "1rem",
3588
+ border: `1px solid ${reactComponents.tokens.colorNeutralStroke2}`
3589
+ },
3590
+ passengerCount: {
3591
+ display: "flex",
3592
+ alignItems: "center",
3593
+ gap: "12px"
3594
+ },
3595
+ counterButton: {
3596
+ minWidth: "24px",
3597
+ height: "24px",
3598
+ padding: "0",
3599
+ borderRadius: reactComponents.tokens.borderRadiusCircular,
3600
+ color: reactComponents.tokens.colorBrandBackground,
3601
+ border: `1px solid ${reactComponents.tokens.colorBrandBackground}`,
3602
+ "&:hover": {
3603
+ border: `1px solid ${reactComponents.tokens.colorBrandBackgroundHover}`,
3604
+ color: reactComponents.tokens.colorBrandBackgroundHover
3605
+ },
3606
+ "&:disabled": {
3607
+ border: `1px solid ${reactComponents.tokens.colorNeutralStrokeDisabled}`,
3608
+ color: reactComponents.tokens.colorNeutralForegroundDisabled
3609
+ }
3610
+ },
3611
+ countText: {
3612
+ minWidth: "24px",
3613
+ textAlign: "center"
3614
+ },
3615
+ nestedSection: {
3616
+ borderTop: `2px solid ${reactComponents.tokens.colorBrandBackground}`,
3617
+ display: "flex",
3618
+ flexDirection: "column",
3619
+ padding: "0.6rem"
3620
+ },
3621
+ nestedRow: {
3622
+ display: "flex",
3623
+ justifyContent: "space-between",
3624
+ alignItems: "center",
3625
+ padding: "4px",
3626
+ borderRadius: reactComponents.tokens.borderRadiusSmall,
3627
+ backgroundColor: reactComponents.tokens.colorNeutralBackground1
3628
+ },
3629
+ submitButton: {
3630
+ marginTop: "16px",
3631
+ width: "100%",
3632
+ borderRadius: reactComponents.tokens.borderRadiusCircular
3633
+ },
3634
+ accordionPanel: {
3635
+ margin: 0
3636
+ }
3637
+ });
3638
+ var ModalTotalPassengers = ({
3639
+ open,
3640
+ onClose,
3641
+ title = "Pilih Jumlah Penumpang",
3642
+ passengerTypes,
3643
+ serviceClasses = DEFAULT_SERVICE_CLASSES,
3644
+ selectedPassengers,
3645
+ onSave,
3646
+ isLoading = false,
3647
+ maxPassengers = 10,
3648
+ infoMessage
3649
+ }) => {
3650
+ const styles = useStyles11();
3651
+ const [passengers, setPassengers] = React2.useState([]);
3652
+ const [openItems, setOpenItems] = React2.useState([]);
3653
+ const defaultInfoMessage = `Anda dapat menambahkan hingga ${maxPassengers} penumpang pada golongan kendaraan ini.`;
3654
+ React2.useEffect(() => {
3655
+ if (passengerTypes.length === 0) return;
3656
+ const defaultPassengers = passengerTypes.map((passengerType) => ({
3657
+ passengerTypeId: passengerType.id,
3658
+ passengerTypeCode: passengerType.passengerTypeCode,
3659
+ passengerTypeName: passengerType.passengerTypeName,
3660
+ services: serviceClasses.map((sc) => ({
3661
+ serviceId: sc.id,
3662
+ serviceName: sc.serviceName,
3663
+ count: 0,
3664
+ passengers: []
3665
+ }))
3666
+ }));
3667
+ if (selectedPassengers && selectedPassengers.length > 0) {
3668
+ const mergedPassengers = defaultPassengers.map((defaultP) => {
3669
+ const selectedP = selectedPassengers.find(
3670
+ (p) => p.passengerTypeCode === defaultP.passengerTypeCode
3671
+ );
3672
+ if (selectedP) {
3673
+ const mergedServices = defaultP.services.map((defaultS) => {
3674
+ const selectedS = selectedP.services.find((s) => s.serviceName === defaultS.serviceName);
3675
+ return selectedS ? { ...defaultS, count: selectedS.count, passengers: selectedS.passengers || [] } : defaultS;
3676
+ });
3677
+ return { ...defaultP, services: mergedServices };
3678
+ }
3679
+ return defaultP;
3680
+ });
3681
+ setPassengers(mergedPassengers);
3682
+ const itemsWithData = selectedPassengers.filter((p) => p.services.some((s) => s.count > 0)).map((p) => {
3683
+ const passengerType = passengerTypes.find(
3684
+ (pt) => pt.passengerTypeCode === p.passengerTypeCode
3685
+ );
3686
+ return passengerType ? String(passengerType.id) : "";
3687
+ }).filter((id) => id !== "");
3688
+ setOpenItems(itemsWithData);
3689
+ } else {
3690
+ setPassengers(defaultPassengers);
3691
+ setOpenItems([]);
3692
+ }
3693
+ }, [open, passengerTypes, serviceClasses, selectedPassengers]);
3694
+ const getServiceCount = (passengerTypeCode, serviceName) => {
3695
+ const passenger = passengers.find((p) => p.passengerTypeCode === passengerTypeCode);
3696
+ if (!passenger) return 0;
3697
+ const service = passenger.services.find((s) => s.serviceName === serviceName);
3698
+ return service?.count || 0;
3699
+ };
3700
+ const getTotalForType = (passengerTypeCode) => {
3701
+ const passenger = passengers.find((p) => p.passengerTypeCode === passengerTypeCode);
3702
+ if (!passenger) return "0";
3703
+ const parts = [];
3704
+ passenger.services.forEach((service) => {
3705
+ if (service.count > 0) {
3706
+ const serviceClass = serviceClasses.find((sc) => sc.serviceName === service.serviceName);
3707
+ const serviceName = serviceClass?.name || service.serviceName;
3708
+ parts.push(`${service.count} ${serviceName}`);
3709
+ }
3710
+ });
3711
+ return parts.length > 0 ? parts.join(", ") : "0";
3712
+ };
3713
+ const handleIncrement = (passengerTypeCode, serviceName) => {
3714
+ setPassengers(
3715
+ (prev) => prev.map((passenger) => {
3716
+ if (passenger.passengerTypeCode === passengerTypeCode) {
3717
+ return {
3718
+ ...passenger,
3719
+ services: passenger.services.map((service) => {
3720
+ if (service.serviceName === serviceName) {
3721
+ const newCount = service.count + 1;
3722
+ const newPassengers = [...service.passengers || []];
3723
+ while (newPassengers.length < newCount) {
3724
+ newPassengers.push({});
3725
+ }
3726
+ return {
3727
+ ...service,
3728
+ count: newCount,
3729
+ passengers: newPassengers
3730
+ };
3731
+ }
3732
+ return service;
3733
+ })
3734
+ };
3735
+ }
3736
+ return passenger;
3737
+ })
3738
+ );
3739
+ };
3740
+ const handleDecrement = (passengerTypeCode, serviceName) => {
3741
+ setPassengers(
3742
+ (prev) => prev.map((passenger) => {
3743
+ if (passenger.passengerTypeCode === passengerTypeCode) {
3744
+ return {
3745
+ ...passenger,
3746
+ services: passenger.services.map((service) => {
3747
+ if (service.serviceName === serviceName && service.count > 0) {
3748
+ const newCount = service.count - 1;
3749
+ const newPassengers = (service.passengers || []).slice(0, newCount);
3750
+ return {
3751
+ ...service,
3752
+ count: newCount,
3753
+ passengers: newPassengers
3754
+ };
3755
+ }
3756
+ return service;
3757
+ })
3758
+ };
3759
+ }
3760
+ return passenger;
3761
+ })
3762
+ );
3763
+ };
3764
+ const handleSave = () => {
3765
+ const filteredPassengers = passengers.map((passenger) => ({
3766
+ ...passenger,
3767
+ services: passenger.services.filter((service) => service.count > 0)
3768
+ })).filter((passenger) => passenger.services.length > 0);
3769
+ onSave(filteredPassengers);
3770
+ };
3771
+ return /* @__PURE__ */ jsxRuntime.jsx(
3772
+ reactComponents.Dialog,
3773
+ {
3774
+ open,
3775
+ onOpenChange: (_, data) => !data.open && onClose(),
3776
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogSurface, { children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogBody, { children: [
3777
+ /* @__PURE__ */ jsxRuntime.jsx(
3778
+ reactComponents.DialogTitle,
3779
+ {
3780
+ action: /* @__PURE__ */ jsxRuntime.jsx(
3781
+ reactComponents.Button,
3782
+ {
3783
+ appearance: "subtle",
3784
+ "aria-label": "close",
3785
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-12-regular" }),
3786
+ onClick: onClose
3787
+ }
3788
+ ),
3789
+ children: title
3790
+ }
3791
+ ),
3792
+ /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogContent, { children: [
3793
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.MessageBar, { shape: "rounded", children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.MessageBarBody, { children: infoMessage || defaultInfoMessage }) }),
3794
+ isLoading ? /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: "Loading..." }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3795
+ /* @__PURE__ */ jsxRuntime.jsx(
3796
+ reactComponents.Accordion,
3797
+ {
3798
+ collapsible: true,
3799
+ multiple: true,
3800
+ openItems,
3801
+ onToggle: (_, data) => setOpenItems(data.openItems),
3802
+ className: styles.passengerSection,
3803
+ children: passengerTypes.map((passengerType) => {
3804
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3805
+ reactComponents.AccordionItem,
3806
+ {
3807
+ value: String(passengerType.id),
3808
+ className: styles.accordionItem,
3809
+ children: [
3810
+ /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.AccordionHeader, { className: styles.accordionHeader, expandIconPosition: "end", children: [
3811
+ passengerType.passengerTypeName,
3812
+ " (",
3813
+ getTotalForType(passengerType.passengerTypeCode),
3814
+ ")"
3815
+ ] }),
3816
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.AccordionPanel, { className: styles.accordionPanel, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.nestedSection, children: serviceClasses.map((service) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.nestedRow, children: [
3817
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: service.name }),
3818
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.passengerCount, children: [
3819
+ /* @__PURE__ */ jsxRuntime.jsx(
3820
+ reactComponents.Button,
3821
+ {
3822
+ appearance: "outline",
3823
+ className: styles.counterButton,
3824
+ size: "small",
3825
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:subtract-12-regular" }),
3826
+ onClick: (e) => {
3827
+ e.stopPropagation();
3828
+ handleDecrement(
3829
+ passengerType.passengerTypeCode,
3830
+ service.serviceName
3831
+ );
3832
+ },
3833
+ disabled: getServiceCount(
3834
+ passengerType.passengerTypeCode,
3835
+ service.serviceName
3836
+ ) === 0
3837
+ }
3838
+ ),
3839
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { className: styles.countText, children: getServiceCount(
3840
+ passengerType.passengerTypeCode,
3841
+ service.serviceName
3842
+ ) }),
3843
+ /* @__PURE__ */ jsxRuntime.jsx(
3844
+ reactComponents.Button,
3845
+ {
3846
+ appearance: "outline",
3847
+ className: styles.counterButton,
3848
+ size: "small",
3849
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:add-12-regular" }),
3850
+ onClick: (e) => {
3851
+ e.stopPropagation();
3852
+ handleIncrement(
3853
+ passengerType.passengerTypeCode,
3854
+ service.serviceName
3855
+ );
3856
+ }
3857
+ }
3858
+ )
3859
+ ] })
3860
+ ] }, service.key)) }) })
3861
+ ]
3862
+ },
3863
+ passengerType.id
3864
+ );
3865
+ })
3866
+ }
3867
+ ),
3868
+ /* @__PURE__ */ jsxRuntime.jsx(
3869
+ reactComponents.Button,
3870
+ {
3871
+ appearance: "primary",
3872
+ size: "medium",
3873
+ className: styles.submitButton,
3874
+ onClick: handleSave,
3875
+ children: "Simpan"
3876
+ }
3877
+ )
3878
+ ] })
3879
+ ] })
3880
+ ] }) })
3881
+ }
3882
+ );
3883
+ };
3884
+ var useStyles12 = reactComponents.makeStyles({
3885
+ dialogSurface: {
3886
+ maxWidth: "600px",
3887
+ width: "100%"
3888
+ },
3889
+ closeButton: {
3890
+ minWidth: "32px",
3891
+ minHeight: "32px"
3892
+ },
3893
+ passengerSection: {
3894
+ marginTop: reactComponents.tokens.spacingHorizontalM,
3895
+ display: "flex",
3896
+ flexDirection: "column"
3897
+ },
3898
+ accordionItem: {
3899
+ borderBottom: `1px solid ${reactComponents.tokens.colorNeutralStroke2}`,
3900
+ width: "100%"
3901
+ },
3902
+ accordionHeader: {
3903
+ fontSize: reactComponents.tokens.fontSizeBase300,
3904
+ fontWeight: reactComponents.tokens.fontWeightBold,
3905
+ display: "flex",
3906
+ alignItems: "center",
3907
+ justifyContent: "space-between",
3908
+ width: "100%"
3909
+ },
3910
+ accordionTitleAndInfo: {
3911
+ display: "flex",
3912
+ flexDirection: "column",
3913
+ gap: "2px",
3914
+ marginLeft: reactComponents.tokens.spacingHorizontalM,
3915
+ flex: 1
3916
+ },
3917
+ accordionBody: {
3918
+ marginLeft: "100px"
3919
+ },
3920
+ footer: {
3921
+ marginTop: reactComponents.tokens.spacingVerticalL,
3922
+ display: "flex",
3923
+ gap: reactComponents.tokens.spacingHorizontalM,
3924
+ justifyContent: "flex-end"
3925
+ }
3926
+ });
3927
+ var ModalTypeOfService = ({
3928
+ open,
3929
+ onClose,
3930
+ title = "Pilih Tipe Layanan",
3931
+ serviceTypes,
3932
+ selectedService,
3933
+ onSave,
3934
+ renderImage
3935
+ }) => {
3936
+ const styles = useStyles12();
3937
+ const [selectedServiceTitle, setSelectedServiceTitle] = React2.useState(
3938
+ selectedService?.title || ""
3939
+ );
3940
+ const [openItems, setOpenItems] = React2.useState(() => {
3941
+ if (!selectedService) return void 0;
3942
+ for (const item of serviceTypes) {
3943
+ if (item.type === "accordion" && item.child.length > 0) {
3944
+ const hasSelectedChild = item.child.some(
3945
+ (child) => child.title === selectedService.title
3946
+ );
3947
+ if (hasSelectedChild) {
3948
+ return item.id;
3949
+ }
3950
+ }
3951
+ }
3952
+ return void 0;
3953
+ });
3954
+ const defaultRenderImage = ({ src, alt, width, height }) => /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt, width, height, style: { objectFit: "contain" } });
3955
+ const imageRenderer = renderImage || defaultRenderImage;
3956
+ React2.useEffect(() => {
3957
+ const newTitle = selectedService?.title || "";
3958
+ if (newTitle !== selectedServiceTitle) {
3959
+ setSelectedServiceTitle(newTitle);
3960
+ }
3961
+ if (selectedService) {
3962
+ for (const item of serviceTypes) {
3963
+ if (item.type === "accordion" && item.child.length > 0) {
3964
+ const hasSelectedChild = item.child.some(
3965
+ (child) => child.title === selectedService.title
3966
+ );
3967
+ if (hasSelectedChild && openItems !== item.id) {
3968
+ setOpenItems(item.id);
3969
+ break;
3970
+ }
3971
+ }
3972
+ }
3973
+ } else if (openItems !== void 0) {
3974
+ setOpenItems(void 0);
3975
+ }
3976
+ }, [open, selectedService?.title]);
3977
+ const handleConfirm = () => {
3978
+ if (selectedServiceTitle) {
3979
+ let selectedItem = null;
3980
+ for (const item of serviceTypes) {
3981
+ if (item.title === selectedServiceTitle) {
3982
+ selectedItem = {
3983
+ id: item.id,
3984
+ image: item.image,
3985
+ title: item.title,
3986
+ info: item.info,
3987
+ price: item.price,
3988
+ parentTitle: "",
3989
+ parentId: 0,
3990
+ type: item.type,
3991
+ typeOfPassanger: item.typeOfPassanger,
3992
+ child: []
3993
+ };
3994
+ break;
3995
+ }
3996
+ if (item.child && item.child.length > 0) {
3997
+ const childItem = item.child.find((child) => child.title === selectedServiceTitle);
3998
+ if (childItem) {
3999
+ selectedItem = {
4000
+ id: childItem.id,
4001
+ image: childItem.image,
4002
+ title: childItem.title,
4003
+ info: childItem.info,
4004
+ price: childItem.price,
4005
+ parentTitle: childItem.parentTitle,
4006
+ parentId: childItem.parentId,
4007
+ type: childItem.type,
4008
+ typeOfPassanger: childItem.typeOfPassanger,
4009
+ child: []
4010
+ };
4011
+ break;
4012
+ }
4013
+ }
4014
+ }
4015
+ if (selectedItem) {
4016
+ onSave(selectedItem);
4017
+ }
4018
+ }
4019
+ };
4020
+ return /* @__PURE__ */ jsxRuntime.jsx(
4021
+ reactComponents.Dialog,
4022
+ {
4023
+ open,
4024
+ onOpenChange: (_, data) => !data.open && onClose(),
4025
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogSurface, { className: styles.dialogSurface, children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogBody, { children: [
4026
+ /* @__PURE__ */ jsxRuntime.jsx(
4027
+ reactComponents.DialogTitle,
4028
+ {
4029
+ action: /* @__PURE__ */ jsxRuntime.jsx(
4030
+ reactComponents.Button,
4031
+ {
4032
+ appearance: "subtle",
4033
+ "aria-label": "close",
4034
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-24-regular" }),
4035
+ onClick: onClose,
4036
+ className: styles.closeButton
4037
+ }
4038
+ ),
4039
+ children: title
4040
+ }
4041
+ ),
4042
+ /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogContent, { children: [
4043
+ /* @__PURE__ */ jsxRuntime.jsx(
4044
+ reactComponents.Accordion,
4045
+ {
4046
+ collapsible: true,
4047
+ openItems,
4048
+ onToggle: (_, data) => setOpenItems(data.openItems[0]),
4049
+ className: styles.passengerSection,
4050
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4051
+ reactComponents.RadioGroup,
4052
+ {
4053
+ value: selectedServiceTitle,
4054
+ onChange: (_, data) => setSelectedServiceTitle(data.value),
4055
+ children: serviceTypes.map((item, index) => {
4056
+ if (item.type === "accordion") {
4057
+ return /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.AccordionItem, { value: item.id, className: styles.accordionItem, children: [
4058
+ /* @__PURE__ */ jsxRuntime.jsxs(
4059
+ reactComponents.AccordionHeader,
4060
+ {
4061
+ className: styles.accordionHeader,
4062
+ expandIconPosition: "end",
4063
+ children: [
4064
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: imageRenderer({ src: item.image, alt: "vehicles", width: 74, height: 74 }) }),
4065
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.accordionTitleAndInfo, children: [
4066
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: item.title }),
4067
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: item.info })
4068
+ ] })
4069
+ ]
4070
+ }
4071
+ ),
4072
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.AccordionPanel, { className: styles.accordionBody, children: item.child.length > 0 && item.child.map((childItem, childIndex) => /* @__PURE__ */ jsxRuntime.jsxs(
4073
+ "div",
4074
+ {
4075
+ className: reactComponents.mergeClasses(
4076
+ styles.accordionHeader,
4077
+ styles.accordionItem
4078
+ ),
4079
+ style: { padding: reactComponents.tokens.spacingHorizontalXS },
4080
+ children: [
4081
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: imageRenderer({
4082
+ src: childItem.image,
4083
+ alt: childItem.title,
4084
+ width: 48,
4085
+ height: 48
4086
+ }) }),
4087
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.accordionTitleAndInfo, children: [
4088
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: childItem.title }),
4089
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: childItem.info })
4090
+ ] }),
4091
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Radio, { value: childItem.title })
4092
+ ]
4093
+ },
4094
+ childIndex
4095
+ )) })
4096
+ ] }, index);
4097
+ } else if (item.type === "radio") {
4098
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4099
+ "div",
4100
+ {
4101
+ className: reactComponents.mergeClasses(styles.accordionHeader, styles.accordionItem),
4102
+ style: { padding: reactComponents.tokens.spacingHorizontalXS },
4103
+ children: [
4104
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginLeft: 2 }, children: imageRenderer({ src: item.image, alt: item.title, width: 74, height: 74 }) }),
4105
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.accordionTitleAndInfo, style: { marginLeft: 18 }, children: [
4106
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: item.title }),
4107
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: item.info })
4108
+ ] }),
4109
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Radio, { value: item.title })
4110
+ ]
4111
+ },
4112
+ index
4113
+ );
4114
+ }
4115
+ return null;
4116
+ })
4117
+ }
4118
+ )
4119
+ }
4120
+ ),
4121
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.footer, children: [
4122
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Button, { appearance: "secondary", shape: "circular", onClick: onClose, children: "Batal" }),
4123
+ /* @__PURE__ */ jsxRuntime.jsx(
4124
+ reactComponents.Button,
4125
+ {
4126
+ appearance: "primary",
4127
+ shape: "circular",
4128
+ onClick: handleConfirm,
4129
+ disabled: !selectedServiceTitle,
4130
+ children: "Simpan"
4131
+ }
4132
+ )
4133
+ ] })
4134
+ ] })
4135
+ ] }) })
4136
+ }
4137
+ );
4138
+ };
4139
+
4140
+ // src/components/ModalTypeOfService/constants.ts
4141
+ var DEFAULT_VEHICLE_ICONS = {
4142
+ pedestrian: "/assets/images/icons/pedestrian.webp",
4143
+ roadbike: "/assets/images/icons/roadbike.webp",
4144
+ motorbike1: "/assets/images/icons/motorbike-1.webp",
4145
+ motorbike2: "/assets/images/icons/motorbike-2.svg",
4146
+ smallCar: "/assets/images/icons/small-car.webp",
4147
+ smallBus: "/assets/images/icons/small-bus.webp",
4148
+ bigBus: "/assets/images/icons/big-bus.webp",
4149
+ truck: "/assets/images/icons/truck.webp",
4150
+ bigTruck: "/assets/images/icons/big-truck.webp",
4151
+ looseLoad: "/assets/images/icons/loose-load.webp"
4152
+ };
4153
+
3565
4154
  exports.BackgroundTicketCard = BackgroundTicketCard_default;
3566
4155
  exports.BackgroundTicketCardVertical = BackgroundTicketCardVertical_default;
3567
4156
  exports.CardBanner = CardBanner;
@@ -3570,12 +4159,16 @@ exports.CardServiceMenu = CardServiceMenu;
3570
4159
  exports.CardTicket = CardTicket;
3571
4160
  exports.CarouselWithCustomNav = CarouselWithCustomNav;
3572
4161
  exports.DEFAULT_COUNTRY_CODES = DEFAULT_COUNTRY_CODES2;
4162
+ exports.DEFAULT_SERVICE_CLASSES = DEFAULT_SERVICE_CLASSES;
4163
+ exports.DEFAULT_VEHICLE_ICONS = DEFAULT_VEHICLE_ICONS;
3573
4164
  exports.InputDynamic = InputDynamic_default;
3574
4165
  exports.MODAL_PRESETS = MODAL_PRESETS;
3575
4166
  exports.ModalIllustration = ModalIllustration;
3576
4167
  exports.ModalSearchHarbor = ModalSearchHarbor;
3577
4168
  exports.ModalSelectDate = ModalSelectDate;
3578
4169
  exports.ModalService = ModalService;
4170
+ exports.ModalTotalPassengers = ModalTotalPassengers;
4171
+ exports.ModalTypeOfService = ModalTypeOfService;
3579
4172
  exports.getModalPreset = getModalPreset;
3580
4173
  //# sourceMappingURL=index.js.map
3581
4174
  //# sourceMappingURL=index.js.map