@asdp/ferryui 0.1.15 → 0.1.19

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
@@ -2,10 +2,11 @@
2
2
 
3
3
  var reactComponents = require('@fluentui/react-components');
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
- var React2 = require('react');
5
+ var React5 = require('react');
6
6
  var reactGridSystem = require('react-grid-system');
7
- var react = require('@iconify/react');
7
+ var iconify_js = require('@iconify/react/dist/iconify.js');
8
8
  var reactHookForm = require('react-hook-form');
9
+ var react = require('@iconify/react');
9
10
  var PhoneInputComponent = require('react-phone-input-2');
10
11
  var Select = require('react-select');
11
12
  var reactCalendarCompat = require('@fluentui/react-calendar-compat');
@@ -13,7 +14,7 @@ var moment = require('moment');
13
14
 
14
15
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
15
16
 
16
- var React2__default = /*#__PURE__*/_interopDefault(React2);
17
+ var React5__default = /*#__PURE__*/_interopDefault(React5);
17
18
  var PhoneInputComponent__default = /*#__PURE__*/_interopDefault(PhoneInputComponent);
18
19
  var Select__default = /*#__PURE__*/_interopDefault(Select);
19
20
  var moment__default = /*#__PURE__*/_interopDefault(moment);
@@ -214,9 +215,9 @@ var CarouselWithCustomNav = ({
214
215
  cardFocus = false
215
216
  }) => {
216
217
  const styles = useStyles2();
217
- const [internalIndex, setInternalIndex] = React2.useState(0);
218
+ const [internalIndex, setInternalIndex] = React5.useState(0);
218
219
  const activeIndex = controlledIndex !== void 0 ? controlledIndex : internalIndex;
219
- const handleIndexChange = React2.useCallback((index) => {
220
+ const handleIndexChange = React5.useCallback((index) => {
220
221
  if (controlledIndex === void 0) {
221
222
  setInternalIndex(index);
222
223
  }
@@ -352,10 +353,30 @@ var CardPromo = ({
352
353
  buttonText = "Lihat Detail",
353
354
  className,
354
355
  imageClassName,
355
- descriptionClassName
356
+ descriptionClassName,
357
+ isLoading = false,
358
+ imageOnly = false
356
359
  }) => {
357
360
  const classes = useStyles3();
358
361
  const ariaLabel = totalCards ? `Card ${index + 1} of ${totalCards}` : `Promo card ${index + 1}`;
362
+ if (isLoading) {
363
+ return /* @__PURE__ */ jsxRuntime.jsx(
364
+ reactComponents.CarouselCard,
365
+ {
366
+ autoSize: true,
367
+ className: reactComponents.mergeClasses(classes.actionCard, className),
368
+ style: { cursor: "default" },
369
+ children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Skeleton, { "aria-label": "Loading content", children: [
370
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: reactComponents.mergeClasses(classes.imageContainer, imageClassName), children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.SkeletonItem, { shape: "rectangle", style: { width: "100%", height: "100%" } }) }),
371
+ !imageOnly && /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Row, { className: classes.infoWrapper, children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Col, { className: classes.info, xs: 12, children: [
372
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.SkeletonItem, { style: { width: "70%", height: "20px" } }),
373
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.SkeletonItem, { style: { width: "90%", height: "16px" } }),
374
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.SkeletonItem, { style: { width: "80%", height: "16px" } })
375
+ ] }) })
376
+ ] })
377
+ }
378
+ );
379
+ }
359
380
  return /* @__PURE__ */ jsxRuntime.jsxs(
360
381
  reactComponents.CarouselCard,
361
382
  {
@@ -374,7 +395,7 @@ var CardPromo = ({
374
395
  alt: imageAlt
375
396
  }
376
397
  ) }),
377
- /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { className: classes.infoWrapper, children: [
398
+ !imageOnly && /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { className: classes.infoWrapper, children: [
378
399
  /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Col, { className: classes.info, xs: 12, sm: 12, md: 12, lg: showButton ? 8 : 12, xl: showButton ? 8 : 12, xxl: showButton ? 8 : 12, xxxl: showButton ? 8 : 12, children: [
379
400
  /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { className: classes.title, children: title }),
380
401
  /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { className: reactComponents.mergeClasses(classes.title, descriptionClassName), children: description })
@@ -421,10 +442,24 @@ var CardBanner = ({
421
442
  alt,
422
443
  index = 0,
423
444
  totalBanners,
424
- onClick
445
+ onClick,
446
+ isLoading = false
425
447
  }) => {
426
448
  const classes = useStyles4();
427
449
  const ariaLabel = totalBanners ? `Banner ${index + 1} of ${totalBanners}` : `Banner ${index + 1}`;
450
+ if (isLoading) {
451
+ return /* @__PURE__ */ jsxRuntime.jsx(reactComponents.CarouselCard, { className: classes.bannerCard, children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Skeleton, { "aria-label": "Loading banner", style: { width: "100%", height: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(
452
+ reactComponents.SkeletonItem,
453
+ {
454
+ shape: "rectangle",
455
+ style: {
456
+ width: "100%",
457
+ height: "100%",
458
+ borderRadius: reactComponents.tokens.borderRadiusXLarge
459
+ }
460
+ }
461
+ ) }) });
462
+ }
428
463
  return /* @__PURE__ */ jsxRuntime.jsx(
429
464
  reactComponents.CarouselCard,
430
465
  {
@@ -1076,49 +1111,114 @@ var useStyles6 = reactComponents.makeStyles({
1076
1111
  }
1077
1112
  }
1078
1113
  });
1114
+ var SERVICE_MENU_ITEMS = {
1115
+ ferry: {
1116
+ id: "ferry",
1117
+ logo: "/assets/images/icons/ferry.svg",
1118
+ labels: {
1119
+ id: { label: "Ferry", description: "Layanan penyeberangan ferry ASDP" },
1120
+ en: { label: "Ferry", description: "ASDP Ferry Crossing Service" }
1121
+ }
1122
+ },
1123
+ ifcs: {
1124
+ id: "ifcs",
1125
+ logo: "/assets/logo/asdp-default.svg",
1126
+ labels: {
1127
+ id: { label: "IFCS", description: "Integrated Ferry Control System" },
1128
+ en: { label: "IFCS", description: "Integrated Ferry Control System" }
1129
+ }
1130
+ },
1131
+ skpt: {
1132
+ id: "skpt",
1133
+ logo: "/assets/logo/asdp-default.svg",
1134
+ labels: {
1135
+ id: { label: "SKPT", description: "Sistem Karcis Penumpang Terpadu" },
1136
+ en: { label: "SKPT", description: "Integrated Passenger Ticketing System" }
1137
+ }
1138
+ },
1139
+ hotel: {
1140
+ id: "hotel",
1141
+ logo: "/assets/images/icons/hotel.svg",
1142
+ labels: {
1143
+ id: { label: "Hotel", description: "Layanan pemesanan hotel" },
1144
+ en: { label: "Hotel", description: "Hotel Booking Service" }
1145
+ }
1146
+ },
1147
+ other: {
1148
+ id: "other",
1149
+ logo: "/assets/images/icons/other.svg",
1150
+ labels: {
1151
+ id: { label: "Lainnya", description: "Layanan lainnya" },
1152
+ en: { label: "Other", description: "Other Services" }
1153
+ }
1154
+ }
1155
+ };
1079
1156
  var CardServiceMenu = ({
1080
- items,
1081
- activeItemId,
1082
- onItemClick,
1157
+ activeServiceId = "ferry",
1158
+ language = "id",
1159
+ onServiceClick,
1083
1160
  showDescriptions = true,
1084
1161
  className
1085
1162
  }) => {
1086
1163
  const styles = useStyles6();
1087
- const getMenuItemClass = (itemId) => {
1088
- const isActive = activeItemId === itemId;
1164
+ const getMenuItemClass = (serviceId) => {
1165
+ const isActive = activeServiceId === serviceId;
1089
1166
  return reactComponents.mergeClasses(
1090
1167
  styles.menuItem,
1091
1168
  isActive && styles.menuItemActive
1092
1169
  );
1093
1170
  };
1094
- return /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Card, { className: reactComponents.mergeClasses(styles.card, className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.menuList, children: items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(React2__default.default.Fragment, { children: [
1095
- /* @__PURE__ */ jsxRuntime.jsxs(
1096
- reactComponents.Button,
1097
- {
1098
- className: getMenuItemClass(item.id),
1099
- onClick: () => onItemClick?.(item.id),
1100
- style: item.customStyle,
1101
- children: [
1102
- item.logo && /* @__PURE__ */ jsxRuntime.jsx(
1103
- "img",
1104
- {
1105
- src: item.logo,
1106
- alt: item.label,
1107
- className: styles.logo
1108
- }
1109
- ),
1110
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.textContent, children: [
1111
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.label, children: item.label }),
1112
- showDescriptions && item.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.description, children: item.description })
1113
- ] })
1114
- ]
1115
- }
1116
- ),
1117
- index < items.length - 1 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1118
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, { className: styles.dividerHorizontal }),
1119
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, { vertical: true, className: styles.dividerVertical })
1120
- ] })
1121
- ] }, item.id)) }) });
1171
+ const menuItems = Object.values(SERVICE_MENU_ITEMS);
1172
+ return /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Card, { className: reactComponents.mergeClasses(styles.card, className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.menuList, children: menuItems.map((item, index) => {
1173
+ const { label, description } = item.labels[language];
1174
+ return /* @__PURE__ */ jsxRuntime.jsxs(React5__default.default.Fragment, { children: [
1175
+ /* @__PURE__ */ jsxRuntime.jsxs(
1176
+ reactComponents.Button,
1177
+ {
1178
+ className: getMenuItemClass(item.id),
1179
+ onClick: () => onServiceClick?.(item.id),
1180
+ children: [
1181
+ /* @__PURE__ */ jsxRuntime.jsx(
1182
+ "img",
1183
+ {
1184
+ src: item.logo,
1185
+ alt: label,
1186
+ className: styles.logo
1187
+ }
1188
+ ),
1189
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.textContent, children: [
1190
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.label, children: label }),
1191
+ showDescriptions && /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.description, children: description })
1192
+ ] })
1193
+ ]
1194
+ }
1195
+ ),
1196
+ index < menuItems.length - 1 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1197
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, { className: styles.dividerHorizontal }),
1198
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, { vertical: true, className: styles.dividerVertical })
1199
+ ] })
1200
+ ] }, item.id);
1201
+ }) }) });
1202
+ };
1203
+
1204
+ // src/constants/generated/tokensV2.ts
1205
+ var brandColors = {
1206
+ "10": "#001a1bff",
1207
+ "20": "#02383bff",
1208
+ "30": "#002426",
1209
+ "40": "#004044",
1210
+ "50": "#005D62",
1211
+ "60": "#007A81",
1212
+ "70": "#00969F",
1213
+ "80": "#00B3BD",
1214
+ "90": "#29BFC8",
1215
+ "100": "#52CBD2",
1216
+ "110": "#7AD7DD",
1217
+ "120": "#A3E4E7",
1218
+ "130": "#CCF0F2",
1219
+ "140": "#E1F7F8",
1220
+ "150": "#fdfdff",
1221
+ "160": "#ffffff"
1122
1222
  };
1123
1223
  var fontWeight = {
1124
1224
  "Medium": 500};
@@ -1128,7 +1228,7 @@ var lightModeColors = {
1128
1228
  "Brand_Stroke_1_Rest": "#00B3BD"};
1129
1229
  var tokensV2_default = {
1130
1230
  lightModeColors};
1131
- var DatePickerInput = React2.forwardRef(
1231
+ var DatePickerInput = React5.forwardRef(
1132
1232
  ({
1133
1233
  field,
1134
1234
  placeholder,
@@ -1141,7 +1241,7 @@ var DatePickerInput = React2.forwardRef(
1141
1241
  max,
1142
1242
  ...restProps
1143
1243
  }, ref) => {
1144
- const [isOpen, setIsOpen] = React2.useState(false);
1244
+ const [isOpen, setIsOpen] = React5.useState(false);
1145
1245
  const dateValue = field.value ? new Date(field.value) : void 0;
1146
1246
  const onSelectDate = (date) => {
1147
1247
  if (date) {
@@ -1399,249 +1499,19 @@ var useStyles7 = reactComponents.makeStyles({
1399
1499
  border: `1px solid ${tokensV2_default.lightModeColors.Brand_Stroke_1_Rest}`,
1400
1500
  color: tokensV2_default.lightModeColors.Brand_Stroke_1_Rest,
1401
1501
  backgroundColor: "transparent"
1502
+ },
1503
+ // Disabled state styling
1504
+ "& .fui-Radio__input:disabled ~ .fui-Radio__label": {
1505
+ opacity: 0.6,
1506
+ cursor: "not-allowed",
1507
+ backgroundColor: reactComponents.tokens.colorNeutralBackground4
1508
+ },
1509
+ "&:hover .fui-Radio__input:disabled ~ .fui-Radio__label": {
1510
+ backgroundColor: reactComponents.tokens.colorNeutralBackground4,
1511
+ border: `1px solid ${reactComponents.tokens.colorNeutralStroke1}`
1402
1512
  }
1403
1513
  }
1404
1514
  });
1405
- var DEFAULT_COUNTRY_CODES = [
1406
- { code: "AF", name: "Afghanistan", dialCode: "+93", passportRegex: "^[A-Z][0-9]{7}$" },
1407
- { code: "AL", name: "Albania", dialCode: "+355", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1408
- { code: "DZ", name: "Algeria", dialCode: "+213", passportRegex: "^[0-9]{9}$" },
1409
- { code: "AS", name: "American Samoa", dialCode: "+1", passportRegex: "^[0-9]{9}$" },
1410
- { code: "AD", name: "Andorra", dialCode: "+376", passportRegex: "^[A-Z0-9]{6,10}$" },
1411
- { code: "AO", name: "Angola", dialCode: "+244", passportRegex: "^[A-Z0-9]{6,10}$" },
1412
- { code: "AI", name: "Anguilla", dialCode: "+1", passportRegex: "^[A-Z0-9]{6,10}$" },
1413
- { code: "AQ", name: "Antarctica", dialCode: "+672", passportRegex: "^[A-Z0-9]{6,10}$" },
1414
- { code: "AG", name: "Antigua and Barbuda", dialCode: "+1", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1415
- { code: "AR", name: "Argentina", dialCode: "+54", passportRegex: "^[A-Z]{3}[0-9]{6}$" },
1416
- { code: "AM", name: "Armenia", dialCode: "+374", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1417
- { code: "AW", name: "Aruba", dialCode: "+297", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1418
- { code: "AU", name: "Australia", dialCode: "+61", passportRegex: "^[A-Z][0-9]{7}$" },
1419
- { code: "AT", name: "Austria", dialCode: "+43", passportRegex: "^[A-Z0-9]{8}$" },
1420
- { code: "AZ", name: "Azerbaijan", dialCode: "+994", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1421
- { code: "BS", name: "Bahamas", dialCode: "+1", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1422
- { code: "BH", name: "Bahrain", dialCode: "+973", passportRegex: "^[A-Z][0-9]{7}$" },
1423
- { code: "BD", name: "Bangladesh", dialCode: "+880", passportRegex: "^[A-Z][0-9]{7}$" },
1424
- { code: "BB", name: "Barbados", dialCode: "+1", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1425
- { code: "BY", name: "Belarus", dialCode: "+375", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1426
- { code: "BE", name: "Belgium", dialCode: "+32", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1427
- { code: "BZ", name: "Belize", dialCode: "+501", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1428
- { code: "BJ", name: "Benin", dialCode: "+229", passportRegex: "^[A-Z0-9]{6,10}$" },
1429
- { code: "BM", name: "Bermuda", dialCode: "+1", passportRegex: "^[A-Z0-9]{6,10}$" },
1430
- { code: "BT", name: "Bhutan", dialCode: "+975", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1431
- { code: "BO", name: "Bolivia", dialCode: "+591", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1432
- {
1433
- code: "BA",
1434
- name: "Bosnia and Herzegovina",
1435
- dialCode: "+387",
1436
- passportRegex: "^[A-Z]{2}[0-9]{6}$"
1437
- },
1438
- { code: "BW", name: "Botswana", dialCode: "+267", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1439
- { code: "BR", name: "Brazil", dialCode: "+55", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1440
- { code: "BN", name: "Brunei", dialCode: "+673", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1441
- { code: "BG", name: "Bulgaria", dialCode: "+359", passportRegex: "^[0-9]{9}$" },
1442
- { code: "BF", name: "Burkina Faso", dialCode: "+226", passportRegex: "^[A-Z0-9]{6,10}$" },
1443
- { code: "BI", name: "Burundi", dialCode: "+257", passportRegex: "^[A-Z0-9]{6,10}$" },
1444
- { code: "KH", name: "Cambodia", dialCode: "+855", passportRegex: "^[A-Z][0-9]{7}$" },
1445
- { code: "CM", name: "Cameroon", dialCode: "+237", passportRegex: "^[A-Z0-9]{6,10}$" },
1446
- { code: "CA", name: "Canada", dialCode: "+1", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1447
- { code: "CV", name: "Cape Verde", dialCode: "+238", passportRegex: "^[A-Z0-9]{6,10}$" },
1448
- { code: "KY", name: "Cayman Islands", dialCode: "+1", passportRegex: "^[A-Z0-9]{6,10}$" },
1449
- {
1450
- code: "CF",
1451
- name: "Central African Republic",
1452
- dialCode: "+236",
1453
- passportRegex: "^[A-Z0-9]{6,10}$"
1454
- },
1455
- { code: "TD", name: "Chad", dialCode: "+235", passportRegex: "^[A-Z0-9]{6,10}$" },
1456
- { code: "CL", name: "Chile", dialCode: "+56", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1457
- { code: "CN", name: "China", dialCode: "+86", passportRegex: "^[0-9]{9}$" },
1458
- { code: "CO", name: "Colombia", dialCode: "+57", passportRegex: "^[A-Z]{3}[0-9]{6}$" },
1459
- { code: "KM", name: "Comoros", dialCode: "+269", passportRegex: "^[A-Z0-9]{6,10}$" },
1460
- { code: "CG", name: "Congo", dialCode: "+242", passportRegex: "^[A-Z0-9]{6,10}$" },
1461
- { code: "CR", name: "Costa Rica", dialCode: "+506", passportRegex: "^[A-Z0-9]{6,10}$" },
1462
- { code: "HR", name: "Croatia", dialCode: "+385", passportRegex: "^[A-Z]{3}[0-9]{6}$" },
1463
- { code: "CU", name: "Cuba", dialCode: "+53", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1464
- { code: "CY", name: "Cyprus", dialCode: "+357", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1465
- { code: "CZ", name: "Czech Republic", dialCode: "+420", passportRegex: "^[0-9]{8}$" },
1466
- { code: "DK", name: "Denmark", dialCode: "+45", passportRegex: "^[A-Z0-9]{9}$" },
1467
- { code: "DJ", name: "Djibouti", dialCode: "+253", passportRegex: "^[A-Z0-9]{6,10}$" },
1468
- { code: "DM", name: "Dominica", dialCode: "+1", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1469
- { code: "DO", name: "Dominican Republic", dialCode: "+1", passportRegex: "^[A-Z0-9]{6,10}$" },
1470
- { code: "EC", name: "Ecuador", dialCode: "+593", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1471
- { code: "EG", name: "Egypt", dialCode: "+20", passportRegex: "^[A-Z][0-9]{7}$" },
1472
- { code: "SV", name: "El Salvador", dialCode: "+503", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1473
- { code: "GQ", name: "Equatorial Guinea", dialCode: "+240", passportRegex: "^[A-Z0-9]{6,10}$" },
1474
- { code: "ER", name: "Eritrea", dialCode: "+291", passportRegex: "^[A-Z0-9]{6,10}$" },
1475
- { code: "EE", name: "Estonia", dialCode: "+372", passportRegex: "^[A-Z0-9]{8}$" },
1476
- { code: "SZ", name: "Eswatini", dialCode: "+268", passportRegex: "^[A-Z0-9]{6,10}$" },
1477
- { code: "ET", name: "Ethiopia", dialCode: "+251", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1478
- { code: "FJ", name: "Fiji", dialCode: "+679", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1479
- { code: "FI", name: "Finland", dialCode: "+358", passportRegex: "^[A-Z0-9]{9}$" },
1480
- { code: "FR", name: "France", dialCode: "+33", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1481
- { code: "GA", name: "Gabon", dialCode: "+241", passportRegex: "^[A-Z0-9]{6,10}$" },
1482
- { code: "GM", name: "Gambia", dialCode: "+220", passportRegex: "^[A-Z0-9]{6,10}$" },
1483
- { code: "GE", name: "Georgia", dialCode: "+995", passportRegex: "^[A-Z0-9]{8}$" },
1484
- { code: "DE", name: "Germany", dialCode: "+49", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1485
- { code: "GH", name: "Ghana", dialCode: "+233", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1486
- { code: "GR", name: "Greece", dialCode: "+30", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1487
- { code: "GD", name: "Grenada", dialCode: "+1", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1488
- { code: "GT", name: "Guatemala", dialCode: "+502", passportRegex: "^[A-Z]{3}[0-9]{6}$" },
1489
- { code: "GN", name: "Guinea", dialCode: "+224", passportRegex: "^[A-Z0-9]{6,10}$" },
1490
- { code: "GW", name: "Guinea-Bissau", dialCode: "+245", passportRegex: "^[A-Z0-9]{6,10}$" },
1491
- { code: "GY", name: "Guyana", dialCode: "+592", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1492
- { code: "HT", name: "Haiti", dialCode: "+509", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1493
- { code: "HN", name: "Honduras", dialCode: "+504", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1494
- { code: "HK", name: "Hong Kong", dialCode: "+852", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1495
- { code: "HU", name: "Hungary", dialCode: "+36", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1496
- { code: "IS", name: "Iceland", dialCode: "+354", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1497
- { code: "IN", name: "India", dialCode: "+91", passportRegex: "^[A-Z][0-9]{7}$" },
1498
- { code: "ID", name: "Indonesia", dialCode: "+62", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1499
- { code: "IR", name: "Iran", dialCode: "+98", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1500
- { code: "IQ", name: "Iraq", dialCode: "+964", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1501
- { code: "IE", name: "Ireland", dialCode: "+353", passportRegex: "^[A-Z0-9]{2}[0-9]{7}$" },
1502
- { code: "IL", name: "Israel", dialCode: "+972", passportRegex: "^[0-9]{8,9}$" },
1503
- { code: "IT", name: "Italy", dialCode: "+39", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1504
- { code: "JM", name: "Jamaica", dialCode: "+1", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1505
- { code: "JP", name: "Japan", dialCode: "+81", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1506
- { code: "JO", name: "Jordan", dialCode: "+962", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1507
- { code: "KZ", name: "Kazakhstan", dialCode: "+7", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1508
- { code: "KE", name: "Kenya", dialCode: "+254", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1509
- { code: "KI", name: "Kiribati", dialCode: "+686", passportRegex: "^[A-Z0-9]{6,10}$" },
1510
- { code: "KP", name: "North Korea", dialCode: "+850", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1511
- { code: "KR", name: "South Korea", dialCode: "+82", passportRegex: "^[A-Z]{1}[0-9]{8}$" },
1512
- { code: "KW", name: "Kuwait", dialCode: "+965", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1513
- { code: "KG", name: "Kyrgyzstan", dialCode: "+996", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1514
- { code: "LA", name: "Laos", dialCode: "+856", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1515
- { code: "LV", name: "Latvia", dialCode: "+371", passportRegex: "^[A-Z0-9]{8}$" },
1516
- { code: "LB", name: "Lebanon", dialCode: "+961", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1517
- { code: "LS", name: "Lesotho", dialCode: "+266", passportRegex: "^[A-Z0-9]{6,10}$" },
1518
- { code: "LR", name: "Liberia", dialCode: "+231", passportRegex: "^[A-Z0-9]{6,10}$" },
1519
- { code: "LY", name: "Libya", dialCode: "+218", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1520
- { code: "LI", name: "Liechtenstein", dialCode: "+423", passportRegex: "^[A-Z0-9]{6,10}$" },
1521
- { code: "LT", name: "Lithuania", dialCode: "+370", passportRegex: "^[A-Z0-9]{8}$" },
1522
- { code: "LU", name: "Luxembourg", dialCode: "+352", passportRegex: "^[A-Z0-9]{8}$" },
1523
- { code: "MO", name: "Macau", dialCode: "+853", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1524
- { code: "MG", name: "Madagascar", dialCode: "+261", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1525
- { code: "MW", name: "Malawi", dialCode: "+265", passportRegex: "^[A-Z0-9]{6,10}$" },
1526
- { code: "MY", name: "Malaysia", dialCode: "+60", passportRegex: "^[A-Z]{1}[0-9]{8}$" },
1527
- { code: "MV", name: "Maldives", dialCode: "+960", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1528
- { code: "ML", name: "Mali", dialCode: "+223", passportRegex: "^[A-Z0-9]{6,10}$" },
1529
- { code: "MT", name: "Malta", dialCode: "+356", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1530
- { code: "MH", name: "Marshall Islands", dialCode: "+692", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1531
- { code: "MQ", name: "Martinique", dialCode: "+596", passportRegex: "^[A-Z0-9]{6,10}$" },
1532
- { code: "MR", name: "Mauritania", dialCode: "+222", passportRegex: "^[A-Z0-9]{6,10}$" },
1533
- { code: "MU", name: "Mauritius", dialCode: "+230", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1534
- { code: "MX", name: "Mexico", dialCode: "+52", passportRegex: "^[A-Z]{1}[0-9]{8}$" },
1535
- { code: "FM", name: "Micronesia", dialCode: "+691", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1536
- { code: "MD", name: "Moldova", dialCode: "+373", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1537
- { code: "MC", name: "Monaco", dialCode: "+377", passportRegex: "^[A-Z0-9]{6,10}$" },
1538
- { code: "MN", name: "Mongolia", dialCode: "+976", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1539
- { code: "ME", name: "Montenegro", dialCode: "+382", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1540
- { code: "MS", name: "Montserrat", dialCode: "+1", passportRegex: "^[A-Z0-9]{6,10}$" },
1541
- { code: "MA", name: "Morocco", dialCode: "+212", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1542
- { code: "MZ", name: "Mozambique", dialCode: "+258", passportRegex: "^[A-Z0-9]{6,10}$" },
1543
- { code: "MM", name: "Myanmar", dialCode: "+95", passportRegex: "^[A-Z]{1}[0-9]{6,7}$" },
1544
- { code: "NA", name: "Namibia", dialCode: "+264", passportRegex: "^[A-Z0-9]{6,10}$" },
1545
- { code: "NR", name: "Nauru", dialCode: "+674", passportRegex: "^[A-Z0-9]{6,10}$" },
1546
- { code: "NP", name: "Nepal", dialCode: "+977", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1547
- { code: "NL", name: "Netherlands", dialCode: "+31", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1548
- { code: "NC", name: "New Caledonia", dialCode: "+687", passportRegex: "^[A-Z0-9]{6,10}$" },
1549
- { code: "NZ", name: "New Zealand", dialCode: "+64", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1550
- { code: "NI", name: "Nicaragua", dialCode: "+505", passportRegex: "^[A-Z]{3}[0-9]{6}$" },
1551
- { code: "NE", name: "Niger", dialCode: "+227", passportRegex: "^[A-Z0-9]{6,10}$" },
1552
- { code: "NG", name: "Nigeria", dialCode: "+234", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1553
- { code: "NO", name: "Norway", dialCode: "+47", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1554
- { code: "OM", name: "Oman", dialCode: "+968", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1555
- { code: "PK", name: "Pakistan", dialCode: "+92", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1556
- { code: "PW", name: "Palau", dialCode: "+680", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1557
- { code: "PS", name: "Palestine", dialCode: "+970", passportRegex: "^[A-Z0-9]{6,10}$" },
1558
- { code: "PA", name: "Panama", dialCode: "+507", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1559
- { code: "PG", name: "Papua New Guinea", dialCode: "+675", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1560
- { code: "PY", name: "Paraguay", dialCode: "+595", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1561
- { code: "PE", name: "Peru", dialCode: "+51", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1562
- { code: "PH", name: "Philippines", dialCode: "+63", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1563
- { code: "PL", name: "Poland", dialCode: "+48", passportRegex: "^[A-Z0-9]{2}[0-9]{7}$" },
1564
- { code: "PT", name: "Portugal", dialCode: "+351", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1565
- { code: "RO", name: "Romania", dialCode: "+40", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1566
- { code: "RU", name: "Russia", dialCode: "+7", passportRegex: "^[0-9]{9}$" },
1567
- { code: "RW", name: "Rwanda", dialCode: "+250", passportRegex: "^[A-Z0-9]{6,10}$" },
1568
- {
1569
- code: "KN",
1570
- name: "Saint Kitts and Nevis",
1571
- dialCode: "+1",
1572
- passportRegex: "^[A-Z]{2}[0-9]{7}$"
1573
- },
1574
- { code: "LC", name: "Saint Lucia", dialCode: "+1", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1575
- {
1576
- code: "VC",
1577
- name: "Saint Vincent and the Grenadines",
1578
- dialCode: "+1",
1579
- passportRegex: "^[A-Z]{2}[0-9]{7}$"
1580
- },
1581
- { code: "WS", name: "Samoa", dialCode: "+685", passportRegex: "^[A-Z0-9]{6,10}$" },
1582
- { code: "SM", name: "San Marino", dialCode: "+378", passportRegex: "^[A-Z0-9]{6,10}$" },
1583
- {
1584
- code: "ST",
1585
- name: "Sao Tome and Principe",
1586
- dialCode: "+239",
1587
- passportRegex: "^[A-Z0-9]{6,10}$"
1588
- },
1589
- { code: "SA", name: "Saudi Arabia", dialCode: "+966", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1590
- { code: "SN", name: "Senegal", dialCode: "+221", passportRegex: "^[A-Z0-9]{6,10}$" },
1591
- { code: "RS", name: "Serbia", dialCode: "+381", passportRegex: "^[A-Z0-9]{9}$" },
1592
- { code: "SC", name: "Seychelles", dialCode: "+248", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1593
- { code: "SL", name: "Sierra Leone", dialCode: "+232", passportRegex: "^[A-Z0-9]{6,10}$" },
1594
- { code: "SG", name: "Singapore", dialCode: "+65", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1595
- { code: "SK", name: "Slovakia", dialCode: "+421", passportRegex: "^[0-9]{9}$" },
1596
- { code: "SI", name: "Slovenia", dialCode: "+386", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1597
- { code: "SB", name: "Solomon Islands", dialCode: "+677", passportRegex: "^[A-Z0-9]{6,10}$" },
1598
- { code: "SO", name: "Somalia", dialCode: "+252", passportRegex: "^[A-Z0-9]{6,10}$" },
1599
- { code: "ZA", name: "South Africa", dialCode: "+27", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1600
- { code: "ES", name: "Spain", dialCode: "+34", passportRegex: "^[A-Z]{3}[0-9]{6}$" },
1601
- { code: "LK", name: "Sri Lanka", dialCode: "+94", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1602
- { code: "SD", name: "Sudan", dialCode: "+249", passportRegex: "^[A-Z0-9]{6,10}$" },
1603
- { code: "SR", name: "Suriname", dialCode: "+597", passportRegex: "^[A-Z0-9]{6,10}$" },
1604
- { code: "SE", name: "Sweden", dialCode: "+46", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1605
- { code: "CH", name: "Switzerland", dialCode: "+41", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1606
- { code: "SY", name: "Syria", dialCode: "+963", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1607
- { code: "TW", name: "Taiwan", dialCode: "+886", passportRegex: "^[A-Z]{1}[0-9]{8}$" },
1608
- { code: "TJ", name: "Tajikistan", dialCode: "+992", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1609
- { code: "TZ", name: "Tanzania", dialCode: "+255", passportRegex: "^[A-Z0-9]{6,10}$" },
1610
- { code: "TH", name: "Thailand", dialCode: "+66", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1611
- { code: "TL", name: "Timor-Leste", dialCode: "+670", passportRegex: "^[A-Z0-9]{6,10}$" },
1612
- { code: "TG", name: "Togo", dialCode: "+228", passportRegex: "^[A-Z0-9]{6,10}$" },
1613
- { code: "TO", name: "Tonga", dialCode: "+676", passportRegex: "^[A-Z0-9]{6,10}$" },
1614
- { code: "TT", name: "Trinidad and Tobago", dialCode: "+1", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1615
- { code: "TN", name: "Tunisia", dialCode: "+216", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1616
- { code: "TR", name: "Turkey", dialCode: "+90", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1617
- { code: "TM", name: "Turkmenistan", dialCode: "+993", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1618
- {
1619
- code: "TC",
1620
- name: "Turks and Caicos Islands",
1621
- dialCode: "+1",
1622
- passportRegex: "^[A-Z0-9]{6,10}$"
1623
- },
1624
- { code: "TV", name: "Tuvalu", dialCode: "+688", passportRegex: "^[A-Z0-9]{6,10}$" },
1625
- { code: "UG", name: "Uganda", dialCode: "+256", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1626
- { code: "UA", name: "Ukraine", dialCode: "+380", passportRegex: "^[A-Z]{2}[0-9]{6}$" },
1627
- {
1628
- code: "AE",
1629
- name: "United Arab Emirates",
1630
- dialCode: "+971",
1631
- passportRegex: "^[A-Z]{1}[0-9]{7}$"
1632
- },
1633
- { code: "GB", name: "United Kingdom", dialCode: "+44", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1634
- { code: "US", name: "United States", dialCode: "+1", passportRegex: "^[0-9]{9}$" },
1635
- { code: "UY", name: "Uruguay", dialCode: "+598", passportRegex: "^[A-Z]{3}[0-9]{6}$" },
1636
- { code: "UZ", name: "Uzbekistan", dialCode: "+998", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1637
- { code: "VU", name: "Vanuatu", dialCode: "+678", passportRegex: "^[A-Z0-9]{6,10}$" },
1638
- { code: "VA", name: "Vatican City", dialCode: "+379", passportRegex: "^[A-Z0-9]{6,10}$" },
1639
- { code: "VE", name: "Venezuela", dialCode: "+58", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
1640
- { code: "VN", name: "Vietnam", dialCode: "+84", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1641
- { code: "YE", name: "Yemen", dialCode: "+967", passportRegex: "^[A-Z]{1}[0-9]{7}$" },
1642
- { code: "ZM", name: "Zambia", dialCode: "+260", passportRegex: "^[A-Z0-9]{6,10}$" },
1643
- { code: "ZW", name: "Zimbabwe", dialCode: "+263", passportRegex: "^[A-Z0-9]{6,10}$" }
1644
- ];
1645
1515
  var detectIdentityType = (value) => {
1646
1516
  if (!value) return "id";
1647
1517
  const stringValue = String(value);
@@ -1657,7 +1527,7 @@ var detectEmailOrPhoneStrict = (value) => {
1657
1527
  if (/^62\d/.test(value)) return "phone";
1658
1528
  return "none";
1659
1529
  };
1660
- function InputDynamic({
1530
+ var InputDynamic = ({
1661
1531
  name,
1662
1532
  control,
1663
1533
  label,
@@ -1683,7 +1553,6 @@ function InputDynamic({
1683
1553
  size,
1684
1554
  onClick,
1685
1555
  style,
1686
- countryCodes = DEFAULT_COUNTRY_CODES,
1687
1556
  defaultCountry = "ID",
1688
1557
  maxLength,
1689
1558
  autoAdvance = false,
@@ -1693,19 +1562,19 @@ function InputDynamic({
1693
1562
  onInput,
1694
1563
  contentAfter,
1695
1564
  onChange
1696
- }) {
1565
+ }) => {
1697
1566
  const styles = useStyles7();
1698
- const [showPassword, setShowPassword] = React2.useState(false);
1699
- const [isPhoneMode, setIsPhoneMode] = React2.useState(false);
1700
- const [emailOrPhoneType, setEmailOrPhoneType] = React2.useState("none");
1701
- const [identityType, setIdentityType] = React2.useState("id");
1702
- const [lastPhoneValue, setLastPhoneValue] = React2.useState("");
1703
- const [lastEmailOrPhoneValue, setLastEmailOrPhoneValue] = React2.useState("");
1704
- const inputRef = React2.useRef(null);
1705
- const phoneInputRef = React2.useRef(null);
1706
- const emailOrPhoneInputRef = React2.useRef(null);
1707
- const shouldFocusRef = React2.useRef(false);
1708
- const isBackspaceNavigationRef = React2.useRef(false);
1567
+ const [showPassword, setShowPassword] = React5.useState(false);
1568
+ const [isPhoneMode, setIsPhoneMode] = React5.useState(false);
1569
+ const [emailOrPhoneType, setEmailOrPhoneType] = React5.useState("none");
1570
+ const [identityType, setIdentityType] = React5.useState("id");
1571
+ const [lastPhoneValue, setLastPhoneValue] = React5.useState("");
1572
+ const [lastEmailOrPhoneValue, setLastEmailOrPhoneValue] = React5.useState("");
1573
+ const inputRef = React5.useRef(null);
1574
+ const phoneInputRef = React5.useRef(null);
1575
+ const emailOrPhoneInputRef = React5.useRef(null);
1576
+ const shouldFocusRef = React5.useRef(false);
1577
+ const isBackspaceNavigationRef = React5.useRef(false);
1709
1578
  const getSelectStyles = (hasError2) => ({
1710
1579
  menuPortal: (base) => ({
1711
1580
  ...base,
@@ -1774,7 +1643,7 @@ function InputDynamic({
1774
1643
  fontSize: reactComponents.tokens.fontSizeBase400
1775
1644
  })
1776
1645
  });
1777
- React2.useEffect(() => {
1646
+ React5.useEffect(() => {
1778
1647
  if (shouldFocusRef.current) {
1779
1648
  setTimeout(() => {
1780
1649
  if (identityType === "phone" && phoneInputRef.current) {
@@ -1796,7 +1665,7 @@ function InputDynamic({
1796
1665
  }, 50);
1797
1666
  }
1798
1667
  }, [identityType]);
1799
- React2.useEffect(() => {
1668
+ React5.useEffect(() => {
1800
1669
  if (shouldFocusRef.current && type === "emailOrPhone") {
1801
1670
  setTimeout(() => {
1802
1671
  if (emailOrPhoneType === "phone" && emailOrPhoneInputRef.current) {
@@ -2126,66 +1995,6 @@ function InputDynamic({
2126
1995
  }
2127
1996
  ) });
2128
1997
  }
2129
- case "passport": {
2130
- const passportValue = field.value || {
2131
- countryCode: defaultCountry,
2132
- phoneNumber: ""
2133
- };
2134
- const countryOptions = countryCodes.map((country) => ({
2135
- value: country.code,
2136
- label: country.name,
2137
- code: country.code,
2138
- passportRegex: country.passportRegex
2139
- }));
2140
- const formatOptionLabel = (option) => /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
2141
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "18px" }, children: String.fromCodePoint(
2142
- ...option.code.split("").map((char) => 127397 + char.charCodeAt(0))
2143
- ) }),
2144
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: option.label })
2145
- ] });
2146
- const selectedCountry = countryOptions.find((opt) => opt.value === passportValue.countryCode);
2147
- const isCountrySelected = !!selectedCountry;
2148
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.phoneContainer, children: [
2149
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.phoneCountrySelect, children: /* @__PURE__ */ jsxRuntime.jsx(
2150
- Select__default.default,
2151
- {
2152
- value: selectedCountry || null,
2153
- onChange: (selectedOption) => {
2154
- field.onChange({
2155
- ...passportValue,
2156
- countryCode: selectedOption ? selectedOption.value : defaultCountry
2157
- });
2158
- },
2159
- options: countryOptions,
2160
- isDisabled: disabled,
2161
- placeholder: "\xF0\u0178\x8F\xB3\xEF\xB8\x8F",
2162
- styles: getSelectStyles(!!error),
2163
- isSearchable: true,
2164
- formatOptionLabel
2165
- }
2166
- ) }),
2167
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(
2168
- reactComponents.Input,
2169
- {
2170
- value: passportValue.phoneNumber,
2171
- maxLength,
2172
- autoComplete: autoComplete || "off",
2173
- onChange: (e) => {
2174
- field.onChange({
2175
- ...passportValue,
2176
- phoneNumber: e.target.value
2177
- });
2178
- },
2179
- placeholder: placeholder || "Nomor paspor",
2180
- disabled: disabled || !isCountrySelected,
2181
- appearance,
2182
- size,
2183
- type: "text",
2184
- style: { width: "100%" }
2185
- }
2186
- ) })
2187
- ] });
2188
- }
2189
1998
  case "file":
2190
1999
  return /* @__PURE__ */ jsxRuntime.jsx(
2191
2000
  "input",
@@ -2251,7 +2060,7 @@ function InputDynamic({
2251
2060
  {
2252
2061
  value: option.value,
2253
2062
  label: option.label,
2254
- disabled: option.disabled,
2063
+ disabled: disabled || option.disabled,
2255
2064
  className: styles.classRadio
2256
2065
  },
2257
2066
  option.value
@@ -2555,23 +2364,6 @@ function InputDynamic({
2555
2364
  return true;
2556
2365
  };
2557
2366
  }
2558
- if (type === "passport") {
2559
- rules.validate = (value) => {
2560
- if (required && !value?.phoneNumber) {
2561
- return "Nomor paspor wajib diisi";
2562
- }
2563
- if (value?.phoneNumber) {
2564
- const selectedCountry = countryCodes.find((c) => c.code === value.countryCode);
2565
- if (selectedCountry?.passportRegex) {
2566
- const passportRegex = new RegExp(selectedCountry.passportRegex);
2567
- if (!passportRegex.test(value.phoneNumber)) {
2568
- return `Format paspor ${selectedCountry.name} tidak valid`;
2569
- }
2570
- }
2571
- }
2572
- return true;
2573
- };
2574
- }
2575
2367
  return rules;
2576
2368
  };
2577
2369
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -2595,11 +2387,11 @@ function InputDynamic({
2595
2387
  )
2596
2388
  }
2597
2389
  );
2598
- }
2390
+ };
2599
2391
  var InputDynamic_default = InputDynamic;
2600
2392
 
2601
2393
  // src/components/InputDynamic/constants.ts
2602
- var DEFAULT_COUNTRY_CODES2 = [
2394
+ var DEFAULT_COUNTRY_CODES = [
2603
2395
  { code: "AF", name: "Afghanistan", dialCode: "+93", passportRegex: "^[A-Z][0-9]{7}$" },
2604
2396
  { code: "AL", name: "Albania", dialCode: "+355", passportRegex: "^[A-Z]{2}[0-9]{7}$" },
2605
2397
  { code: "DZ", name: "Algeria", dialCode: "+213", passportRegex: "^[0-9]{9}$" },
@@ -2839,7 +2631,649 @@ var DEFAULT_COUNTRY_CODES2 = [
2839
2631
  { code: "ZM", name: "Zambia", dialCode: "+260", passportRegex: "^[A-Z0-9]{6,10}$" },
2840
2632
  { code: "ZW", name: "Zimbabwe", dialCode: "+263", passportRegex: "^[A-Z0-9]{6,10}$" }
2841
2633
  ];
2634
+
2635
+ // src/components/CardTicketSearch/CardTicketSearch.constants.ts
2636
+ var DEFAULT_LABELS = {
2637
+ id: {
2638
+ fromLabel: "Dari",
2639
+ toLabel: "Ke",
2640
+ departureDateLabel: "Tanggal Berangkat",
2641
+ returnDateLabel: "Tanggal Pulang",
2642
+ serviceClassLabel: "Kelas Layanan",
2643
+ typeOfServiceLabel: "Jenis Layanan",
2644
+ passengerLabel: "Penumpang",
2645
+ roundTripLabel: "Pulang Pergi",
2646
+ searchButton: "Cari Tiket",
2647
+ placeholderPort: "Pilih Pelabuhan Asal",
2648
+ placeholderDestinationPort: "Pilih Pelabuhan Tujuan",
2649
+ placeholderDepartureDate: "Pilih Tanggal Keberangkatan",
2650
+ placeholderReturnDate: "Pilih Tanggal Kepulangan",
2651
+ placeholderTypeClass: "Pilih Kelas Layanan",
2652
+ placeholderTypeService: "Pilih Jenis Layanan",
2653
+ placeholderPassenger: "Pilih Jumlah Penumpang"
2654
+ },
2655
+ en: {
2656
+ fromLabel: "From",
2657
+ toLabel: "To",
2658
+ departureDateLabel: "Departure Date",
2659
+ returnDateLabel: "Return Date",
2660
+ serviceClassLabel: "Service Class",
2661
+ typeOfServiceLabel: "Service Type",
2662
+ passengerLabel: "Passenger",
2663
+ roundTripLabel: "Round Trip",
2664
+ searchButton: "Search Ticket",
2665
+ placeholderPort: "Select Origin Port",
2666
+ placeholderDestinationPort: "Select Destination Port",
2667
+ placeholderDepartureDate: "Select Departure Date",
2668
+ placeholderReturnDate: "Select Return Date",
2669
+ placeholderTypeClass: "Select Service Class",
2670
+ placeholderTypeService: "Select Service Type",
2671
+ placeholderPassenger: "Select Number of Passengers"
2672
+ }
2673
+ };
2674
+
2675
+ // src/constants/generated/tokens.ts
2676
+ var brandColors2 = {
2677
+ "10": "#000000",
2678
+ "20": "#03060e",
2679
+ "30": "#060b1c",
2680
+ "40": "#09112a",
2681
+ "50": "#0c1738",
2682
+ "60": "#122255",
2683
+ "70": "#182e71",
2684
+ "80": "#1e398d",
2685
+ "90": "#4b60a4",
2686
+ "100": "#7787bb",
2687
+ "110": "#a4afd1",
2688
+ "120": "#bac2dd",
2689
+ "130": "#d0d6e8",
2690
+ "140": "#e7e9f4",
2691
+ "150": "#fdfdff",
2692
+ "160": "#ffffff"
2693
+ };
2694
+
2695
+ // src/constants/brandColors.ts
2696
+ var isV2Path = typeof window !== "undefined" && window.location.pathname.startsWith("/v2");
2697
+ var brandColors3 = !isV2Path ? brandColors : brandColors2;
2698
+ var customBrand = {
2699
+ 10: brandColors3["10"],
2700
+ 20: brandColors3["20"],
2701
+ 30: brandColors3["30"],
2702
+ 40: brandColors3["40"],
2703
+ 50: brandColors3["50"],
2704
+ 60: brandColors3["60"],
2705
+ 70: brandColors3["70"],
2706
+ 80: brandColors3["80"],
2707
+ 90: brandColors3["90"],
2708
+ 100: brandColors3["100"],
2709
+ 110: brandColors3["110"],
2710
+ 120: brandColors3["120"],
2711
+ 130: brandColors3["130"],
2712
+ 140: brandColors3["140"],
2713
+ 150: brandColors3["150"],
2714
+ 160: brandColors3["160"]
2715
+ };
2716
+
2717
+ // src/constants/designTokens.ts
2718
+ typeof window !== "undefined" && window.location.pathname.startsWith("/v2");
2719
+ var designTokens = {
2720
+ // Breakpoints for responsive design
2721
+ breakpoints: {
2722
+ md: "768px",
2723
+ lg: "1024px",
2724
+ xl: "1200px"}};
2725
+
2726
+ // src/constants/themes.ts
2727
+ var extendedTokens = {
2728
+ breakpointMd: designTokens.breakpoints.md,
2729
+ breakpointLg: designTokens.breakpoints.lg,
2730
+ breakpointXl: designTokens.breakpoints.xl};
2731
+ ({
2732
+ ...reactComponents.createLightTheme(customBrand),
2733
+ // Brand colors from Figma
2734
+ colorBrandBackground: customBrand[80],
2735
+ colorBrandBackgroundHover: customBrand[70],
2736
+ colorBrandBackgroundPressed: customBrand[60],
2737
+ colorBrandBackgroundSelected: customBrand[80],
2738
+ colorBrandForeground1: customBrand[80],
2739
+ colorBrandForeground2: customBrand[70],
2740
+ colorBrandForegroundLink: customBrand[70],
2741
+ colorBrandForegroundLinkHover: customBrand[60],
2742
+ colorBrandForegroundLinkPressed: customBrand[50],
2743
+ colorBrandForegroundLinkSelected: customBrand[70]});
2744
+ ({
2745
+ ...reactComponents.createDarkTheme(customBrand),
2746
+ // Brand colors from Figma (inverted for dark mode)
2747
+ colorBrandBackground: customBrand[100],
2748
+ colorBrandBackgroundHover: customBrand[110],
2749
+ colorBrandBackgroundPressed: customBrand[120],
2750
+ colorBrandBackgroundSelected: customBrand[100],
2751
+ colorBrandForeground1: customBrand[100],
2752
+ colorBrandForeground2: customBrand[110],
2753
+ colorBrandForegroundLink: customBrand[110],
2754
+ colorBrandForegroundLinkHover: customBrand[120],
2755
+ colorBrandForegroundLinkPressed: customBrand[130],
2756
+ colorBrandForegroundLinkSelected: customBrand[110]});
2842
2757
  var useStyles8 = reactComponents.makeStyles({
2758
+ card: {
2759
+ position: "relative",
2760
+ width: "100%",
2761
+ padding: 0,
2762
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
2763
+ padding: "0"
2764
+ },
2765
+ [`@media (min-width: ${extendedTokens.breakpointMd})`]: {
2766
+ scale: "1"
2767
+ },
2768
+ marginTop: "5rem"
2769
+ },
2770
+ svgBackground: {
2771
+ position: "absolute",
2772
+ top: 0,
2773
+ left: 0,
2774
+ width: "100%",
2775
+ height: "100%",
2776
+ zIndex: 0
2777
+ },
2778
+ formField: {
2779
+ padding: "16px",
2780
+ display: "flex",
2781
+ flexDirection: "column",
2782
+ gap: "8px",
2783
+ borderRadius: reactComponents.tokens.borderRadiusXLarge,
2784
+ border: "1px solid " + reactComponents.tokens.colorNeutralStroke1,
2785
+ height: "100%",
2786
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
2787
+ padding: "20px",
2788
+ borderRadius: reactComponents.tokens.borderRadiusXLarge
2789
+ }
2790
+ },
2791
+ deviderButton: {
2792
+ display: "flex",
2793
+ justifyContent: "center",
2794
+ position: "absolute",
2795
+ left: "18px",
2796
+ bottom: "-16px",
2797
+ width: "90%"
2798
+ },
2799
+ buttonSwitch: {
2800
+ background: reactComponents.tokens.colorNeutralBackground1,
2801
+ boxShadow: `0 1px 2px 0 ${reactComponents.tokens.colorNeutralShadowKey}, 0 0 2px 0 ${reactComponents.tokens.colorNeutralShadowAmbient}`
2802
+ },
2803
+ switchIcon: {
2804
+ display: "inline-flex",
2805
+ transition: "transform 0.3s ease"
2806
+ },
2807
+ switchIconRotate: {
2808
+ transform: "rotate(180deg)"
2809
+ },
2810
+ searchButton: {
2811
+ width: "100%",
2812
+ borderRadius: reactComponents.tokens.borderRadiusCircular
2813
+ },
2814
+ serviceMenuCard: {
2815
+ [`@media (min-width: ${extendedTokens.breakpointMd})`]: {
2816
+ margin: reactComponents.tokens.spacingVerticalM
2817
+ },
2818
+ [`@media (min-width: ${extendedTokens.breakpointLg})`]: {
2819
+ margin: reactComponents.tokens.spacingVerticalL
2820
+ },
2821
+ [`@media (min-width: ${extendedTokens.breakpointXl})`]: {
2822
+ margin: reactComponents.tokens.spacingVerticalXXXL,
2823
+ maxWidth: "70%"
2824
+ }
2825
+ },
2826
+ ticketSearchRow: {
2827
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
2828
+ padding: "20px !important"
2829
+ }
2830
+ },
2831
+ formContainerCol: {
2832
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
2833
+ paddingLeft: "20px !important",
2834
+ paddingRight: "20px !important",
2835
+ marginBottom: "1rem",
2836
+ marginTop: "8rem"
2837
+ }
2838
+ },
2839
+ serviceCol: {
2840
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
2841
+ paddingLeft: "15px !important",
2842
+ paddingRight: "15px !important",
2843
+ marginTop: "16px"
2844
+ }
2845
+ },
2846
+ formInnerRow: {
2847
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
2848
+ margin: "0 !important"
2849
+ }
2850
+ },
2851
+ formFieldRow: {
2852
+ [`@media (max-width: ${extendedTokens.breakpointXl})`]: {
2853
+ gap: "12px !important"
2854
+ }
2855
+ }
2856
+ });
2857
+ var CardTicketSearch = ({
2858
+ language = "id",
2859
+ from = "",
2860
+ to = "",
2861
+ startDate = "",
2862
+ endDate = "",
2863
+ roundTrip = false,
2864
+ serviceClass = "",
2865
+ typeOfService = "",
2866
+ passenger = "",
2867
+ toDisabled = false,
2868
+ endDateDisabled = false,
2869
+ serviceClassDisabled = false,
2870
+ typeOfServiceDisabled = false,
2871
+ switchDisabled = false,
2872
+ roundTripDisabled = false,
2873
+ submitDisabled = false,
2874
+ onFromClick,
2875
+ onToClick,
2876
+ onFromChange,
2877
+ onStartDateClick,
2878
+ onEndDateClick,
2879
+ onServiceClassClick,
2880
+ onTypeOfServiceClick,
2881
+ onPassengerClick,
2882
+ onSwitchClick,
2883
+ onRoundTripChange,
2884
+ onSubmit,
2885
+ activeServiceId = "ferry",
2886
+ labels: customLabels,
2887
+ className,
2888
+ isRotating = false,
2889
+ showPassengerField = false
2890
+ }) => {
2891
+ const styles = useStyles8();
2892
+ const labels = React5__default.default.useMemo(
2893
+ () => ({ ...DEFAULT_LABELS[language], ...customLabels }),
2894
+ [language, customLabels]
2895
+ );
2896
+ const { control, setValue, getValues, handleSubmit } = reactHookForm.useForm({
2897
+ defaultValues: {
2898
+ from,
2899
+ to,
2900
+ startDate,
2901
+ roundTrip,
2902
+ endDate,
2903
+ serviceClass,
2904
+ typeOfService,
2905
+ passenger
2906
+ }
2907
+ });
2908
+ const roundTripValue = reactHookForm.useWatch({
2909
+ control,
2910
+ name: "roundTrip",
2911
+ defaultValue: roundTrip
2912
+ });
2913
+ React5__default.default.useEffect(() => {
2914
+ setValue("from", from);
2915
+ setValue("to", to);
2916
+ setValue("startDate", startDate);
2917
+ setValue("endDate", endDate);
2918
+ setValue("roundTrip", roundTrip);
2919
+ setValue("serviceClass", serviceClass);
2920
+ setValue("typeOfService", typeOfService);
2921
+ setValue("passenger", passenger);
2922
+ }, [from, to, startDate, endDate, roundTrip, serviceClass, typeOfService, passenger, setValue]);
2923
+ React5__default.default.useEffect(() => {
2924
+ if (onRoundTripChange) {
2925
+ onRoundTripChange(roundTripValue);
2926
+ }
2927
+ }, [roundTripValue, onRoundTripChange]);
2928
+ const handleFormSubmit = (data) => {
2929
+ if (onSubmit) {
2930
+ onSubmit(data);
2931
+ }
2932
+ };
2933
+ const handleFromChange = () => {
2934
+ setValue("to", "");
2935
+ if (onFromChange) {
2936
+ onFromChange();
2937
+ }
2938
+ };
2939
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${styles.card} ${className || ""}`, children: [
2940
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Visible, { xl: true, xxl: true, xxxl: true, children: /* @__PURE__ */ jsxRuntime.jsx(BackgroundTicketCard_default, { className: styles.svgBackground }) }),
2941
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Visible, { xs: true, sm: true, md: true, lg: true, children: /* @__PURE__ */ jsxRuntime.jsx(BackgroundTicketCardVertical_default, { className: styles.svgBackground }) }),
2942
+ /* @__PURE__ */ jsxRuntime.jsxs(
2943
+ reactGridSystem.Row,
2944
+ {
2945
+ style: {
2946
+ paddingTop: "1rem",
2947
+ paddingBottom: "2rem"
2948
+ },
2949
+ className: styles.ticketSearchRow,
2950
+ children: [
2951
+ /* @__PURE__ */ jsxRuntime.jsx(
2952
+ reactGridSystem.Col,
2953
+ {
2954
+ xs: 12,
2955
+ sm: 12,
2956
+ md: 12,
2957
+ lg: 12,
2958
+ xl: 3,
2959
+ xxl: 3,
2960
+ xxxl: 3,
2961
+ style: {
2962
+ display: "flex",
2963
+ justifyContent: "center",
2964
+ alignItems: "center",
2965
+ marginBottom: "0px"
2966
+ },
2967
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2968
+ CardServiceMenu,
2969
+ {
2970
+ className: styles.serviceMenuCard,
2971
+ activeServiceId,
2972
+ language
2973
+ }
2974
+ )
2975
+ }
2976
+ ),
2977
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, md: 12, lg: 12, xl: 0.4, xxl: 0.4, xxxl: 0.4 }),
2978
+ /* @__PURE__ */ jsxRuntime.jsx(
2979
+ reactGridSystem.Col,
2980
+ {
2981
+ xs: 12,
2982
+ sm: 12,
2983
+ md: 12,
2984
+ lg: 12,
2985
+ xl: 8.6,
2986
+ xxl: 8.6,
2987
+ xxxl: 8.6,
2988
+ style: {
2989
+ display: "flex",
2990
+ alignItems: "center",
2991
+ justifyContent: "center",
2992
+ flexDirection: "column"
2993
+ },
2994
+ className: styles.formContainerCol,
2995
+ children: /* @__PURE__ */ jsxRuntime.jsx("form", { onSubmit: handleSubmit(handleFormSubmit), children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { width: "100%" }, className: styles.formInnerRow, children: [
2996
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, lg: 12, xl: 6, xxl: 6, xxxl: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { gap: "16px" }, className: styles.formFieldRow, children: [
2997
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.formField, children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { children: [
2998
+ /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Col, { xs: 12, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: [
2999
+ /* @__PURE__ */ jsxRuntime.jsx(
3000
+ InputDynamic_default,
3001
+ {
3002
+ name: "from",
3003
+ label: labels.fromLabel,
3004
+ control,
3005
+ type: "text",
3006
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3007
+ iconify_js.Icon,
3008
+ {
3009
+ icon: "fluent:vehicle-ship-16-filled",
3010
+ color: reactComponents.tokens.colorBrandBackground
3011
+ }
3012
+ ),
3013
+ appearance: "filled-lighter",
3014
+ size: "medium",
3015
+ placeholder: labels.placeholderPort,
3016
+ onClick: onFromClick,
3017
+ onChange: handleFromChange,
3018
+ validationRules: {
3019
+ required: "Pelabuhan asal wajib diisi"
3020
+ },
3021
+ required: true
3022
+ }
3023
+ ),
3024
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.deviderButton, children: [
3025
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, {}),
3026
+ " ",
3027
+ /* @__PURE__ */ jsxRuntime.jsx(
3028
+ reactComponents.Button,
3029
+ {
3030
+ onClick: onSwitchClick,
3031
+ className: styles.buttonSwitch,
3032
+ shape: "circular",
3033
+ appearance: "secondary",
3034
+ size: "large",
3035
+ disabled: switchDisabled,
3036
+ icon: /* @__PURE__ */ jsxRuntime.jsx(
3037
+ "div",
3038
+ {
3039
+ className: `${styles.switchIcon} ${isRotating ? styles.switchIconRotate : ""}`,
3040
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3041
+ "img",
3042
+ {
3043
+ src: "/assets/images/icons/switch.svg",
3044
+ alt: "Switch",
3045
+ width: 26,
3046
+ height: 26
3047
+ }
3048
+ )
3049
+ }
3050
+ )
3051
+ }
3052
+ )
3053
+ ] })
3054
+ ] }),
3055
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx(
3056
+ InputDynamic_default,
3057
+ {
3058
+ name: "to",
3059
+ label: labels.toLabel,
3060
+ control,
3061
+ type: "text",
3062
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3063
+ iconify_js.Icon,
3064
+ {
3065
+ icon: "fluent:location-24-filled",
3066
+ color: reactComponents.tokens.colorBrandBackground
3067
+ }
3068
+ ),
3069
+ disabled: toDisabled,
3070
+ appearance: "filled-lighter",
3071
+ size: "medium",
3072
+ placeholder: labels.placeholderDestinationPort,
3073
+ onClick: onToClick,
3074
+ validationRules: {
3075
+ required: "Pelabuhan tujuan wajib diisi"
3076
+ },
3077
+ required: true
3078
+ }
3079
+ ) })
3080
+ ] }) }) }),
3081
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.formField, children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { height: "100%" }, children: [
3082
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 7, sm: 7, md: 7, lg: 7, xl: 7, xxl: 7, xxxl: 7, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { position: "relative", zIndex: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
3083
+ InputDynamic_default,
3084
+ {
3085
+ name: "startDate",
3086
+ label: labels.departureDateLabel,
3087
+ control,
3088
+ type: "text",
3089
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3090
+ iconify_js.Icon,
3091
+ {
3092
+ icon: "fluent:calendar-24-filled",
3093
+ color: reactComponents.tokens.colorBrandBackground
3094
+ }
3095
+ ),
3096
+ appearance: "filled-lighter",
3097
+ size: "medium",
3098
+ placeholder: labels.placeholderDepartureDate,
3099
+ onClick: onStartDateClick,
3100
+ required: true,
3101
+ validationRules: {
3102
+ required: "Tanggal Berangkat wajib diisi"
3103
+ }
3104
+ }
3105
+ ) }) }),
3106
+ /* @__PURE__ */ jsxRuntime.jsx(
3107
+ reactGridSystem.Col,
3108
+ {
3109
+ xs: 5,
3110
+ sm: 5,
3111
+ md: 5,
3112
+ lg: 5,
3113
+ xl: 5,
3114
+ xxl: 5,
3115
+ xxxl: 5,
3116
+ style: { display: "flex", justifyContent: "end" },
3117
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3118
+ InputDynamic_default,
3119
+ {
3120
+ name: "roundTrip",
3121
+ label: labels.roundTripLabel,
3122
+ control,
3123
+ type: "switch",
3124
+ disabled: roundTripDisabled,
3125
+ size: "medium"
3126
+ }
3127
+ )
3128
+ }
3129
+ ),
3130
+ roundTripValue && /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx(
3131
+ InputDynamic_default,
3132
+ {
3133
+ name: "endDate",
3134
+ label: labels.returnDateLabel,
3135
+ control,
3136
+ type: "text",
3137
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3138
+ iconify_js.Icon,
3139
+ {
3140
+ icon: "fluent:calendar-24-filled",
3141
+ color: reactComponents.tokens.colorBrandBackground
3142
+ }
3143
+ ),
3144
+ appearance: "filled-lighter",
3145
+ size: "medium",
3146
+ placeholder: labels.placeholderReturnDate,
3147
+ onClick: onEndDateClick,
3148
+ disabled: endDateDisabled,
3149
+ style: { borderColor: "transparent" },
3150
+ required: roundTripValue,
3151
+ validationRules: {
3152
+ required: "Tanggal Pulang wajib diisi"
3153
+ }
3154
+ }
3155
+ ) })
3156
+ ] }) }) })
3157
+ ] }) }),
3158
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Visible, { xl: true, xxl: true, xxxl: true, children: /* @__PURE__ */ jsxRuntime.jsx(
3159
+ reactGridSystem.Col,
3160
+ {
3161
+ xs: 12,
3162
+ sm: 12,
3163
+ lg: 12,
3164
+ xl: 1,
3165
+ xxl: 1,
3166
+ xxxl: 1,
3167
+ style: { display: "flex", alignItems: "center", justifyContent: "center" },
3168
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, { vertical: true, style: { height: "100%" } })
3169
+ }
3170
+ ) }),
3171
+ /* @__PURE__ */ jsxRuntime.jsx(
3172
+ reactGridSystem.Col,
3173
+ {
3174
+ xs: 12,
3175
+ sm: 12,
3176
+ lg: 12,
3177
+ xl: 5,
3178
+ xxl: 5,
3179
+ xxxl: 5,
3180
+ style: {
3181
+ paddingRight: "2rem",
3182
+ paddingLeft: "8px"
3183
+ },
3184
+ className: styles.serviceCol,
3185
+ children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { height: "100%", gap: "16px" }, children: [
3186
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.formField, children: /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { style: { height: "100%", gap: "16px" }, children: [
3187
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx(
3188
+ InputDynamic_default,
3189
+ {
3190
+ name: "serviceClass",
3191
+ label: labels.serviceClassLabel,
3192
+ control,
3193
+ type: "text",
3194
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3195
+ iconify_js.Icon,
3196
+ {
3197
+ icon: "fluent:ribbon-star-24-filled",
3198
+ color: reactComponents.tokens.colorBrandBackground
3199
+ }
3200
+ ),
3201
+ appearance: "filled-lighter",
3202
+ size: "medium",
3203
+ placeholder: labels.placeholderTypeClass,
3204
+ onClick: onServiceClassClick,
3205
+ required: true,
3206
+ disabled: serviceClassDisabled
3207
+ }
3208
+ ) }),
3209
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx(
3210
+ InputDynamic_default,
3211
+ {
3212
+ name: "typeOfService",
3213
+ label: labels.typeOfServiceLabel,
3214
+ control,
3215
+ type: "text",
3216
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3217
+ iconify_js.Icon,
3218
+ {
3219
+ icon: "fluent:apps-list-24-filled",
3220
+ color: reactComponents.tokens.colorBrandBackground
3221
+ }
3222
+ ),
3223
+ appearance: "filled-lighter",
3224
+ size: "medium",
3225
+ placeholder: labels.placeholderTypeService,
3226
+ onClick: onTypeOfServiceClick,
3227
+ required: true,
3228
+ disabled: typeOfServiceDisabled
3229
+ }
3230
+ ) }),
3231
+ showPassengerField && /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx(
3232
+ InputDynamic_default,
3233
+ {
3234
+ required: true,
3235
+ name: "passenger",
3236
+ label: labels.passengerLabel,
3237
+ control,
3238
+ type: "text",
3239
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(
3240
+ iconify_js.Icon,
3241
+ {
3242
+ icon: "fluent:people-24-filled",
3243
+ color: reactComponents.tokens.colorBrandBackground
3244
+ }
3245
+ ),
3246
+ appearance: "filled-lighter",
3247
+ size: "medium",
3248
+ placeholder: labels.placeholderPassenger,
3249
+ onClick: onPassengerClick
3250
+ }
3251
+ ) })
3252
+ ] }) }) }),
3253
+ /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { xs: 12, sm: 12, lg: 12, xl: 12, xxl: 12, xxxl: 12, children: /* @__PURE__ */ jsxRuntime.jsx(
3254
+ reactComponents.Button,
3255
+ {
3256
+ className: styles.searchButton,
3257
+ appearance: "primary",
3258
+ size: "large",
3259
+ type: "submit",
3260
+ icon: /* @__PURE__ */ jsxRuntime.jsx(iconify_js.Icon, { icon: "fluent:vehicle-ship-20-filled" }),
3261
+ disabled: submitDisabled,
3262
+ children: labels.searchButton
3263
+ }
3264
+ ) })
3265
+ ] })
3266
+ }
3267
+ )
3268
+ ] }) })
3269
+ }
3270
+ )
3271
+ ]
3272
+ }
3273
+ )
3274
+ ] });
3275
+ };
3276
+ var useStyles9 = reactComponents.makeStyles({
2843
3277
  dialogTitle: {
2844
3278
  display: "flex",
2845
3279
  justifyContent: "space-between",
@@ -2968,7 +3402,7 @@ var ModalSearchHarbor = ({
2968
3402
  onRemoveLastSearched,
2969
3403
  onClearLastSearched
2970
3404
  }) => {
2971
- const styles = useStyles8();
3405
+ const styles = useStyles9();
2972
3406
  const handleSelect = (harbor) => {
2973
3407
  onAddLastSearched(harbor);
2974
3408
  onSelectHarbor(harbor);
@@ -3096,7 +3530,7 @@ var ModalSearchHarbor = ({
3096
3530
  }
3097
3531
  );
3098
3532
  };
3099
- var useStyles9 = reactComponents.makeStyles({
3533
+ var useStyles10 = reactComponents.makeStyles({
3100
3534
  dialogSurface: {
3101
3535
  maxWidth: "600px",
3102
3536
  width: "100%"
@@ -3213,12 +3647,12 @@ var ModalSelectDate = ({
3213
3647
  maxDate,
3214
3648
  dateFormat = "DD MMMM YYYY"
3215
3649
  }) => {
3216
- const styles = useStyles9();
3217
- const [selectedDate, setSelectedDate] = React2.useState(selectedDepartureDate);
3218
- const [selectedEndDate, setSelectedEndDate] = React2.useState(selectedReturnDate);
3219
- const [hoveredDate, setHoveredDate] = React2.useState();
3220
- const [activeTab, setActiveTab] = React2.useState(initialTab);
3221
- const previewEndDate = React2.useMemo(() => {
3650
+ const styles = useStyles10();
3651
+ const [selectedDate, setSelectedDate] = React5.useState(selectedDepartureDate);
3652
+ const [selectedEndDate, setSelectedEndDate] = React5.useState(selectedReturnDate);
3653
+ const [hoveredDate, setHoveredDate] = React5.useState();
3654
+ const [activeTab, setActiveTab] = React5.useState(initialTab);
3655
+ const previewEndDate = React5.useMemo(() => {
3222
3656
  if (selectedEndDate) return selectedEndDate;
3223
3657
  if (selectedDate && hoveredDate && hoveredDate > selectedDate) {
3224
3658
  return hoveredDate;
@@ -3229,7 +3663,7 @@ var ModalSelectDate = ({
3229
3663
  if (!first || !second) return false;
3230
3664
  return moment__default.default(first).isSame(second, "day");
3231
3665
  };
3232
- React2.useEffect(() => {
3666
+ React5.useEffect(() => {
3233
3667
  if (open) {
3234
3668
  setSelectedDate(selectedDepartureDate);
3235
3669
  setSelectedEndDate(selectedReturnDate);
@@ -3281,7 +3715,7 @@ var ModalSelectDate = ({
3281
3715
  handleClose();
3282
3716
  }
3283
3717
  };
3284
- const handleCustomDayCellRef = React2.useCallback(
3718
+ const handleCustomDayCellRef = React5.useCallback(
3285
3719
  (element, date, _classNames) => {
3286
3720
  if (!element) return;
3287
3721
  const removeTokens = (className) => {
@@ -3421,7 +3855,7 @@ var ModalSelectDate = ({
3421
3855
  }
3422
3856
  );
3423
3857
  };
3424
- var useStyles10 = reactComponents.makeStyles({
3858
+ var useStyles11 = reactComponents.makeStyles({
3425
3859
  dialogSurface: {
3426
3860
  maxWidth: "600px",
3427
3861
  width: "100%"
@@ -3504,9 +3938,9 @@ var ModalService = ({
3504
3938
  isLoading = false,
3505
3939
  isError = false
3506
3940
  }) => {
3507
- const styles = useStyles10();
3508
- const [selectedServices, setSelectedServices] = React2.useState(selectedServiceIds);
3509
- React2.useEffect(() => {
3941
+ const styles = useStyles11();
3942
+ const [selectedServices, setSelectedServices] = React5.useState(selectedServiceIds);
3943
+ React5.useEffect(() => {
3510
3944
  if (open) {
3511
3945
  if (selectedServiceIds && selectedServiceIds.length > 0) {
3512
3946
  const validIds = services.filter((s) => selectedServiceIds.includes(s.id)).map((s) => s.id);
@@ -3619,7 +4053,7 @@ var DEFAULT_SERVICE_CLASSES = [
3619
4053
  { id: 2, name: "Bisnis", key: "bisnis", serviceName: "BUSINESS" },
3620
4054
  { id: 3, name: "Eksekutif", key: "eksekutif", serviceName: "EXECUTIVE" }
3621
4055
  ];
3622
- var useStyles11 = reactComponents.makeStyles({
4056
+ var useStyles12 = reactComponents.makeStyles({
3623
4057
  dialogSurface: {
3624
4058
  maxWidth: "600px",
3625
4059
  width: "100%"
@@ -3698,11 +4132,11 @@ var ModalTotalPassengers = ({
3698
4132
  maxPassengers = 10,
3699
4133
  infoMessage
3700
4134
  }) => {
3701
- const styles = useStyles11();
3702
- const [passengers, setPassengers] = React2.useState([]);
3703
- const [openItems, setOpenItems] = React2.useState([]);
4135
+ const styles = useStyles12();
4136
+ const [passengers, setPassengers] = React5.useState([]);
4137
+ const [openItems, setOpenItems] = React5.useState([]);
3704
4138
  const defaultInfoMessage = `Anda dapat menambahkan hingga ${maxPassengers} penumpang pada golongan kendaraan ini.`;
3705
- React2.useEffect(() => {
4139
+ React5.useEffect(() => {
3706
4140
  if (passengerTypes.length === 0) return;
3707
4141
  const defaultPassengers = passengerTypes.map((passengerType) => ({
3708
4142
  passengerTypeId: passengerType.id,
@@ -3932,7 +4366,7 @@ var ModalTotalPassengers = ({
3932
4366
  }
3933
4367
  );
3934
4368
  };
3935
- var useStyles12 = reactComponents.makeStyles({
4369
+ var useStyles13 = reactComponents.makeStyles({
3936
4370
  dialogSurface: {
3937
4371
  maxWidth: "600px",
3938
4372
  width: "100%"
@@ -3984,11 +4418,11 @@ var ModalTypeOfService = ({
3984
4418
  onSave,
3985
4419
  renderImage
3986
4420
  }) => {
3987
- const styles = useStyles12();
3988
- const [selectedServiceTitle, setSelectedServiceTitle] = React2.useState(
4421
+ const styles = useStyles13();
4422
+ const [selectedServiceTitle, setSelectedServiceTitle] = React5.useState(
3989
4423
  selectedService?.title || ""
3990
4424
  );
3991
- const [openItems, setOpenItems] = React2.useState(() => {
4425
+ const [openItems, setOpenItems] = React5.useState(() => {
3992
4426
  if (!selectedService) return void 0;
3993
4427
  for (const item of serviceTypes) {
3994
4428
  if (item.type === "accordion" && item.child.length > 0) {
@@ -4004,7 +4438,7 @@ var ModalTypeOfService = ({
4004
4438
  });
4005
4439
  const defaultRenderImage = ({ src, alt, width, height }) => /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt, width, height, style: { objectFit: "contain" } });
4006
4440
  const imageRenderer = renderImage || defaultRenderImage;
4007
- React2.useEffect(() => {
4441
+ React5.useEffect(() => {
4008
4442
  const newTitle = selectedService?.title || "";
4009
4443
  if (newTitle !== selectedServiceTitle) {
4010
4444
  setSelectedServiceTitle(newTitle);
@@ -4208,8 +4642,10 @@ exports.CardBanner = CardBanner;
4208
4642
  exports.CardPromo = CardPromo;
4209
4643
  exports.CardServiceMenu = CardServiceMenu;
4210
4644
  exports.CardTicket = CardTicket;
4645
+ exports.CardTicketSearch = CardTicketSearch;
4646
+ exports.CardTicketSearchDefaultLabels = DEFAULT_LABELS;
4211
4647
  exports.CarouselWithCustomNav = CarouselWithCustomNav;
4212
- exports.DEFAULT_COUNTRY_CODES = DEFAULT_COUNTRY_CODES2;
4648
+ exports.DEFAULT_COUNTRY_CODES = DEFAULT_COUNTRY_CODES;
4213
4649
  exports.DEFAULT_SERVICE_CLASSES = DEFAULT_SERVICE_CLASSES;
4214
4650
  exports.DEFAULT_VEHICLE_ICONS = DEFAULT_VEHICLE_ICONS;
4215
4651
  exports.InputDynamic = InputDynamic_default;