@asdp/ferryui 0.1.22-dev.8653 → 0.1.22-dev.8663

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
@@ -5,7 +5,6 @@ var jsxRuntime = require('react/jsx-runtime');
5
5
  var React5 = require('react');
6
6
  var reactGridSystem = require('react-grid-system');
7
7
  var react = require('@iconify/react');
8
- var iconify_js = require('@iconify/react/dist/iconify.js');
9
8
  var reactHookForm = require('react-hook-form');
10
9
  var PhoneInputComponent = require('react-phone-input-2');
11
10
  var Select = require('react-select');
@@ -362,11 +361,17 @@ var CarouselWithCustomNav = ({
362
361
  var DEFAULT_LABELS3 = {
363
362
  id: {
364
363
  defaultImageAlt: "Gambar Promo",
365
- defaultButtonText: "Lihat Detail"
364
+ defaultButtonText: "Lihat Detail",
365
+ promoAriaLabel: "Promo {index} dari {total}",
366
+ promoAriaLabelSingle: "Promo {index}",
367
+ loadingContent: "Memuat konten"
366
368
  },
367
369
  en: {
368
370
  defaultImageAlt: "Promo Image",
369
- defaultButtonText: "View Details"
371
+ defaultButtonText: "View Details",
372
+ promoAriaLabel: "Promo {index} of {total}",
373
+ promoAriaLabelSingle: "Promo {index}",
374
+ loadingContent: "Loading content"
370
375
  }
371
376
  };
372
377
  var useStyles3 = reactComponents.makeStyles({
@@ -473,7 +478,10 @@ var CardPromo = ({
473
478
  const mergedLabels = { ...DEFAULT_LABELS3[language], ...labels };
474
479
  const displayImageAlt = imageAlt || mergedLabels.defaultImageAlt;
475
480
  const displayButtonText = buttonText || mergedLabels.defaultButtonText;
476
- const ariaLabel = totalCards ? `Card ${index + 1} of ${totalCards}` : `Promo card ${index + 1}`;
481
+ const ariaLabel = totalCards ? mergedLabels.promoAriaLabel.replace("{index}", (index + 1).toString()).replace("{total}", totalCards.toString()) : mergedLabels.promoAriaLabelSingle.replace(
482
+ "{index}",
483
+ (index + 1).toString()
484
+ );
477
485
  if (isLoading) {
478
486
  return /* @__PURE__ */ jsxRuntime.jsx(
479
487
  reactComponents.CarouselCard,
@@ -481,7 +489,7 @@ var CardPromo = ({
481
489
  autoSize: true,
482
490
  className: reactComponents.mergeClasses(classes.actionCard, className),
483
491
  style: { cursor: "default" },
484
- children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Skeleton, { "aria-label": "Loading content", children: [
492
+ children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Skeleton, { "aria-label": mergedLabels.loadingContent, children: [
485
493
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: reactComponents.mergeClasses(classes.imageContainer, imageClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
486
494
  reactComponents.SkeletonItem,
487
495
  {
@@ -809,7 +817,8 @@ var DEFAULT_LABELS5 = {
809
817
  facilitiesLabel: "Fasilitas",
810
818
  selectTicketButton: "Pilih Tiket",
811
819
  timezoneLabel: "WIB",
812
- currencySymbol: "IDR"
820
+ currencySymbol: "IDR",
821
+ logoAlt: "Logo ASDP"
813
822
  },
814
823
  en: {
815
824
  availableSeatsLabel: "Available",
@@ -820,7 +829,8 @@ var DEFAULT_LABELS5 = {
820
829
  facilitiesLabel: "Facilities",
821
830
  selectTicketButton: "Select Ticket",
822
831
  timezoneLabel: "WIB",
823
- currencySymbol: "IDR"
832
+ currencySymbol: "IDR",
833
+ logoAlt: "ASDP Logo"
824
834
  }
825
835
  };
826
836
  var useStyles5 = reactComponents.makeStyles({
@@ -1120,7 +1130,7 @@ var CardTicket = ({
1120
1130
  {
1121
1131
  src: "/assets/logo/asdp-default.svg",
1122
1132
  className: styles.asdpLogo,
1123
- alt: "asdp",
1133
+ alt: mergedLabels.logoAlt,
1124
1134
  height: 56,
1125
1135
  width: 82
1126
1136
  }
@@ -1563,7 +1573,8 @@ var DEFAULT_LABELS6 = {
1563
1573
  hotelLabel: "Hotel",
1564
1574
  hotelDescription: "Layanan pemesanan hotel",
1565
1575
  otherLabel: "Lainnya",
1566
- otherDescription: "Layanan lainnya"
1576
+ otherDescription: "Layanan lainnya",
1577
+ serviceAriaLabel: "Layanan"
1567
1578
  },
1568
1579
  en: {
1569
1580
  ferryLabel: "Ferry",
@@ -1575,7 +1586,8 @@ var DEFAULT_LABELS6 = {
1575
1586
  hotelLabel: "Hotel",
1576
1587
  hotelDescription: "Hotel Booking Service",
1577
1588
  otherLabel: "Other",
1578
- otherDescription: "Other Services"
1589
+ otherDescription: "Other Services",
1590
+ serviceAriaLabel: "Service"
1579
1591
  }
1580
1592
  };
1581
1593
  var ALIAS_MENU_ITEMS = {
@@ -1718,6 +1730,7 @@ var CardServiceMenu = ({
1718
1730
  {
1719
1731
  className: getMenuItemClass(item.id),
1720
1732
  onClick: () => onServiceClick?.(item.id),
1733
+ "aria-label": `${mergedLabels.serviceAriaLabel} ${label}`,
1721
1734
  children: [
1722
1735
  /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.logo, alt: label, className: styles.logo }),
1723
1736
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.textContent, children: [
@@ -1773,54 +1786,62 @@ var DatePickerInput = React5.forwardRef(
1773
1786
  }
1774
1787
  onClick?.(e);
1775
1788
  };
1776
- return /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Popover, { open: isOpen, onOpenChange: (_, data) => setIsOpen(data.open), trapFocus: true, children: [
1777
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.PopoverTrigger, { disableButtonEnhancement: true, children: /* @__PURE__ */ jsxRuntime.jsx(
1778
- reactComponents.Input,
1779
- {
1780
- ...restProps,
1781
- value: formatDate(field.value),
1782
- readOnly: true,
1783
- placeholder: placeholder || "Pilih tanggal",
1784
- disabled,
1785
- appearance,
1786
- size,
1787
- contentBefore,
1788
- onClick: handleInputClick,
1789
- style: {
1790
- cursor: disabled ? "not-allowed" : "pointer",
1791
- ...style
1792
- },
1793
- contentAfter: /* @__PURE__ */ jsxRuntime.jsx(
1794
- "div",
1789
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1790
+ reactComponents.Popover,
1791
+ {
1792
+ open: isOpen,
1793
+ onOpenChange: (_, data) => setIsOpen(data.open),
1794
+ trapFocus: true,
1795
+ children: [
1796
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.PopoverTrigger, { disableButtonEnhancement: true, children: /* @__PURE__ */ jsxRuntime.jsx(
1797
+ reactComponents.Input,
1795
1798
  {
1796
- onClick: (e) => {
1797
- e.stopPropagation();
1798
- if (!disabled) {
1799
- setIsOpen(!isOpen);
1800
- }
1801
- },
1799
+ ...restProps,
1800
+ value: formatDate(field.value),
1801
+ readOnly: true,
1802
+ placeholder,
1803
+ disabled,
1804
+ appearance,
1805
+ size,
1806
+ contentBefore,
1807
+ onClick: handleInputClick,
1802
1808
  style: {
1803
1809
  cursor: disabled ? "not-allowed" : "pointer",
1804
- display: "flex",
1805
- alignItems: "center"
1810
+ ...style
1806
1811
  },
1807
- children: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:calendar-24-regular" })
1812
+ contentAfter: /* @__PURE__ */ jsxRuntime.jsx(
1813
+ "div",
1814
+ {
1815
+ onClick: (e) => {
1816
+ e.stopPropagation();
1817
+ if (!disabled) {
1818
+ setIsOpen(!isOpen);
1819
+ }
1820
+ },
1821
+ style: {
1822
+ cursor: disabled ? "not-allowed" : "pointer",
1823
+ display: "flex",
1824
+ alignItems: "center"
1825
+ },
1826
+ children: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:calendar-24-regular" })
1827
+ }
1828
+ )
1808
1829
  }
1809
- )
1810
- }
1811
- ) }),
1812
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.PopoverSurface, { tabIndex: -1, style: { maxWidth: "530px" }, children: /* @__PURE__ */ jsxRuntime.jsx(
1813
- reactCalendarCompat.Calendar,
1814
- {
1815
- value: dateValue,
1816
- onSelectDate,
1817
- showGoToToday: true,
1818
- highlightSelectedMonth: true,
1819
- showMonthPickerAsOverlay: false,
1820
- maxDate: max ? new Date(max) : void 0
1821
- }
1822
- ) })
1823
- ] });
1830
+ ) }),
1831
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.PopoverSurface, { tabIndex: -1, style: { maxWidth: "530px" }, children: /* @__PURE__ */ jsxRuntime.jsx(
1832
+ reactCalendarCompat.Calendar,
1833
+ {
1834
+ value: dateValue,
1835
+ onSelectDate,
1836
+ showGoToToday: true,
1837
+ highlightSelectedMonth: true,
1838
+ showMonthPickerAsOverlay: false,
1839
+ maxDate: max ? new Date(max) : void 0
1840
+ }
1841
+ ) })
1842
+ ]
1843
+ }
1844
+ );
1824
1845
  }
1825
1846
  );
1826
1847
  DatePickerInput.displayName = "DatePickerInput";
@@ -1834,7 +1855,14 @@ var DEFAULT_LABELS7 = {
1834
1855
  phonePlaceholder: "Nomor HP",
1835
1856
  identityPlaceholder: "Email, KTP, SIM, Passport, atau Nomor Telepon",
1836
1857
  identityPhonePlaceholder: "Nomor telepon",
1837
- identityIdPlaceholder: "KTP, SIM, atau Passport"
1858
+ identityIdPlaceholder: "KTP, SIM, atau Passport",
1859
+ showPasswordAriaLabel: "Tampilkan kata sandi",
1860
+ hidePasswordAriaLabel: "Sembunyikan kata sandi",
1861
+ datePickerPlaceholder: "Pilih tanggal",
1862
+ phoneDefaultPlaceholder: "Nomor telepon",
1863
+ requiredFieldError: "Field ini wajib diisi",
1864
+ invalidEmailError: "Email tidak valid",
1865
+ emailOrPhoneRequiredError: "Email atau nomor HP wajib diisi"
1838
1866
  },
1839
1867
  en: {
1840
1868
  emailOrPhonePlaceholder: "Email or Phone Number",
@@ -1842,7 +1870,14 @@ var DEFAULT_LABELS7 = {
1842
1870
  phonePlaceholder: "Phone Number",
1843
1871
  identityPlaceholder: "Email, ID Card, Driving License, Passport, or Phone Number",
1844
1872
  identityPhonePlaceholder: "Phone Number",
1845
- identityIdPlaceholder: "ID Card, Driving License, or Passport"
1873
+ identityIdPlaceholder: "ID Card, Driving License, or Passport",
1874
+ showPasswordAriaLabel: "Show password",
1875
+ hidePasswordAriaLabel: "Hide password",
1876
+ datePickerPlaceholder: "Select date",
1877
+ phoneDefaultPlaceholder: "Phone number",
1878
+ requiredFieldError: "This field is required",
1879
+ invalidEmailError: "Invalid email",
1880
+ emailOrPhoneRequiredError: "Email or phone number is required"
1846
1881
  }
1847
1882
  };
1848
1883
  var PhoneInput = PhoneInputComponent__default.default.default || PhoneInputComponent__default.default;
@@ -2525,7 +2560,7 @@ var InputDynamic = ({
2525
2560
  const cleanedValue = cleanPhoneValue(value || "");
2526
2561
  field.onChange(cleanedValue);
2527
2562
  },
2528
- placeholder: placeholder || "Nomor telepon",
2563
+ placeholder: placeholder || mergedLabels.phoneDefaultPlaceholder,
2529
2564
  disabled,
2530
2565
  enableSearch: true,
2531
2566
  disableSearchIcon: true
@@ -2566,7 +2601,7 @@ var InputDynamic = ({
2566
2601
  DatePickerInput_default,
2567
2602
  {
2568
2603
  field,
2569
- placeholder,
2604
+ placeholder: placeholder || mergedLabels.datePickerPlaceholder,
2570
2605
  disabled,
2571
2606
  appearance: error ? "outline" : appearance,
2572
2607
  size,
@@ -2661,7 +2696,7 @@ var InputDynamic = ({
2661
2696
  {
2662
2697
  appearance: "transparent",
2663
2698
  icon: showPassword ? /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:eye-off-24-filled" }) : /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:eye-24-filled" }),
2664
- "aria-label": showPassword ? "Hide password" : "Show password",
2699
+ "aria-label": showPassword ? mergedLabels.hidePasswordAriaLabel : mergedLabels.showPasswordAriaLabel,
2665
2700
  onClick: () => setShowPassword(!showPassword),
2666
2701
  tabIndex: -1,
2667
2702
  type: "button"
@@ -2826,7 +2861,7 @@ var InputDynamic = ({
2826
2861
  const getValidationRules = () => {
2827
2862
  const rules = {};
2828
2863
  if (required) {
2829
- rules.required = validationRules?.required || "Field ini wajib diisi";
2864
+ rules.required = validationRules?.required || mergedLabels.requiredFieldError;
2830
2865
  }
2831
2866
  if (validationRules?.minLength) {
2832
2867
  rules.minLength = validationRules.minLength;
@@ -2849,13 +2884,13 @@ var InputDynamic = ({
2849
2884
  if (type === "email") {
2850
2885
  rules.pattern = {
2851
2886
  value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i,
2852
- message: "Email tidak valid"
2887
+ message: mergedLabels.invalidEmailError
2853
2888
  };
2854
2889
  }
2855
2890
  if (type === "emailOrPhone") {
2856
2891
  rules.validate = (value) => {
2857
2892
  if (required && !value) {
2858
- return "Email atau nomor HP wajib diisi";
2893
+ return mergedLabels.emailOrPhoneRequiredError;
2859
2894
  }
2860
2895
  const stringValue = typeof value === "string" ? value : "";
2861
2896
  if (!stringValue) return true;
@@ -3211,7 +3246,13 @@ var DEFAULT_LABELS8 = {
3211
3246
  errorOriginRequired: "Pelabuhan asal wajib diisi",
3212
3247
  errorDestinationRequired: "Pelabuhan tujuan wajib diisi",
3213
3248
  errorDepartureDateRequired: "Tanggal Berangkat wajib diisi",
3214
- errorReturnDateRequired: "Tanggal Pulang wajib diisi"
3249
+ errorReturnDateRequired: "Tanggal Pulang wajib diisi",
3250
+ switchAriaLabel: "Tukar asal dan tujuan",
3251
+ ferryDescription: "Layanan Penyeberangan Ferry ASDP",
3252
+ ifcsDescription: "Sistem Kontrol Ferry Terintegrasi",
3253
+ skptDescription: "Sistem Tiket Penumpang Terintegrasi",
3254
+ hotelDescription: "Layanan Pemesanan Hotel",
3255
+ otherDescription: "Layanan Lainnya"
3215
3256
  },
3216
3257
  en: {
3217
3258
  fromLabel: "From",
@@ -3233,7 +3274,13 @@ var DEFAULT_LABELS8 = {
3233
3274
  errorOriginRequired: "Origin port is required",
3234
3275
  errorDestinationRequired: "Destination port is required",
3235
3276
  errorDepartureDateRequired: "Departure date is required",
3236
- errorReturnDateRequired: "Return date is required"
3277
+ errorReturnDateRequired: "Return date is required",
3278
+ switchAriaLabel: "Swap origin and destination",
3279
+ ferryDescription: "ASDP Ferry Crossing Service",
3280
+ ifcsDescription: "Integrated Ferry Control System",
3281
+ skptDescription: "Integrated Passenger Ticketing System",
3282
+ hotelDescription: "Hotel Booking Service",
3283
+ otherDescription: "Other Services"
3237
3284
  }
3238
3285
  };
3239
3286
  var useStyles8 = reactComponents.makeStyles({
@@ -3509,7 +3556,7 @@ var CardTicketSearch = ({
3509
3556
  control,
3510
3557
  type: "text",
3511
3558
  contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3512
- iconify_js.Icon,
3559
+ react.Icon,
3513
3560
  {
3514
3561
  icon: "fluent:vehicle-ship-16-filled",
3515
3562
  color: reactComponents.tokens.colorBrandBackground
@@ -3538,6 +3585,7 @@ var CardTicketSearch = ({
3538
3585
  appearance: "secondary",
3539
3586
  size: "large",
3540
3587
  disabled: switchDisabled,
3588
+ "aria-label": labels.switchAriaLabel,
3541
3589
  icon: /* @__PURE__ */ jsxRuntime.jsx(
3542
3590
  "div",
3543
3591
  {
@@ -3546,7 +3594,7 @@ var CardTicketSearch = ({
3546
3594
  "img",
3547
3595
  {
3548
3596
  src: "/assets/images/icons/switch.svg",
3549
- alt: "Switch",
3597
+ alt: labels.switchAriaLabel,
3550
3598
  width: 26,
3551
3599
  height: 26
3552
3600
  }
@@ -3577,7 +3625,7 @@ var CardTicketSearch = ({
3577
3625
  control,
3578
3626
  type: "text",
3579
3627
  contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3580
- iconify_js.Icon,
3628
+ react.Icon,
3581
3629
  {
3582
3630
  icon: "fluent:location-24-filled",
3583
3631
  color: reactComponents.tokens.colorBrandBackground
@@ -3616,7 +3664,7 @@ var CardTicketSearch = ({
3616
3664
  control,
3617
3665
  type: "text",
3618
3666
  contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3619
- iconify_js.Icon,
3667
+ react.Icon,
3620
3668
  {
3621
3669
  icon: "fluent:calendar-24-filled",
3622
3670
  color: reactComponents.tokens.colorBrandBackground
@@ -3676,7 +3724,7 @@ var CardTicketSearch = ({
3676
3724
  control,
3677
3725
  type: "text",
3678
3726
  contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3679
- iconify_js.Icon,
3727
+ react.Icon,
3680
3728
  {
3681
3729
  icon: "fluent:calendar-24-filled",
3682
3730
  color: reactComponents.tokens.colorBrandBackground
@@ -3749,7 +3797,7 @@ var CardTicketSearch = ({
3749
3797
  control,
3750
3798
  type: "text",
3751
3799
  contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3752
- iconify_js.Icon,
3800
+ react.Icon,
3753
3801
  {
3754
3802
  icon: "fluent:ribbon-star-24-filled",
3755
3803
  color: reactComponents.tokens.colorBrandBackground
@@ -3783,7 +3831,7 @@ var CardTicketSearch = ({
3783
3831
  control,
3784
3832
  type: "text",
3785
3833
  contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3786
- iconify_js.Icon,
3834
+ react.Icon,
3787
3835
  {
3788
3836
  icon: "fluent:apps-list-24-filled",
3789
3837
  color: reactComponents.tokens.colorBrandBackground
@@ -3818,7 +3866,7 @@ var CardTicketSearch = ({
3818
3866
  control,
3819
3867
  type: "text",
3820
3868
  contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3821
- iconify_js.Icon,
3869
+ react.Icon,
3822
3870
  {
3823
3871
  icon: "fluent:people-24-filled",
3824
3872
  color: reactComponents.tokens.colorBrandBackground
@@ -3840,7 +3888,7 @@ var CardTicketSearch = ({
3840
3888
  appearance: "primary",
3841
3889
  size: "large",
3842
3890
  type: "submit",
3843
- icon: /* @__PURE__ */ jsxRuntime.jsx(iconify_js.Icon, { icon: "fluent:vehicle-ship-20-filled" }),
3891
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:vehicle-ship-20-filled" }),
3844
3892
  disabled: submitDisabled,
3845
3893
  children: labels.searchButton
3846
3894
  }
@@ -3866,7 +3914,8 @@ var DEFAULT_LABELS9 = {
3866
3914
  serviceClass: "Kelas Layanan",
3867
3915
  typeOfService: "Jenis Layanan",
3868
3916
  totalPassengers: "Jumlah Penumpang",
3869
- changeSearchButton: "Ganti Pencarian"
3917
+ changeSearchButton: "Ganti Pencarian",
3918
+ swapAriaLabel: "Tukar asal dan tujuan"
3870
3919
  },
3871
3920
  en: {
3872
3921
  originHarbor: "Departure Port",
@@ -3875,7 +3924,8 @@ var DEFAULT_LABELS9 = {
3875
3924
  serviceClass: "Service Class",
3876
3925
  typeOfService: "Service Type",
3877
3926
  totalPassengers: "Total Passengers",
3878
- changeSearchButton: "Change Search"
3927
+ changeSearchButton: "Change Search",
3928
+ swapAriaLabel: "Swap origin and destination"
3879
3929
  }
3880
3930
  };
3881
3931
  var useStyles9 = reactComponents.makeStyles({
@@ -4055,7 +4105,8 @@ var CardTicketSearchSummary = ({
4055
4105
  disabled: true,
4056
4106
  appearance: "secondary",
4057
4107
  size: "medium",
4058
- icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:arrow-swap-24-filled" })
4108
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:arrow-swap-24-filled" }),
4109
+ "aria-label": mergedLabels.swapAriaLabel
4059
4110
  }
4060
4111
  ) })
4061
4112
  }
@@ -4292,7 +4343,8 @@ var DEFAULT_LABELS10 = {
4292
4343
  clearAllButton: "Hapus Semua",
4293
4344
  allHarborsHeader: "Semua Pelabuhan",
4294
4345
  loadingData: "Memuat data...",
4295
- harborNotFound: "Pelabuhan tidak ditemukan"
4346
+ harborNotFound: "Pelabuhan tidak ditemukan",
4347
+ closeAriaLabel: "Tutup"
4296
4348
  },
4297
4349
  en: {
4298
4350
  title: "Select Harbor",
@@ -4301,7 +4353,8 @@ var DEFAULT_LABELS10 = {
4301
4353
  clearAllButton: "Clear All",
4302
4354
  allHarborsHeader: "All Harbors",
4303
4355
  loadingData: "Loading data...",
4304
- harborNotFound: "Harbor not found"
4356
+ harborNotFound: "Harbor not found",
4357
+ closeAriaLabel: "Close"
4305
4358
  }
4306
4359
  };
4307
4360
  var useStyles10 = reactComponents.makeStyles({
@@ -4463,7 +4516,7 @@ var ModalSearchHarbor = ({
4463
4516
  reactComponents.Button,
4464
4517
  {
4465
4518
  appearance: "subtle",
4466
- "aria-label": "close",
4519
+ "aria-label": mergedLabels.closeAriaLabel,
4467
4520
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-24-regular" }),
4468
4521
  onClick: handleClose,
4469
4522
  className: styles.closeButton
@@ -4588,12 +4641,14 @@ var DEFAULT_LABELS11 = {
4588
4641
  id: {
4589
4642
  title: "Pilih Tanggal",
4590
4643
  oneWay: "Sekali Jalan",
4591
- roundTrip: "Pulang Pergi"
4644
+ roundTrip: "Pulang Pergi",
4645
+ closeAriaLabel: "Tutup"
4592
4646
  },
4593
4647
  en: {
4594
4648
  title: "Select Date",
4595
4649
  oneWay: "One Way",
4596
- roundTrip: "Round Trip"
4650
+ roundTrip: "Round Trip",
4651
+ closeAriaLabel: "Close"
4597
4652
  }
4598
4653
  };
4599
4654
  var useStyles11 = reactComponents.makeStyles({
@@ -4881,7 +4936,7 @@ var ModalSelectDate = ({
4881
4936
  reactComponents.Button,
4882
4937
  {
4883
4938
  appearance: "subtle",
4884
- "aria-label": "close",
4939
+ "aria-label": mergedLabels.closeAriaLabel,
4885
4940
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-24-regular" }),
4886
4941
  onClick: handleClose,
4887
4942
  className: styles.closeButton
@@ -4946,14 +5001,16 @@ var DEFAULT_LABELS12 = {
4946
5001
  loading: "Memuat...",
4947
5002
  error: "Gagal memuat layanan",
4948
5003
  selectAll: "Pilih Semua",
4949
- saveButton: "Simpan"
5004
+ saveButton: "Simpan",
5005
+ closeAriaLabel: "Tutup"
4950
5006
  },
4951
5007
  en: {
4952
5008
  title: "Select Service Class",
4953
5009
  loading: "Loading...",
4954
5010
  error: "Error loading services",
4955
5011
  selectAll: "Select All",
4956
- saveButton: "Save"
5012
+ saveButton: "Save",
5013
+ closeAriaLabel: "Close"
4957
5014
  }
4958
5015
  };
4959
5016
  var useStyles12 = reactComponents.makeStyles({
@@ -5088,7 +5145,7 @@ var ModalService = ({
5088
5145
  reactComponents.Button,
5089
5146
  {
5090
5147
  appearance: "subtle",
5091
- "aria-label": "close",
5148
+ "aria-label": mergedLabels.closeAriaLabel,
5092
5149
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-24-regular" }),
5093
5150
  onClick: handleClose,
5094
5151
  className: styles.closeButton
@@ -5156,7 +5213,8 @@ var DEFAULT_LABELS13 = {
5156
5213
  saveButton: "Simpan",
5157
5214
  economy: "Ekonomi",
5158
5215
  business: "Bisnis",
5159
- executive: "Eksekutif"
5216
+ executive: "Eksekutif",
5217
+ closeAriaLabel: "Tutup"
5160
5218
  },
5161
5219
  en: {
5162
5220
  title: "Select Total Passengers",
@@ -5165,7 +5223,8 @@ var DEFAULT_LABELS13 = {
5165
5223
  saveButton: "Save",
5166
5224
  economy: "Economy",
5167
5225
  business: "Business",
5168
- executive: "Executive"
5226
+ executive: "Executive",
5227
+ closeAriaLabel: "Close"
5169
5228
  }
5170
5229
  };
5171
5230
  var DEFAULT_SERVICE_CLASSES = [
@@ -5406,7 +5465,7 @@ var ModalTotalPassengers = ({
5406
5465
  reactComponents.Button,
5407
5466
  {
5408
5467
  appearance: "subtle",
5409
- "aria-label": "close",
5468
+ "aria-label": mergedLabels.closeAriaLabel,
5410
5469
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-12-regular" }),
5411
5470
  onClick: onClose
5412
5471
  }
@@ -5525,13 +5584,15 @@ var DEFAULT_LABELS14 = {
5525
5584
  title: "Pilih Tipe Layanan",
5526
5585
  cancelButton: "Batal",
5527
5586
  saveButton: "Simpan",
5528
- vehiclesAlt: "kendaraan"
5587
+ vehiclesAlt: "kendaraan",
5588
+ closeAriaLabel: "Tutup"
5529
5589
  },
5530
5590
  en: {
5531
5591
  title: "Select Service Type",
5532
5592
  cancelButton: "Cancel",
5533
5593
  saveButton: "Save",
5534
- vehiclesAlt: "vehicles"
5594
+ vehiclesAlt: "vehicles",
5595
+ closeAriaLabel: "Close"
5535
5596
  }
5536
5597
  };
5537
5598
  var DEFAULT_VEHICLE_ICONS = {
@@ -5709,7 +5770,7 @@ var ModalTypeOfService = ({
5709
5770
  reactComponents.Button,
5710
5771
  {
5711
5772
  appearance: "subtle",
5712
- "aria-label": "close",
5773
+ "aria-label": mergedLabels.closeAriaLabel,
5713
5774
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-24-regular" }),
5714
5775
  onClick: onClose,
5715
5776
  className: styles.closeButton
@@ -5852,7 +5913,8 @@ var DEFAULT_LABELS15 = {
5852
5913
  highestPrice: "Harga Tertinggi",
5853
5914
  lowestPrice: "Harga Terendah",
5854
5915
  earliestDeparture: "Keberangkatan Paling Awal",
5855
- latestDeparture: "Keberangkatan Paling Akhir"
5916
+ latestDeparture: "Keberangkatan Paling Akhir",
5917
+ resetSortAriaLabel: "Hapus pengurutan"
5856
5918
  },
5857
5919
  en: {
5858
5920
  filterButtonText: "Filter",
@@ -5862,7 +5924,8 @@ var DEFAULT_LABELS15 = {
5862
5924
  highestPrice: "Highest Price",
5863
5925
  lowestPrice: "Lowest Price",
5864
5926
  earliestDeparture: "Earliest Departure",
5865
- latestDeparture: "Latest Departure"
5927
+ latestDeparture: "Latest Departure",
5928
+ resetSortAriaLabel: "Clear sort"
5866
5929
  }
5867
5930
  };
5868
5931
  var getSortOptions = (labels) => [
@@ -6007,6 +6070,7 @@ var SortMenu = ({
6007
6070
  type: "button",
6008
6071
  shape: "circular",
6009
6072
  className: styles.button,
6073
+ "aria-label": labels.resetSortAriaLabel,
6010
6074
  children: currentSortLabel
6011
6075
  }
6012
6076
  ),
@@ -6049,7 +6113,8 @@ var DEFAULT_LABELS16 = {
6049
6113
  resetButton: "Reset",
6050
6114
  applyButton: "Terapkan",
6051
6115
  hourUnit: "jam",
6052
- currencySymbol: "IDR"
6116
+ currencySymbol: "IDR",
6117
+ closeAriaLabel: "Tutup"
6053
6118
  },
6054
6119
  en: {
6055
6120
  title: "Filter by",
@@ -6066,7 +6131,8 @@ var DEFAULT_LABELS16 = {
6066
6131
  resetButton: "Reset",
6067
6132
  applyButton: "Apply",
6068
6133
  hourUnit: "hours",
6069
- currencySymbol: "IDR"
6134
+ currencySymbol: "IDR",
6135
+ closeAriaLabel: "Close"
6070
6136
  }
6071
6137
  };
6072
6138
  var DEFAULT_SERVICE_TYPES = [
@@ -6345,7 +6411,7 @@ var ModalFilterTicket = ({
6345
6411
  reactComponents.Button,
6346
6412
  {
6347
6413
  appearance: "subtle",
6348
- "aria-label": "close",
6414
+ "aria-label": mergedLabels.closeAriaLabel,
6349
6415
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-24-regular" }),
6350
6416
  className: styles.closeButton,
6351
6417
  onClick: () => onOpenChange(false)
@@ -6692,7 +6758,8 @@ var DEFAULT_LABELS18 = {
6692
6758
  typeOfServicePlaceholder: "Pilih Jenis penumpang",
6693
6759
  passengerLabel: "Penumpang",
6694
6760
  passengerPlaceholder: "Pilih Penumpang",
6695
- searchButton: "Cari Tiket"
6761
+ searchButton: "Cari Tiket",
6762
+ closeAriaLabel: "Tutup"
6696
6763
  },
6697
6764
  en: {
6698
6765
  title: "Search Other Schedules",
@@ -6715,7 +6782,8 @@ var DEFAULT_LABELS18 = {
6715
6782
  typeOfServicePlaceholder: "Select Type of Passenger",
6716
6783
  passengerLabel: "Passenger",
6717
6784
  passengerPlaceholder: "Select Passenger",
6718
- searchButton: "Search Ticket"
6785
+ searchButton: "Search Ticket",
6786
+ closeAriaLabel: "Close"
6719
6787
  }
6720
6788
  };
6721
6789
  var DEFAULT_FORM_VALUES = {
@@ -6885,7 +6953,7 @@ var ModalSearchTicket = ({
6885
6953
  reactComponents.Button,
6886
6954
  {
6887
6955
  appearance: "subtle",
6888
- "aria-label": "close",
6956
+ "aria-label": mergedLabels.closeAriaLabel,
6889
6957
  className: styles.closeButton,
6890
6958
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:dismiss-24-regular" }),
6891
6959
  onClick: onClose
@@ -7532,14 +7600,28 @@ var DEFAULT_LABELS21 = {
7532
7600
  sameAsOrderer: "Sama Dengan Pemesan",
7533
7601
  searchPlaceholder: "Cari Penumpang",
7534
7602
  addPassengerButton: "Tambah Penumpang",
7535
- cancelButton: "Batal"
7603
+ cancelButton: "Batal",
7604
+ editPassengerAriaLabel: "Edit data penumpang",
7605
+ categories: {
7606
+ adult: "Dewasa",
7607
+ child: "Anak",
7608
+ infant: "Bayi",
7609
+ elderly: "Lansia"
7610
+ }
7536
7611
  },
7537
7612
  en: {
7538
7613
  title: "Passenger Details",
7539
7614
  sameAsOrderer: "Same as Orderer",
7540
7615
  searchPlaceholder: "Search Passenger",
7541
7616
  addPassengerButton: "Add Passenger",
7542
- cancelButton: "Cancel"
7617
+ cancelButton: "Cancel",
7618
+ editPassengerAriaLabel: "Edit passenger data",
7619
+ categories: {
7620
+ adult: "Adult",
7621
+ child: "Child",
7622
+ infant: "Infant",
7623
+ elderly: "Elderly"
7624
+ }
7543
7625
  }
7544
7626
  };
7545
7627
  var useStyles21 = reactComponents.makeStyles({
@@ -7666,20 +7748,31 @@ var ModalListPassenger = ({
7666
7748
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Subtitle2, { children: [
7667
7749
  passenger.name,
7668
7750
  " (",
7669
- passenger.category,
7751
+ (() => {
7752
+ const cat = passenger.category?.toUpperCase();
7753
+ if (cat === "ADULT")
7754
+ return mergedLabels.categories.adult;
7755
+ if (cat === "CHILD")
7756
+ return mergedLabels.categories.child;
7757
+ if (cat === "INFANT")
7758
+ return mergedLabels.categories.infant;
7759
+ if (cat === "ELDERLY")
7760
+ return mergedLabels.categories.elderly;
7761
+ return passenger.category;
7762
+ })(),
7670
7763
  ")"
7671
7764
  ] }) }),
7672
7765
  /* @__PURE__ */ jsxRuntime.jsx(
7673
- react.Icon,
7766
+ reactComponents.Button,
7674
7767
  {
7675
- icon: "fluent:chevron-right-24-regular",
7768
+ appearance: "transparent",
7769
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:chevron-right-24-regular" }),
7676
7770
  onClick: (e) => {
7677
7771
  e.preventDefault();
7678
7772
  e.stopPropagation();
7679
7773
  onEditPassenger(passenger);
7680
7774
  },
7681
- width: 20,
7682
- height: 20
7775
+ "aria-label": mergedLabels.editPassengerAriaLabel
7683
7776
  }
7684
7777
  )
7685
7778
  ]
@@ -8380,7 +8473,10 @@ var DEFAULT_LABELS25 = {
8380
8473
  unit: "Unit"
8381
8474
  },
8382
8475
  pricePlaceholder: "Rp. 0",
8383
- currencySymbol: "Rp."
8476
+ currencySymbol: "Rp.",
8477
+ deleteOwnerAriaLabel: "Hapus pemilik",
8478
+ decrementQuantityAriaLabel: "Kurangi jumlah",
8479
+ incrementQuantityAriaLabel: "Tambah jumlah"
8384
8480
  },
8385
8481
  en: {
8386
8482
  title: "Owner & Cargo Information",
@@ -8430,7 +8526,10 @@ var DEFAULT_LABELS25 = {
8430
8526
  unit: "Unit"
8431
8527
  },
8432
8528
  pricePlaceholder: "Rp. 0",
8433
- currencySymbol: "Rp."
8529
+ currencySymbol: "Rp.",
8530
+ deleteOwnerAriaLabel: "Delete owner",
8531
+ decrementQuantityAriaLabel: "Decrease quantity",
8532
+ incrementQuantityAriaLabel: "Increase quantity"
8434
8533
  }
8435
8534
  };
8436
8535
  var useStyles25 = reactComponents.makeStyles({
@@ -8547,6 +8646,7 @@ var CardVehicleOwnerForm = ({
8547
8646
  {
8548
8647
  appearance: "transparent",
8549
8648
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:delete-24-regular" }),
8649
+ "aria-label": mergedLabels.deleteOwnerAriaLabel,
8550
8650
  onClick: (e) => {
8551
8651
  e.stopPropagation();
8552
8652
  onDeleteOwner(owner.id);
@@ -9013,6 +9113,7 @@ var CardVehicleOwnerForm = ({
9013
9113
  }
9014
9114
  }
9015
9115
  ),
9116
+ "aria-label": mergedLabels.decrementQuantityAriaLabel,
9016
9117
  size: "small",
9017
9118
  onClick: () => {
9018
9119
  const currentVal = getValues(
@@ -9077,6 +9178,7 @@ var CardVehicleOwnerForm = ({
9077
9178
  }
9078
9179
  }
9079
9180
  ),
9181
+ "aria-label": mergedLabels.incrementQuantityAriaLabel,
9080
9182
  size: "small",
9081
9183
  onClick: () => {
9082
9184
  const currentVal = getValues(
@@ -10085,11 +10187,15 @@ var CardAddon = ({
10085
10187
  var DEFAULT_LABELS29 = {
10086
10188
  id: {
10087
10189
  addButton: "Tambah",
10088
- currencySymbol: "Rp"
10190
+ currencySymbol: "Rp",
10191
+ decrementAriaLabel: "Kurangi jumlah",
10192
+ incrementAriaLabel: "Tambah jumlah"
10089
10193
  },
10090
10194
  en: {
10091
10195
  addButton: "Add",
10092
- currencySymbol: "Rp"
10196
+ currencySymbol: "Rp",
10197
+ decrementAriaLabel: "Decrease quantity",
10198
+ incrementAriaLabel: "Increase quantity"
10093
10199
  }
10094
10200
  };
10095
10201
  var useStyles29 = reactComponents.makeStyles({
@@ -10293,16 +10399,18 @@ var CardMealCatalog = ({
10293
10399
  {
10294
10400
  size: "small",
10295
10401
  shape: "circular",
10402
+ "aria-label": mergedLabels.decrementAriaLabel,
10296
10403
  icon: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.SubtractRegular, {}),
10297
10404
  onClick: () => onUpdateQuantity(item.id, -1)
10298
10405
  }
10299
10406
  ),
10300
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: item.quantity }),
10407
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { "aria-live": "polite", children: item.quantity }),
10301
10408
  /* @__PURE__ */ jsxRuntime.jsx(
10302
10409
  reactComponents.Button,
10303
10410
  {
10304
10411
  size: "small",
10305
10412
  shape: "circular",
10413
+ "aria-label": mergedLabels.incrementAriaLabel,
10306
10414
  icon: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.AddRegular, {}),
10307
10415
  onClick: () => onUpdateQuantity(item.id, 1)
10308
10416
  }
@@ -10326,8 +10434,12 @@ var CardMealCatalog = ({
10326
10434
 
10327
10435
  // src/components/CardReview/CardReview.constants.ts
10328
10436
  var DEFAULT_LABELS30 = {
10329
- id: {},
10330
- en: {}
10437
+ id: {
10438
+ defaultTitle: "Tinjauan"
10439
+ },
10440
+ en: {
10441
+ defaultTitle: "Review"
10442
+ }
10331
10443
  };
10332
10444
  var useStyles30 = reactComponents.makeStyles({
10333
10445
  card: {
@@ -10381,10 +10493,10 @@ var CardReview = ({
10381
10493
  headerAction
10382
10494
  }) => {
10383
10495
  const styles = useStyles30();
10384
- ({ ...DEFAULT_LABELS30[language], ...labels });
10496
+ const mergedLabels = { ...DEFAULT_LABELS30[language], ...labels };
10385
10497
  return /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Card, { className: `${styles.card} ${className || ""}`, children: [
10386
10498
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.headerContainer, children: [
10387
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle1, { className: styles.headerTitle, children: title }),
10499
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle1, { className: styles.headerTitle, children: title || mergedLabels.defaultTitle }),
10388
10500
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.headerLine }),
10389
10501
  headerAction && /* @__PURE__ */ jsxRuntime.jsx("div", { children: headerAction })
10390
10502
  ] }),
@@ -10796,8 +10908,12 @@ var CardPriceDetails = ({
10796
10908
 
10797
10909
  // src/components/CardPaymentMethodList/CardPaymentMethodList.constants.ts
10798
10910
  var DEFAULT_LABELS33 = {
10799
- id: {},
10800
- en: {}
10911
+ id: {
10912
+ selectAriaLabel: "Pilih metode pembayaran"
10913
+ },
10914
+ en: {
10915
+ selectAriaLabel: "Select payment method"
10916
+ }
10801
10917
  };
10802
10918
  var useStyles34 = reactComponents.makeStyles({
10803
10919
  container: {
@@ -10860,7 +10976,7 @@ var CardPaymentMethodList = ({
10860
10976
  onSelect
10861
10977
  }) => {
10862
10978
  const styles = useStyles34();
10863
- ({ ...DEFAULT_LABELS33[language], ...labels });
10979
+ const mergedLabels = { ...DEFAULT_LABELS33[language], ...labels };
10864
10980
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.card, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${styles.container}`, children: methods.map((category, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
10865
10981
  index > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.dividerContainer, children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, {}) }),
10866
10982
  /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Accordion, { multiple: true, collapsible: true, children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.AccordionItem, { value: category.value, children: [
@@ -10896,7 +11012,8 @@ var CardPaymentMethodList = ({
10896
11012
  onChange: () => onSelect(option.value),
10897
11013
  value: option.value,
10898
11014
  name: "payment-method",
10899
- disabled: option.disabled
11015
+ disabled: option.disabled,
11016
+ "aria-label": `${mergedLabels.selectAriaLabel} ${option.label}`
10900
11017
  }
10901
11018
  )
10902
11019
  ]
@@ -11147,7 +11264,8 @@ var DEFAULT_LABELS36 = {
11147
11264
  viewTicketButton: "Lihat E-Tiket",
11148
11265
  defaultStatus: "Sudah Dibayar",
11149
11266
  defaultTitle: "Pembayaran berhasil",
11150
- defaultDescription: "Tiket Anda aktif dan siap digunakan."
11267
+ defaultDescription: "Tiket Anda aktif dan siap digunakan.",
11268
+ illustrationAlt: "Ilustrasi E-Tiket"
11151
11269
  },
11152
11270
  en: {
11153
11271
  detailTitle: "Booking Details",
@@ -11160,7 +11278,8 @@ var DEFAULT_LABELS36 = {
11160
11278
  viewTicketButton: "View E-Ticket",
11161
11279
  defaultStatus: "Paid",
11162
11280
  defaultTitle: "Payment successful",
11163
- defaultDescription: "Your ticket is active and ready to use."
11281
+ defaultDescription: "Your ticket is active and ready to use.",
11282
+ illustrationAlt: "E-Ticket Illustration"
11164
11283
  }
11165
11284
  };
11166
11285
  var useStyles37 = reactComponents.makeStyles({
@@ -11244,7 +11363,7 @@ var CardStatusOrder = ({
11244
11363
  "img",
11245
11364
  {
11246
11365
  src: illustrationUrl,
11247
- alt: "E-Ticket",
11366
+ alt: mergedLabels.illustrationAlt,
11248
11367
  width: 406,
11249
11368
  height: 266
11250
11369
  }
@@ -11341,7 +11460,8 @@ var DEFAULT_LABELS37 = {
11341
11460
  ppnNote: "*PPN 11% dikenakan untuk biaya layanan dan biaya admin",
11342
11461
  grandTotalLabel: "Total Pembayaran",
11343
11462
  currencyPrefix: "Rp.",
11344
- currencyCode: "IDR."
11463
+ currencyCode: "IDR.",
11464
+ closeAriaLabel: "Tutup"
11345
11465
  },
11346
11466
  en: {
11347
11467
  title: "Price Details",
@@ -11352,7 +11472,8 @@ var DEFAULT_LABELS37 = {
11352
11472
  ppnNote: "*VAT 11% is charged for service fees and admin fees",
11353
11473
  grandTotalLabel: "Total Payment",
11354
11474
  currencyPrefix: "Rp.",
11355
- currencyCode: "IDR."
11475
+ currencyCode: "IDR.",
11476
+ closeAriaLabel: "Close"
11356
11477
  }
11357
11478
  };
11358
11479
  var useStyles38 = reactComponents.makeStyles({
@@ -11499,7 +11620,7 @@ var ModalPriceDetail = ({
11499
11620
  reactComponents.Button,
11500
11621
  {
11501
11622
  appearance: "subtle",
11502
- "aria-label": "close",
11623
+ "aria-label": mergedLabels.closeAriaLabel,
11503
11624
  icon: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
11504
11625
  "path",
11505
11626
  {