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

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