@asdp/ferryui 0.1.22-dev.8990 → 0.1.22-dev.9114

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
@@ -344,6 +344,148 @@ var extendedTokens = {
344
344
  colorBrandForegroundLinkHover: customBrand[120],
345
345
  colorBrandForegroundLinkPressed: customBrand[130],
346
346
  colorBrandForegroundLinkSelected: customBrand[110]});
347
+
348
+ // src/constants/api.ts
349
+ var API_ENDPOINTS = {
350
+ PORTS: {
351
+ ORIGIN: "/v1/surrounding/catalog/ports/list/origin",
352
+ DESTINATION: "/v1/surrounding/catalog/ports/list/destination"
353
+ },
354
+ SERVICES: {
355
+ LIST: "/v1/surrounding/catalog/service-types"
356
+ },
357
+ PASSENGERS: {
358
+ LIST: "/v1/surrounding/catalog/passenger-types"
359
+ },
360
+ // Authentication endpoints
361
+ AUTH: {
362
+ LOGIN: "/v1/surrounding/auth/login",
363
+ REGISTER: "/auth/register",
364
+ LOGOUT: "/auth/logout",
365
+ REFRESH: "/auth/refresh",
366
+ PROFILE: "/auth/profile",
367
+ UPDATE_PROFILE: "/auth/profile",
368
+ CHANGE_PASSWORD: "/auth/change-password",
369
+ FORGOT_PASSWORD: "/auth/forgot-password",
370
+ RESET_PASSWORD: "/auth/reset-password",
371
+ VERIFY_EMAIL: "/auth/verify-email"
372
+ },
373
+ // User management
374
+ USERS: {
375
+ LIST: "/users",
376
+ CREATE: "/users",
377
+ DETAIL: (id) => `/users/${id}`,
378
+ UPDATE: (id) => `/users/${id}`,
379
+ DELETE: (id) => `/users/${id}`,
380
+ AVATAR: (id) => `/users/${id}/avatar`
381
+ },
382
+ // File management
383
+ FILES: {
384
+ UPLOAD: "/files/upload",
385
+ DOWNLOAD: (id) => `/files/${id}/download`,
386
+ DELETE: (id) => `/files/${id}`,
387
+ LIST: "/files"
388
+ },
389
+ // Dashboard/Analytics
390
+ DASHBOARD: {
391
+ STATS: "/dashboard/stats",
392
+ CHART_DATA: "/dashboard/chart-data",
393
+ RECENT_ACTIVITIES: "/dashboard/recent-activities"
394
+ },
395
+ // Notifications
396
+ NOTIFICATIONS: {
397
+ LIST: "/notifications",
398
+ MARK_READ: (id) => `/notifications/${id}/read`,
399
+ MARK_ALL_READ: "/notifications/read-all",
400
+ DELETE: (id) => `/notifications/${id}`,
401
+ SETTINGS: "/notifications/settings"
402
+ },
403
+ // Settings
404
+ SETTINGS: {
405
+ GENERAL: "/settings/general",
406
+ SECURITY: "/settings/security",
407
+ PREFERENCES: "/settings/preferences"
408
+ }
409
+ };
410
+ var API_CONFIG = {
411
+ TIMEOUT: 3e4,
412
+ RETRY_ATTEMPTS: 3,
413
+ RETRY_DELAY: 1e3,
414
+ CACHE_TIME: 5 * 60 * 1e3,
415
+ // 5 minutes
416
+ STALE_TIME: 2 * 60 * 1e3
417
+ // 2 minutes
418
+ };
419
+ var API_ERROR_MESSAGES = {
420
+ NETWORK_ERROR: "Network error occurred. Please check your connection.",
421
+ TIMEOUT_ERROR: "Request timeout. Please try again.",
422
+ UNAUTHORIZED: "You are not authorized to perform this action.",
423
+ FORBIDDEN: "Access denied.",
424
+ NOT_FOUND: "Resource not found.",
425
+ SERVER_ERROR: "Internal server error. Please try again later.",
426
+ VALIDATION_ERROR: "Please check your input and try again.",
427
+ TOKEN_EXPIRED: "Your session has expired. Please login again.",
428
+ RATE_LIMIT: "Too many requests. Please try again later."
429
+ };
430
+ var HTTP_STATUS = {
431
+ OK: 200,
432
+ CREATED: 201,
433
+ NO_CONTENT: 204,
434
+ BAD_REQUEST: 400,
435
+ UNAUTHORIZED: 401,
436
+ FORBIDDEN: 403,
437
+ NOT_FOUND: 404,
438
+ CONFLICT: 409,
439
+ UNPROCESSABLE_ENTITY: 422,
440
+ TOO_MANY_REQUESTS: 429,
441
+ INTERNAL_SERVER_ERROR: 500,
442
+ BAD_GATEWAY: 502,
443
+ SERVICE_UNAVAILABLE: 503
444
+ };
445
+ var PASSENGER_TYPE = {
446
+ ADULT: 1,
447
+ CHILD: 2,
448
+ INFANT: 3,
449
+ ELDERLY: 5
450
+ };
451
+ var IDENTITY_TYPE = {
452
+ KTP: 1,
453
+ SIM: 2,
454
+ PSP: 3,
455
+ TGL: 4
456
+ };
457
+ var LOAD_TYPE = {
458
+ PEDESTRIAN: 1,
459
+ MOTORBIKE: 2,
460
+ PASSENGER_VEHICLE: 3,
461
+ GOODS_VEHICLE: 4,
462
+ LOOSE_LOAD_WITH_VEHICLE: 5,
463
+ LOOSE_LOAD_WITHOUT_VEHICLE: 6
464
+ };
465
+ var GENDER = {
466
+ MALE: "M",
467
+ FEMALE: "F"
468
+ };
469
+ var MY_TICKET_TAB = {
470
+ WAITING: 1,
471
+ ACTIVE: 2,
472
+ COMPLETED: 3,
473
+ FAILED: 4,
474
+ RETURNED: 5
475
+ };
476
+ var MY_TICKET_STATUS = {
477
+ DRAFT: 1,
478
+ NOT_YET_PAID: 2,
479
+ PAID: 3,
480
+ CHECKIN: 4,
481
+ BOARDING: 5,
482
+ NEED_ACTION: 6,
483
+ COMPLETED: 7,
484
+ EXPIRED_CHECKIN: 8,
485
+ EXPIRED_PAYMENT: 9,
486
+ EXPIRED_BOARDING: 10,
487
+ REFUND: 11
488
+ };
347
489
  var useStyles2 = reactComponents.makeStyles({
348
490
  carousel: {},
349
491
  carouselContainer: {
@@ -933,6 +1075,15 @@ var DEFAULT_LABELS5 = {
933
1075
  logoAlt: "ASDP Logo"
934
1076
  }
935
1077
  };
1078
+
1079
+ // src/utils/format.ts
1080
+ function formatDuration(minutes) {
1081
+ const hours = Math.floor(minutes / 60);
1082
+ const mins = minutes % 60;
1083
+ if (hours && mins) return `${hours} jam ${mins} menit`;
1084
+ if (hours) return `${hours} jam`;
1085
+ return `${mins} menit`;
1086
+ }
936
1087
  var useStyles5 = reactComponents.makeStyles({
937
1088
  dividerContainer: {
938
1089
  position: "relative",
@@ -970,12 +1121,12 @@ var useStyles5 = reactComponents.makeStyles({
970
1121
  },
971
1122
  circularLeft: {
972
1123
  position: "absolute",
973
- width: "100px",
974
- height: "50px",
1124
+ width: "80px",
1125
+ height: "80px",
975
1126
  borderRadius: "50%",
976
1127
  backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover,
977
- left: "-50px",
978
- boxShadow: "inset -3px 0px 1px rgba(0, 0, 0, 0.1)"
1128
+ left: "-50px"
1129
+ // boxShadow: "inset -3px 0px 1px rgba(0, 0, 0, 0.1)",
979
1130
  },
980
1131
  ticketMiddleCard: {
981
1132
  width: "100%",
@@ -1080,12 +1231,12 @@ var useStyles5 = reactComponents.makeStyles({
1080
1231
  },
1081
1232
  circularRight: {
1082
1233
  position: "absolute",
1083
- width: "100px",
1084
- height: "50px",
1234
+ width: "80px",
1235
+ height: "80px",
1085
1236
  borderRadius: "50%",
1086
1237
  backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover,
1087
- right: "-50px",
1088
- boxShadow: "inset 3px 0px 1px rgba(0, 0, 0, 0.1)"
1238
+ right: "-50px"
1239
+ // boxShadow: "inset 3px 0px 1px rgba(0, 0, 0, 0.1)",
1089
1240
  },
1090
1241
  ticketWrapper: {
1091
1242
  borderRadius: reactComponents.tokens.borderRadiusXLarge,
@@ -1131,21 +1282,8 @@ var useStyles5 = reactComponents.makeStyles({
1131
1282
  var CardTicket = ({
1132
1283
  language = "id",
1133
1284
  labels,
1134
- id,
1135
- shipName,
1136
- shipType,
1137
- shipTypeColor = "success",
1138
- tooltipCaption = "",
1139
- availableSeats,
1140
- departureDay,
1141
- departureTime,
1142
- departureLocation,
1143
- arrivalDay,
1144
- arrivalTime,
1145
- arrivalLocation,
1146
- duration,
1147
- facilities,
1148
- totalPrice,
1285
+ routeItem,
1286
+ departureItem,
1149
1287
  buttonText,
1150
1288
  onPriceDetailClick,
1151
1289
  onPolicyClick,
@@ -1155,8 +1293,8 @@ var CardTicket = ({
1155
1293
  const { width } = useWindowSize();
1156
1294
  const mergedLabels = { ...DEFAULT_LABELS5[language], ...labels };
1157
1295
  const getCircularVerticalConfig = () => {
1158
- if (width <= 1600) return { count: 6, spacing: 60, top: 10 };
1159
- return { count: 5, spacing: 60, top: 18 };
1296
+ if (width <= 1600) return { count: 3, spacing: 120, top: 25 };
1297
+ return { count: 3, spacing: 100, top: 25 };
1160
1298
  };
1161
1299
  const circularVerticalConfig = getCircularVerticalConfig();
1162
1300
  return /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { className: styles.ticketWrapper, children: [
@@ -1191,7 +1329,7 @@ var CardTicket = ({
1191
1329
  children: /* @__PURE__ */ jsxRuntime.jsx(
1192
1330
  reactComponents.Tooltip,
1193
1331
  {
1194
- content: tooltipCaption,
1332
+ content: departureItem?.provider?.description,
1195
1333
  relationship: "label",
1196
1334
  appearance: "inverted",
1197
1335
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -1199,11 +1337,11 @@ var CardTicket = ({
1199
1337
  {
1200
1338
  size: "large",
1201
1339
  appearance: "filled",
1202
- color: shipTypeColor,
1340
+ style: { backgroundColor: departureItem?.provider?.serviceColor },
1203
1341
  iconPosition: "before",
1204
1342
  shape: "rounded",
1205
1343
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:info-24-regular" }),
1206
- children: shipType
1344
+ children: departureItem?.provider?.service
1207
1345
  }
1208
1346
  )
1209
1347
  }
@@ -1228,7 +1366,7 @@ var CardTicket = ({
1228
1366
  children: /* @__PURE__ */ jsxRuntime.jsx(
1229
1367
  "img",
1230
1368
  {
1231
- src: "/assets/logo/asdp-default.svg",
1369
+ src: departureItem?.provider?.logo,
1232
1370
  className: styles.asdpLogo,
1233
1371
  alt: mergedLabels.logoAlt,
1234
1372
  height: 56,
@@ -1257,17 +1395,17 @@ var CardTicket = ({
1257
1395
  {
1258
1396
  size: "large",
1259
1397
  style: {
1260
- color: availableSeats > 50 ? sharedColors.Shared_Green_Primary : sharedColors.Shared_Red_Primary
1398
+ color: departureItem?.availableTicket > 50 ? sharedColors.Shared_Green_Primary : sharedColors.Shared_Red_Primary
1261
1399
  },
1262
1400
  appearance: "tint",
1263
- color: availableSeats > 50 ? "success" : "danger",
1401
+ color: departureItem?.availableTicket > 50 ? "success" : "danger",
1264
1402
  iconPosition: "after",
1265
1403
  shape: "rounded",
1266
1404
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:ticket-diagonal-24-regular" }),
1267
1405
  children: [
1268
1406
  mergedLabels.availableSeatsLabel,
1269
1407
  " ",
1270
- availableSeats
1408
+ departureItem?.availableTicket
1271
1409
  ]
1272
1410
  }
1273
1411
  )
@@ -1284,7 +1422,7 @@ var CardTicket = ({
1284
1422
  xl: 12,
1285
1423
  xxl: 12,
1286
1424
  xxxl: 12,
1287
- children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: shipName })
1425
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: departureItem?.provider?.name })
1288
1426
  }
1289
1427
  )
1290
1428
  ] }),
@@ -1324,46 +1462,42 @@ var CardTicket = ({
1324
1462
  {
1325
1463
  size: "extra-large",
1326
1464
  style: {
1327
- color: availableSeats > 50 ? sharedColors.Shared_Green_Primary : sharedColors.Shared_Red_Primary
1465
+ color: departureItem?.availableTicket > 50 ? sharedColors.Shared_Green_Primary : sharedColors.Shared_Red_Primary
1328
1466
  },
1329
1467
  appearance: "tint",
1330
- color: availableSeats > 50 ? "success" : "danger",
1468
+ color: departureItem?.availableTicket > 50 ? "success" : "danger",
1331
1469
  iconPosition: "after",
1332
1470
  shape: "rounded",
1333
1471
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:ticket-diagonal-24-regular" }),
1334
1472
  children: [
1335
1473
  mergedLabels.availableSeatsLabel,
1336
1474
  " ",
1337
- availableSeats
1475
+ departureItem?.availableTicket
1338
1476
  ]
1339
1477
  }
1340
1478
  ) }),
1341
1479
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketInfo, children: [
1342
1480
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketTime, children: [
1343
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: departureDay }),
1344
- /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Title2, { children: [
1345
- departureTime,
1346
- " ",
1347
- mergedLabels.timezoneLabel
1348
- ] }),
1349
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: departureLocation })
1481
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: "KAMIS" }),
1482
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Title2, { children: departureItem?.departureTime }),
1483
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: routeItem?.portFrom + ", " + routeItem?.branchFrom })
1350
1484
  ] }),
1351
1485
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketDuration, children: [
1352
1486
  /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Caption2, { children: [
1353
1487
  mergedLabels.estimationPrefix,
1354
1488
  " ",
1355
- duration
1489
+ formatDuration(departureItem?.estimatedSailingMinute)
1356
1490
  ] }),
1357
1491
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.dividerContainer, children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Divider, { children: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:vehicle-ship-24-regular", height: 24 }) }) })
1358
1492
  ] }),
1359
1493
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketTime, children: [
1360
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: arrivalDay }),
1494
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: "KAMIS" }),
1361
1495
  /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Title2, { children: [
1362
- arrivalTime,
1496
+ departureItem?.arrivedTime,
1363
1497
  " ",
1364
1498
  mergedLabels.timezoneLabel
1365
1499
  ] }),
1366
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: arrivalLocation })
1500
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: routeItem?.portTo + ", " + routeItem?.branchTo })
1367
1501
  ] })
1368
1502
  ] }) }),
1369
1503
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketButtons, children: [
@@ -1379,7 +1513,7 @@ var CardTicket = ({
1379
1513
  },
1380
1514
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:money-24-regular" }),
1381
1515
  size: "medium",
1382
- onClick: onPriceDetailClick,
1516
+ onClick: () => onPriceDetailClick(departureItem?.billingDetail, departureItem?.provider),
1383
1517
  children: mergedLabels.priceDetailsButton
1384
1518
  }
1385
1519
  ),
@@ -1437,9 +1571,7 @@ var CardTicket = ({
1437
1571
  children: [
1438
1572
  mergedLabels.currencySymbol,
1439
1573
  "\xA0",
1440
- totalPrice.toLocaleString(
1441
- language === "id" ? "id-ID" : "en-US"
1442
- )
1574
+ departureItem?.billingDetail?.total?.formatted
1443
1575
  ]
1444
1576
  }
1445
1577
  )
@@ -1461,7 +1593,7 @@ var CardTicket = ({
1461
1593
  ] }),
1462
1594
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.facilitiesSection, children: [
1463
1595
  /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: mergedLabels.facilitiesLabel }),
1464
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.facilitiesList, children: facilities.map((facility, idx) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.facilityItem, children: [
1596
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.facilitiesList, children: departureItem?.provider?.facilities.map((facility, idx) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.facilityItem, children: [
1465
1597
  /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:checkmark-circle-24-filled" }),
1466
1598
  /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1Strong, { children: facility })
1467
1599
  ] }, idx)) })
@@ -1799,6 +1931,12 @@ var useStyles6 = reactComponents.makeStyles({
1799
1931
  fontSize: reactComponents.tokens.fontSizeBase200,
1800
1932
  fontWeight: reactComponents.tokens.fontWeightRegular,
1801
1933
  color: reactComponents.tokens.colorNeutralForeground2,
1934
+ // truncate text with ellipsis 2 line
1935
+ display: "-webkit-box",
1936
+ WebkitLineClamp: 2,
1937
+ WebkitBoxOrient: "vertical",
1938
+ overflow: "hidden",
1939
+ textOverflow: "ellipsis",
1802
1940
  lineHeight: "1.4",
1803
1941
  "@media (max-width: 1200px)": {
1804
1942
  fontSize: reactComponents.tokens.fontSizeBase100,
@@ -1840,10 +1978,23 @@ var CardServiceMenu = ({
1840
1978
  onClick: () => onServiceClick?.(item.id),
1841
1979
  "aria-label": item.name,
1842
1980
  children: [
1843
- /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.imageUrl, alt: item.name, className: styles.logo }),
1981
+ /* @__PURE__ */ jsxRuntime.jsx(
1982
+ "img",
1983
+ {
1984
+ src: item.imageUrl,
1985
+ alt: item.name,
1986
+ className: styles.logo
1987
+ }
1988
+ ),
1844
1989
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.textContent, children: [
1845
1990
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.label, children: item.name }),
1846
- showDescriptions && /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.description, children: item.description })
1991
+ showDescriptions && /* @__PURE__ */ jsxRuntime.jsx(
1992
+ MenuItemDescription,
1993
+ {
1994
+ description: item.description,
1995
+ className: styles.description
1996
+ }
1997
+ )
1847
1998
  ] })
1848
1999
  ]
1849
2000
  }
@@ -1855,6 +2006,40 @@ var CardServiceMenu = ({
1855
2006
  ] }, item.id);
1856
2007
  }) }) });
1857
2008
  };
2009
+ function useIsClamped(deps) {
2010
+ const ref = React5.useRef(null);
2011
+ const [isClamped, setIsClamped] = React5.useState(false);
2012
+ React5.useEffect(() => {
2013
+ const el = ref.current;
2014
+ if (!el) return;
2015
+ const check = () => setIsClamped(el.scrollHeight > el.clientHeight);
2016
+ const timer = setTimeout(check, 0);
2017
+ const observer = new ResizeObserver(check);
2018
+ observer.observe(el);
2019
+ return () => {
2020
+ clearTimeout(timer);
2021
+ observer.disconnect();
2022
+ };
2023
+ }, deps ?? []);
2024
+ return { ref, isClamped };
2025
+ }
2026
+ var MenuItemDescription = ({ description, className }) => {
2027
+ const { ref, isClamped } = useIsClamped([description]);
2028
+ console.log({ isClamped, ref });
2029
+ if (isClamped) {
2030
+ return /* @__PURE__ */ jsxRuntime.jsx(
2031
+ reactComponents.Tooltip,
2032
+ {
2033
+ appearance: "inverted",
2034
+ content: description,
2035
+ relationship: "label",
2036
+ positioning: "after",
2037
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { ref, className, children: description })
2038
+ }
2039
+ );
2040
+ }
2041
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { ref, className, children: description });
2042
+ };
1858
2043
  var DatePickerInput = React5.forwardRef(
1859
2044
  ({
1860
2045
  field,
@@ -2147,6 +2332,7 @@ var useStyles7 = reactComponents.makeStyles({
2147
2332
  border: `1px solid ${reactComponents.tokens.colorNeutralStroke1}`,
2148
2333
  borderRadius: reactComponents.tokens.borderRadiusMedium,
2149
2334
  padding: reactComponents.tokens.spacingVerticalS,
2335
+ borderBottom: `1px solid ${reactComponents.tokens.colorNeutralForeground3}`,
2150
2336
  paddingLeft: "48px",
2151
2337
  // fontSize: tokens.fontSizeBase300,
2152
2338
  fontFamily: reactComponents.tokens.fontFamilyBase,
@@ -2160,10 +2346,11 @@ var useStyles7 = reactComponents.makeStyles({
2160
2346
  // fontSize: tokens.fontSizeBase400,
2161
2347
  },
2162
2348
  "& .react-tel-input .form-control:hover": {
2163
- border: `1px solid ${reactComponents.tokens.colorNeutralStroke1Hover}`
2349
+ border: `1px solid ${reactComponents.tokens.colorNeutralStroke1Hover}`,
2350
+ borderBottom: `1px solid ${reactComponents.tokens.colorNeutralForeground3Hover}`
2164
2351
  },
2165
2352
  "& .react-tel-input .form-control:focus": {
2166
- borderBottom: `2px solid ${reactComponents.tokens.colorBrandStroke1}`
2353
+ borderBottom: `2px solid ${reactComponents.tokens.colorBrandStroke1} !important`
2167
2354
  // boxShadow: `0 0 0 1px ${tokens.colorBrandStroke1}`,
2168
2355
  },
2169
2356
  "& .react-tel-input .form-control:disabled": {
@@ -2188,6 +2375,77 @@ var useStyles7 = reactComponents.makeStyles({
2188
2375
  backgroundColor: "transparent"
2189
2376
  }
2190
2377
  },
2378
+ // Appearance: underline
2379
+ phoneInputUnderline: {
2380
+ "& .react-tel-input .form-control": {
2381
+ border: "none",
2382
+ borderBottom: `1px solid ${reactComponents.tokens.colorNeutralForeground3}`,
2383
+ borderRadius: 0,
2384
+ backgroundColor: "transparent",
2385
+ paddingLeft: "48px"
2386
+ },
2387
+ "& .react-tel-input .form-control:hover": {
2388
+ border: "none",
2389
+ borderBottom: `1px solid ${reactComponents.tokens.colorNeutralForeground3Hover}`
2390
+ },
2391
+ "& .react-tel-input .form-control:focus": {
2392
+ border: "none",
2393
+ borderBottom: `2px solid ${reactComponents.tokens.colorBrandStroke1}`,
2394
+ boxShadow: "none"
2395
+ },
2396
+ "& .react-tel-input .flag-dropdown": {
2397
+ border: "none",
2398
+ backgroundColor: "transparent"
2399
+ }
2400
+ },
2401
+ // Appearance: filled-darker
2402
+ phoneInputFilledDarker: {
2403
+ "& .react-tel-input .form-control": {
2404
+ border: "none",
2405
+ borderBottom: `1px solid transparent`,
2406
+ borderRadius: `${reactComponents.tokens.borderRadiusMedium} ${reactComponents.tokens.borderRadiusMedium} 0 0`,
2407
+ backgroundColor: reactComponents.tokens.colorNeutralBackground3,
2408
+ paddingLeft: "48px"
2409
+ },
2410
+ "& .react-tel-input .form-control:hover": {
2411
+ border: "none",
2412
+ borderBottom: `1px solid transparent`,
2413
+ backgroundColor: reactComponents.tokens.colorNeutralBackground3Hover
2414
+ },
2415
+ "& .react-tel-input .form-control:focus": {
2416
+ border: "none",
2417
+ borderBottom: `2px solid ${reactComponents.tokens.colorBrandStroke1}`,
2418
+ boxShadow: "none"
2419
+ },
2420
+ "& .react-tel-input .flag-dropdown": {
2421
+ border: "none",
2422
+ backgroundColor: "transparent"
2423
+ }
2424
+ },
2425
+ // Appearance: filled-lighter
2426
+ phoneInputFilledLighter: {
2427
+ "& .react-tel-input .form-control": {
2428
+ border: "none",
2429
+ borderBottom: `1px solid transparent`,
2430
+ borderRadius: `${reactComponents.tokens.borderRadiusMedium} ${reactComponents.tokens.borderRadiusMedium} 0 0`,
2431
+ backgroundColor: reactComponents.tokens.colorNeutralBackground1,
2432
+ paddingLeft: "48px"
2433
+ },
2434
+ "& .react-tel-input .form-control:hover": {
2435
+ border: "none",
2436
+ borderBottom: `1px solid transparent`,
2437
+ backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover
2438
+ },
2439
+ "& .react-tel-input .form-control:focus": {
2440
+ border: "none",
2441
+ borderBottom: `2px solid ${reactComponents.tokens.colorBrandStroke1}`,
2442
+ boxShadow: "none"
2443
+ },
2444
+ "& .react-tel-input .flag-dropdown": {
2445
+ border: "none",
2446
+ backgroundColor: "transparent"
2447
+ }
2448
+ },
2191
2449
  phoneInputError: {
2192
2450
  "& .react-tel-input .form-control": {
2193
2451
  border: `2px solid ${reactComponents.tokens.colorPaletteRedBorder2}`
@@ -2510,6 +2768,13 @@ var InputDynamic = ({
2510
2768
  };
2511
2769
  const renderInput = (field, error) => {
2512
2770
  const shouldTransparentBorder = disabled && appearance !== "outline" && appearance !== "underline";
2771
+ const getPhoneAppearanceClass = () => {
2772
+ if (appearance === "underline") return styles.phoneInputUnderline;
2773
+ if (appearance === "filled-darker") return styles.phoneInputFilledDarker;
2774
+ if (appearance === "filled-lighter") return styles.phoneInputFilledLighter;
2775
+ return "";
2776
+ };
2777
+ const phoneAppearanceClass = getPhoneAppearanceClass();
2513
2778
  const inputStyle = shouldTransparentBorder ? { ...style, border: "transparent" } : style;
2514
2779
  const handleInputChange = (e) => {
2515
2780
  field.onChange(e);
@@ -2537,6 +2802,12 @@ var InputDynamic = ({
2537
2802
  const otpIndex2 = otpMatch ? parseInt(otpMatch[1], 10) : null;
2538
2803
  const classNameSize = size === "small" ? styles.valueSmall : size === "medium" ? styles.valueMedium : styles.valueLarge;
2539
2804
  const fontSizeValuePhoneInput = size == "small" ? reactComponents.tokens.fontSizeBase200 : size === "medium" ? reactComponents.tokens.fontSizeBase300 : reactComponents.tokens.fontSizeBase400;
2805
+ const phoneInputSizeStyle = {
2806
+ fontSize: fontSizeValuePhoneInput,
2807
+ ...size === "small" && { minHeight: "26px", height: "26px", padding: `0 ${reactComponents.tokens.spacingHorizontalS} 0 48px` },
2808
+ ...size === "medium" && { minHeight: "34px", height: "34px", padding: `${reactComponents.tokens.spacingVerticalXXS} ${reactComponents.tokens.spacingHorizontalS} ${reactComponents.tokens.spacingVerticalXXS} 48px` },
2809
+ ...size === "large" && { minHeight: "40px", height: "40px", padding: `${reactComponents.tokens.spacingVerticalXS} ${reactComponents.tokens.spacingHorizontalS} ${reactComponents.tokens.spacingVerticalXS} 48px` }
2810
+ };
2540
2811
  if (type === "emailOrPhone") {
2541
2812
  updateEmailOrPhoneType(field.value);
2542
2813
  const stringValue = typeof field.value === "string" ? field.value : "";
@@ -2572,13 +2843,11 @@ var InputDynamic = ({
2572
2843
  "div",
2573
2844
  {
2574
2845
  ref: emailOrPhoneInputRef,
2575
- className: `${styles.phoneInputWrapper} ${error ? styles.phoneInputError : ""}`,
2846
+ className: reactComponents.mergeClasses(styles.phoneInputWrapper, phoneAppearanceClass, error ? styles.phoneInputError : ""),
2576
2847
  children: /* @__PURE__ */ jsxRuntime.jsx(
2577
2848
  PhoneInput,
2578
2849
  {
2579
- inputStyle: {
2580
- fontSize: fontSizeValuePhoneInput
2581
- },
2850
+ inputStyle: phoneInputSizeStyle,
2582
2851
  country: defaultCountry.toLowerCase(),
2583
2852
  value: stringValue.startsWith("+") ? stringValue.substring(1) : stringValue,
2584
2853
  onChange: (value, data) => {
@@ -2677,7 +2946,7 @@ var InputDynamic = ({
2677
2946
  "div",
2678
2947
  {
2679
2948
  ref: phoneInputRef,
2680
- className: `${styles.phoneInputWrapper} ${error ? styles.phoneInputError : ""}`,
2949
+ className: reactComponents.mergeClasses(styles.phoneInputWrapper, phoneAppearanceClass, error ? styles.phoneInputError : ""),
2681
2950
  children: /* @__PURE__ */ jsxRuntime.jsx(
2682
2951
  PhoneInput,
2683
2952
  {
@@ -2719,9 +2988,7 @@ var InputDynamic = ({
2719
2988
  disabled,
2720
2989
  enableSearch: true,
2721
2990
  disableSearchIcon: true,
2722
- inputStyle: {
2723
- fontSize: fontSizeValuePhoneInput
2724
- }
2991
+ inputStyle: phoneInputSizeStyle
2725
2992
  }
2726
2993
  )
2727
2994
  }
@@ -2804,7 +3071,7 @@ var InputDynamic = ({
2804
3071
  name: `${String(name)}_${Math.random().toString(36).substring(7)}`,
2805
3072
  isDisabled: disabled,
2806
3073
  placeholder: placeholder || "Select country",
2807
- options: COUNTRIES,
3074
+ options: options && options.length > 0 ? options : COUNTRIES,
2808
3075
  styles: getSelectStyles(!!error),
2809
3076
  className: reactComponents.mergeClasses(styles.reactSelect, classNameSize),
2810
3077
  classNamePrefix: "react-select",
@@ -2828,7 +3095,7 @@ var InputDynamic = ({
2828
3095
  {
2829
3096
  style: { display: "flex", alignItems: "center", gap: "8px" },
2830
3097
  children: [
2831
- /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: option.flag, width: 20, height: 20 }),
3098
+ options && options.length > 0 ? option.flag ? option.flag.startsWith("http") ? /* @__PURE__ */ jsxRuntime.jsx("img", { alt: option.label, src: option.flag, height: 20, width: 20, style: { objectFit: "contain" } }) : /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: option.flag, width: 20, height: 20 }) : null : option.flag ? /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: option.flag, width: 20, height: 20 }) : null,
2832
3099
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: option.label })
2833
3100
  ]
2834
3101
  }
@@ -2850,7 +3117,7 @@ var InputDynamic = ({
2850
3117
  return /* @__PURE__ */ jsxRuntime.jsx(
2851
3118
  "div",
2852
3119
  {
2853
- className: `${styles.phoneInputWrapper} ${error ? styles.phoneInputError : ""}`,
3120
+ className: reactComponents.mergeClasses(styles.phoneInputWrapper, phoneAppearanceClass, error ? styles.phoneInputError : ""),
2854
3121
  children: /* @__PURE__ */ jsxRuntime.jsx(
2855
3122
  PhoneInput,
2856
3123
  {
@@ -2864,9 +3131,7 @@ var InputDynamic = ({
2864
3131
  disabled,
2865
3132
  enableSearch: true,
2866
3133
  disableSearchIcon: true,
2867
- inputStyle: {
2868
- fontSize: fontSizeValuePhoneInput
2869
- }
3134
+ inputStyle: phoneInputSizeStyle
2870
3135
  }
2871
3136
  )
2872
3137
  }
@@ -4070,9 +4335,10 @@ var useStyles9 = reactComponents.makeStyles({
4070
4335
  },
4071
4336
  circular: {
4072
4337
  position: "absolute",
4073
- width: "clamp(40px, 7vw, 90px)",
4074
- height: "clamp(40px, 7vw, 90px)",
4075
- borderRadius: "50% 50% 0 0",
4338
+ width: "clamp(45px, 8vw, 90px)",
4339
+ height: "clamp(22.5px, 4vw, 45px)",
4340
+ // lebih kecil dari width
4341
+ borderRadius: "50% 50% 0 0 / 100% 100% 0 0",
4076
4342
  backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover,
4077
4343
  bottom: "-10px",
4078
4344
  boxShadow: "inset 0 2px 0px rgba(0, 0, 0, 0.1)"
@@ -4096,23 +4362,27 @@ var CardTicketSearchSummary = ({
4096
4362
  const { width } = useWindowSize();
4097
4363
  const getCircularConfig = () => {
4098
4364
  if (width <= parseInt(extendedTokens.breakpointXs))
4099
- return { count: 4, spacing: 65, size: 30, height: 30 };
4365
+ return { count: 4, spacing: 65 };
4100
4366
  if (width <= parseInt(extendedTokens.breakpointSm))
4101
- return { count: 5, spacing: 71, size: 40, height: 40 };
4367
+ return { count: 5, spacing: 71 };
4102
4368
  if (width <= parseInt(extendedTokens.breakpointMd))
4103
- return { count: 8, spacing: 87, size: 50, height: 50 };
4369
+ return { count: 8, spacing: 87 };
4104
4370
  if (width <= parseInt(extendedTokens.breakpointLg))
4105
- return { count: 9, spacing: 100, size: 60, height: 60 };
4371
+ return { count: 9, spacing: 100 };
4106
4372
  if (width <= parseInt(extendedTokens.breakpointXl))
4107
- return { count: 8, spacing: 115, size: 70, height: 70 };
4373
+ return { count: 8, spacing: 115 };
4108
4374
  if (width <= parseInt(extendedTokens.breakpointXxl))
4109
- return { count: 8, spacing: 136, size: 90, height: 90 };
4375
+ return { count: 8, spacing: 125 };
4110
4376
  if (width <= parseInt(extendedTokens.breakpointXxxl))
4111
- return { count: 8, spacing: 136, size: 90, height: 90 };
4112
- return { count: 11, spacing: 136, size: 100, height: 90 };
4377
+ return { count: 9, spacing: 120 };
4378
+ return { count: 13, spacing: 114 };
4113
4379
  };
4114
4380
  const circularConfig = getCircularConfig();
4115
- const RenderField = ({ label, value, icon }) => {
4381
+ const RenderField = ({
4382
+ label,
4383
+ value,
4384
+ icon
4385
+ }) => {
4116
4386
  return /* @__PURE__ */ jsxRuntime.jsxs(
4117
4387
  "div",
4118
4388
  {
@@ -4140,12 +4410,18 @@ var CardTicketSearchSummary = ({
4140
4410
  style: { height: "20px", width: "20px" }
4141
4411
  }
4142
4412
  ),
4143
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1Strong, { style: {
4144
- display: "-webkit-box",
4145
- WebkitLineClamp: 1,
4146
- WebkitBoxOrient: "vertical",
4147
- overflow: "hidden"
4148
- }, children: value })
4413
+ /* @__PURE__ */ jsxRuntime.jsx(
4414
+ reactComponents.Body1Strong,
4415
+ {
4416
+ style: {
4417
+ display: "-webkit-box",
4418
+ WebkitLineClamp: 1,
4419
+ WebkitBoxOrient: "vertical",
4420
+ overflow: "hidden"
4421
+ },
4422
+ children: value
4423
+ }
4424
+ )
4149
4425
  ]
4150
4426
  }
4151
4427
  )
@@ -4540,7 +4816,8 @@ var ModalSearchHarbor = ({
4540
4816
  onAddLastSearched,
4541
4817
  onRemoveLastSearched,
4542
4818
  onClearLastSearched,
4543
- popularHarbors
4819
+ popularHarbors,
4820
+ showButtonFavorite = true
4544
4821
  }) => {
4545
4822
  const styles = useStyles10();
4546
4823
  const mergedLabels = { ...DEFAULT_LABELS10[language], ...labels };
@@ -4694,7 +4971,7 @@ var ModalSearchHarbor = ({
4694
4971
  ]
4695
4972
  }
4696
4973
  ),
4697
- /* @__PURE__ */ jsxRuntime.jsx(
4974
+ showButtonFavorite && /* @__PURE__ */ jsxRuntime.jsx(
4698
4975
  react.Icon,
4699
4976
  {
4700
4977
  icon: harbor.isFavorite ? "fluent:star-24-filled" : "fluent:star-24-regular",
@@ -5446,7 +5723,7 @@ var ModalTotalPassengers = ({
5446
5723
  const parts = [];
5447
5724
  passenger.classes.forEach((cls) => {
5448
5725
  if ((cls.count ?? 0) > 0) {
5449
- const displayName = cls.classCode?.toUpperCase();
5726
+ const displayName = cls.className?.toUpperCase();
5450
5727
  parts.push(`${cls.count} ${displayName}`);
5451
5728
  }
5452
5729
  });
@@ -5570,7 +5847,7 @@ var ModalTotalPassengers = ({
5570
5847
  {
5571
5848
  className: styles.nestedRow,
5572
5849
  children: [
5573
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: cls.classCode.toUpperCase() }),
5850
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: (cls?.className || "")?.toUpperCase() }),
5574
5851
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.passengerCount, children: [
5575
5852
  /* @__PURE__ */ jsxRuntime.jsx(
5576
5853
  reactComponents.Button,
@@ -7658,7 +7935,7 @@ var CardOrdererInfo = ({
7658
7935
  var DEFAULT_LABELS21 = {
7659
7936
  id: {
7660
7937
  title: "Detail Penumpang",
7661
- sameAsOrderer: "Sama Dengan Pemesan",
7938
+ // sameAsOrderer: 'Sama Dengan Pemesan',
7662
7939
  searchPlaceholder: "Cari Penumpang",
7663
7940
  addPassengerButton: "Tambah Penumpang",
7664
7941
  cancelButton: "Batal",
@@ -7672,7 +7949,7 @@ var DEFAULT_LABELS21 = {
7672
7949
  },
7673
7950
  en: {
7674
7951
  title: "Passenger Details",
7675
- sameAsOrderer: "Same as Orderer",
7952
+ // sameAsOrderer: 'Same as Orderer',
7676
7953
  searchPlaceholder: "Search Passenger",
7677
7954
  addPassengerButton: "Add Passenger",
7678
7955
  cancelButton: "Cancel",
@@ -7736,9 +8013,9 @@ var ModalListPassenger = ({
7736
8013
  onSearchChange,
7737
8014
  onSelectPassenger,
7738
8015
  onEditPassenger,
7739
- onAddPassenger,
7740
- sameAsOrderer,
7741
- onSameAsOrdererChange
8016
+ onAddPassenger
8017
+ // sameAsOrderer,
8018
+ // onSameAsOrdererChange,
7742
8019
  }) => {
7743
8020
  const styles = useStyles21();
7744
8021
  const mergedLabels = { ...DEFAULT_LABELS21[language], ...labels };
@@ -7754,7 +8031,7 @@ var ModalListPassenger = ({
7754
8031
  const filteredPassengers = passengers.filter((passenger) => {
7755
8032
  if (!searchQuery) return true;
7756
8033
  const query = searchQuery.toLowerCase();
7757
- return passenger.name && passenger.name.toLowerCase().includes(query) || passenger.category && passenger.category.toLowerCase().includes(query);
8034
+ return passenger.fullName && passenger.fullName.toLowerCase().includes(query) || passenger.ageLabel && passenger.ageLabel.toLowerCase().includes(query);
7758
8035
  });
7759
8036
  return /* @__PURE__ */ jsxRuntime.jsx(
7760
8037
  reactComponents.Dialog,
@@ -7769,14 +8046,6 @@ var ModalListPassenger = ({
7769
8046
  /* @__PURE__ */ jsxRuntime.jsx(
7770
8047
  reactComponents.DialogTitle,
7771
8048
  {
7772
- action: /* @__PURE__ */ jsxRuntime.jsx(
7773
- reactComponents.Switch,
7774
- {
7775
- label: mergedLabels.sameAsOrderer,
7776
- checked: sameAsOrderer,
7777
- onChange: (_, data) => onSameAsOrdererChange(data.checked)
7778
- }
7779
- ),
7780
8049
  children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle1, { children: displayTitle })
7781
8050
  }
7782
8051
  ),
@@ -7807,21 +8076,10 @@ var ModalListPassenger = ({
7807
8076
  },
7808
8077
  children: [
7809
8078
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Subtitle2, { children: [
7810
- passenger.name,
8079
+ passenger.fullName,
7811
8080
  " (",
7812
- (() => {
7813
- const cat = passenger.category?.toUpperCase();
7814
- if (cat === "ADULT")
7815
- return mergedLabels.categories.adult;
7816
- if (cat === "CHILD")
7817
- return mergedLabels.categories.child;
7818
- if (cat === "INFANT")
7819
- return mergedLabels.categories.infant;
7820
- if (cat === "ELDERLY")
7821
- return mergedLabels.categories.elderly;
7822
- return passenger.category;
7823
- })(),
7824
- ")"
8081
+ passenger.ageLabel,
8082
+ " )"
7825
8083
  ] }) }),
7826
8084
  /* @__PURE__ */ jsxRuntime.jsx(
7827
8085
  reactComponents.Button,
@@ -7894,6 +8152,10 @@ var DEFAULT_LABELS22 = {
7894
8152
  countryLabel: "Negara Penerbit Passport",
7895
8153
  countryPlaceholder: "Masukkan Negara",
7896
8154
  autofill: "Isi Data Otomatis",
8155
+ phoneNumberLabel: "Nomor Telepon",
8156
+ phoneNumberPlaceholder: "Masukkan Nomor Telepon",
8157
+ emailLabel: "Email",
8158
+ emailPlaceholder: "Masukkan Email",
7897
8159
  // Scan Identity
7898
8160
  selectIdTypeTitle: "Isi Data Dengan Scan Identitas",
7899
8161
  scanIdentityTitle: "Scan Identitas",
@@ -7923,7 +8185,10 @@ var DEFAULT_LABELS22 = {
7923
8185
  maxAge: "Usia maksimal 150 tahun",
7924
8186
  requiredDate: "Tanggal lahir harus diisi",
7925
8187
  requiredCity: "Kota/Kabupaten harus diisi",
7926
- requiredCountry: "Negara harus diisi"
8188
+ requiredCountry: "Negara harus diisi",
8189
+ requiredPhoneNumber: "Nomor telepon harus diisi",
8190
+ minLengthPhoneNumber: "Nomor telepon minimal 10 karakter",
8191
+ invalidEmail: "Format email tidak valid"
7927
8192
  }
7928
8193
  },
7929
8194
  en: {
@@ -7950,6 +8215,10 @@ var DEFAULT_LABELS22 = {
7950
8215
  countryLabel: "Country of Issue",
7951
8216
  countryPlaceholder: "Enter Country",
7952
8217
  autofill: "Autofill",
8218
+ phoneNumberLabel: "Phone Number",
8219
+ phoneNumberPlaceholder: "Enter Phone Number",
8220
+ emailLabel: "Email",
8221
+ emailPlaceholder: "Enter Email",
7953
8222
  // Scan Identity
7954
8223
  selectIdTypeTitle: "Fill Data by Scanning Identity",
7955
8224
  scanIdentityTitle: "Scan Identity",
@@ -7979,7 +8248,10 @@ var DEFAULT_LABELS22 = {
7979
8248
  maxAge: "Age must be at most 150 years",
7980
8249
  requiredDate: "Date of birth is required",
7981
8250
  requiredCity: "City/Regency is required",
7982
- requiredCountry: "Country is required"
8251
+ requiredCountry: "Country is required",
8252
+ requiredPhoneNumber: "Phone number is required",
8253
+ minLengthPhoneNumber: "Phone number must be at least 10 characters",
8254
+ invalidEmail: "Invalid email format"
7983
8255
  }
7984
8256
  }
7985
8257
  };
@@ -8288,7 +8560,9 @@ var ModalPassengerForm = ({
8288
8560
  const performOCR = async () => {
8289
8561
  try {
8290
8562
  const Tesseract = await import('tesseract.js');
8291
- const { data: { text } } = await Tesseract.recognize(capturedImage, "ind");
8563
+ const {
8564
+ data: { text }
8565
+ } = await Tesseract.recognize(capturedImage, "ind");
8292
8566
  if (isCancelled) return;
8293
8567
  setScanStep(1);
8294
8568
  await new Promise((resolve) => setTimeout(resolve, 500));
@@ -8340,7 +8614,14 @@ var ModalPassengerForm = ({
8340
8614
  return () => {
8341
8615
  isCancelled = true;
8342
8616
  };
8343
- }, [scanStatus, capturedImage, stopCamera, setValue, scannedIdType, onScanComplete]);
8617
+ }, [
8618
+ scanStatus,
8619
+ capturedImage,
8620
+ stopCamera,
8621
+ setValue,
8622
+ scannedIdType,
8623
+ onScanComplete
8624
+ ]);
8344
8625
  const handleFormSubmit = (data) => {
8345
8626
  onSubmit(data);
8346
8627
  reset();
@@ -9132,6 +9413,7 @@ var CardVehicleDetail = ({
9132
9413
  serviceTitle,
9133
9414
  serviceImage,
9134
9415
  control,
9416
+ disabled,
9135
9417
  vehicleNumberName = "vehicleNumber",
9136
9418
  showLoadOption = false,
9137
9419
  hasLoad,
@@ -9175,6 +9457,7 @@ var CardVehicleDetail = ({
9175
9457
  InputDynamic_default,
9176
9458
  {
9177
9459
  control,
9460
+ disabled,
9178
9461
  name: vehicleNumberName,
9179
9462
  placeholder: mergedLabels.vehicleNumberPlaceholder,
9180
9463
  type: "text"
@@ -9186,6 +9469,7 @@ var CardVehicleDetail = ({
9186
9469
  /* @__PURE__ */ jsxRuntime.jsxs(
9187
9470
  reactComponents.RadioGroup,
9188
9471
  {
9472
+ disabled,
9189
9473
  value: hasLoad,
9190
9474
  onChange: (_, data) => onHasLoadChange?.(data.value),
9191
9475
  layout: "horizontal",
@@ -9353,6 +9637,7 @@ var CardVehicleOwnerForm = ({
9353
9637
  owners,
9354
9638
  hasLoad,
9355
9639
  control,
9640
+ disabled,
9356
9641
  watch,
9357
9642
  setValue,
9358
9643
  getValues,
@@ -9362,8 +9647,16 @@ var CardVehicleOwnerForm = ({
9362
9647
  onAddCargo,
9363
9648
  onDeleteCargo,
9364
9649
  onUpdateCargoQuantity,
9365
- companyOptions = [],
9366
- cityOptions = [],
9650
+ companySenderOptions = [],
9651
+ companyOwnerOptions = [],
9652
+ companyLogisticsOptions = [],
9653
+ companyReceiverOptions = [],
9654
+ cityOriginOptions = [],
9655
+ cityDestinationOptions = [],
9656
+ commodityOptions = [],
9657
+ loadTypeOptions = [],
9658
+ industryOptions = [],
9659
+ loadCategoryOptions = [],
9367
9660
  language = "id",
9368
9661
  labels
9369
9662
  }) => {
@@ -9421,8 +9714,9 @@ var CardVehicleOwnerForm = ({
9421
9714
  reactComponents.Button,
9422
9715
  {
9423
9716
  appearance: "transparent",
9424
- icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:delete-24-regular" }),
9425
9717
  "aria-label": mergedLabels.deleteOwnerAriaLabel,
9718
+ disabled,
9719
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:delete-24-regular" }),
9426
9720
  onClick: (e) => {
9427
9721
  e.stopPropagation();
9428
9722
  onDeleteOwner(owner.id);
@@ -9450,6 +9744,7 @@ var CardVehicleOwnerForm = ({
9450
9744
  children: /* @__PURE__ */ jsxRuntime.jsxs(
9451
9745
  reactComponents.RadioGroup,
9452
9746
  {
9747
+ disabled,
9453
9748
  layout: "horizontal",
9454
9749
  value: owner.senderType,
9455
9750
  onChange: (_, data) => onUpdateOwner(owner.id, {
@@ -9479,11 +9774,12 @@ var CardVehicleOwnerForm = ({
9479
9774
  InputDynamic_default,
9480
9775
  {
9481
9776
  control,
9777
+ disabled,
9482
9778
  name: `owners.${index}.senderName`,
9483
9779
  placeholder: owner.senderType === "Perusahaan" ? mergedLabels.selectCompanyPlaceholder : mergedLabels.inputSenderNamePlaceholder,
9484
9780
  size: "large",
9485
9781
  type: owner.senderType === "Perusahaan" ? "select" : "text",
9486
- options: owner.senderType === "Perusahaan" ? companyOptions : []
9782
+ options: owner.senderType === "Perusahaan" ? companySenderOptions : []
9487
9783
  }
9488
9784
  )
9489
9785
  ] }),
@@ -9498,6 +9794,7 @@ var CardVehicleOwnerForm = ({
9498
9794
  InputDynamic_default,
9499
9795
  {
9500
9796
  control,
9797
+ disabled,
9501
9798
  name: `owners.${index}.estimatedWeight`,
9502
9799
  placeholder: mergedLabels.inputNumberPlaceholder,
9503
9800
  size: "large",
@@ -9513,10 +9810,11 @@ var CardVehicleOwnerForm = ({
9513
9810
  InputDynamic_default,
9514
9811
  {
9515
9812
  control,
9813
+ disabled,
9516
9814
  name: `looseCargoOwners.${index}.originCity`,
9517
9815
  placeholder: mergedLabels.selectPlaceholder,
9518
9816
  type: "select",
9519
- options: cityOptions,
9817
+ options: cityOriginOptions,
9520
9818
  size: "large"
9521
9819
  }
9522
9820
  )
@@ -9527,10 +9825,11 @@ var CardVehicleOwnerForm = ({
9527
9825
  InputDynamic_default,
9528
9826
  {
9529
9827
  control,
9828
+ disabled,
9530
9829
  name: `looseCargoOwners.${index}.destinationCity`,
9531
9830
  placeholder: mergedLabels.selectPlaceholder,
9532
9831
  type: "select",
9533
- options: cityOptions,
9832
+ options: cityDestinationOptions,
9534
9833
  size: "large"
9535
9834
  }
9536
9835
  )
@@ -9555,6 +9854,7 @@ var CardVehicleOwnerForm = ({
9555
9854
  children: /* @__PURE__ */ jsxRuntime.jsxs(
9556
9855
  reactComponents.RadioGroup,
9557
9856
  {
9857
+ disabled,
9558
9858
  layout: "horizontal",
9559
9859
  value: owner.cargoOwnerType || "Perusahaan",
9560
9860
  onChange: (_, data) => onUpdateOwner(owner.id, {
@@ -9583,12 +9883,13 @@ var CardVehicleOwnerForm = ({
9583
9883
  /* @__PURE__ */ jsxRuntime.jsx(
9584
9884
  InputDynamic_default,
9585
9885
  {
9886
+ disabled,
9586
9887
  control,
9587
9888
  name: `looseCargoOwners.${index}.cargoOwnerName`,
9588
9889
  placeholder: owner.cargoOwnerType === "Perusahaan" ? mergedLabels.cargoOwnerCompanyPlaceholder : mergedLabels.cargoOwnerIndividualPlaceholder,
9589
9890
  size: "large",
9590
9891
  type: owner.cargoOwnerType === "Perusahaan" ? "select" : "text",
9591
- options: owner.cargoOwnerType === "Perusahaan" ? companyOptions : []
9892
+ options: owner.cargoOwnerType === "Perusahaan" ? companyOwnerOptions : []
9592
9893
  }
9593
9894
  ),
9594
9895
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -9619,6 +9920,7 @@ var CardVehicleOwnerForm = ({
9619
9920
  children: /* @__PURE__ */ jsxRuntime.jsxs(
9620
9921
  reactComponents.RadioGroup,
9621
9922
  {
9923
+ disabled,
9622
9924
  layout: "horizontal",
9623
9925
  value: owner.logisticsCompanyType || "Perseorangan",
9624
9926
  onChange: (_, data) => onUpdateOwner(owner.id, {
@@ -9648,11 +9950,12 @@ var CardVehicleOwnerForm = ({
9648
9950
  InputDynamic_default,
9649
9951
  {
9650
9952
  control,
9953
+ disabled,
9651
9954
  name: `looseCargoOwners.${index}.logisticsCompanyName`,
9652
9955
  placeholder: owner.logisticsCompanyType === "Perusahaan" ? mergedLabels.logisticsCompanyPlaceholder : mergedLabels.logisticsIndividualPlaceholder,
9653
9956
  size: "large",
9654
9957
  type: owner.logisticsCompanyType === "Perusahaan" ? "select" : "text",
9655
- options: owner.logisticsCompanyType === "Perusahaan" ? companyOptions : []
9958
+ options: owner.logisticsCompanyType === "Perusahaan" ? companyLogisticsOptions : []
9656
9959
  }
9657
9960
  ),
9658
9961
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -9673,6 +9976,7 @@ var CardVehicleOwnerForm = ({
9673
9976
  /* @__PURE__ */ jsxRuntime.jsxs(
9674
9977
  reactComponents.RadioGroup,
9675
9978
  {
9979
+ disabled,
9676
9980
  layout: "horizontal",
9677
9981
  value: owner.cargoReceiverType || "Perusahaan",
9678
9982
  onChange: (_, data) => onUpdateOwner(owner.id, {
@@ -9700,11 +10004,12 @@ var CardVehicleOwnerForm = ({
9700
10004
  InputDynamic_default,
9701
10005
  {
9702
10006
  control,
10007
+ disabled,
9703
10008
  name: `looseCargoOwners.${index}.cargoReceiverName`,
9704
10009
  placeholder: owner.cargoReceiverType === "Perusahaan" ? mergedLabels.cargoReceiverCompanyPlaceholder : mergedLabels.cargoReceiverIndividualPlaceholder,
9705
10010
  size: "large",
9706
10011
  type: owner.cargoReceiverType === "Perusahaan" ? "select" : "text",
9707
- options: owner.cargoReceiverType === "Perusahaan" ? companyOptions : []
10012
+ options: owner.cargoReceiverType === "Perusahaan" ? companyReceiverOptions : []
9708
10013
  }
9709
10014
  ),
9710
10015
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -9729,6 +10034,7 @@ var CardVehicleOwnerForm = ({
9729
10034
  InputDynamic_default,
9730
10035
  {
9731
10036
  control,
10037
+ disabled,
9732
10038
  name: `looseCargoOwners.${index}.cargoWeight`,
9733
10039
  placeholder: mergedLabels.inputNumberPlaceholder,
9734
10040
  type: "number",
@@ -9787,10 +10093,11 @@ var CardVehicleOwnerForm = ({
9787
10093
  InputDynamic_default,
9788
10094
  {
9789
10095
  control,
10096
+ disabled,
9790
10097
  name: `looseCargoOwners.${index}.cargo.${cargoIndex}.commodity`,
9791
10098
  placeholder: mergedLabels.selectPlaceholder,
9792
10099
  type: "select",
9793
- options: [],
10100
+ options: commodityOptions,
9794
10101
  size: "large"
9795
10102
  }
9796
10103
  ),
@@ -9819,27 +10126,11 @@ var CardVehicleOwnerForm = ({
9819
10126
  InputDynamic_default,
9820
10127
  {
9821
10128
  control,
10129
+ disabled,
9822
10130
  name: `looseCargoOwners.${index}.cargo.${cargoIndex}.cargoType`,
9823
10131
  placeholder: mergedLabels.selectPlaceholder,
9824
10132
  type: "select",
9825
- options: [
9826
- {
9827
- value: "karung",
9828
- label: mergedLabels.cargoTypeOptions.karung
9829
- },
9830
- {
9831
- value: "kg",
9832
- label: mergedLabels.cargoTypeOptions.kg
9833
- },
9834
- {
9835
- value: "ton",
9836
- label: mergedLabels.cargoTypeOptions.ton
9837
- },
9838
- {
9839
- value: "unit",
9840
- label: mergedLabels.cargoTypeOptions.unit
9841
- }
9842
- ],
10133
+ options: loadTypeOptions,
9843
10134
  size: "large"
9844
10135
  }
9845
10136
  ),
@@ -9883,6 +10174,7 @@ var CardVehicleOwnerForm = ({
9883
10174
  reactComponents.Button,
9884
10175
  {
9885
10176
  appearance: "transparent",
10177
+ disabled,
9886
10178
  icon: /* @__PURE__ */ jsxRuntime.jsx(
9887
10179
  react.Icon,
9888
10180
  {
@@ -9924,6 +10216,7 @@ var CardVehicleOwnerForm = ({
9924
10216
  {
9925
10217
  name: `looseCargoOwners.${index}.cargo.${cargoIndex}.quantity`,
9926
10218
  control,
10219
+ disabled,
9927
10220
  render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsx(
9928
10221
  "input",
9929
10222
  {
@@ -9948,6 +10241,7 @@ var CardVehicleOwnerForm = ({
9948
10241
  reactComponents.Button,
9949
10242
  {
9950
10243
  appearance: "transparent",
10244
+ disabled,
9951
10245
  icon: /* @__PURE__ */ jsxRuntime.jsx(
9952
10246
  react.Icon,
9953
10247
  {
@@ -10021,9 +10315,9 @@ var CardVehicleOwnerForm = ({
10021
10315
  InputDynamic_default,
10022
10316
  {
10023
10317
  control,
10318
+ disabled: true,
10024
10319
  name: `owners.${index}.price`,
10025
10320
  placeholder: mergedLabels.pricePlaceholder,
10026
- disabled: true,
10027
10321
  size: "large",
10028
10322
  type: "text"
10029
10323
  }
@@ -10041,10 +10335,11 @@ var CardVehicleOwnerForm = ({
10041
10335
  InputDynamic_default,
10042
10336
  {
10043
10337
  control,
10338
+ disabled,
10044
10339
  name: `looseCargoOwners.${index}.cargo.${cargoIndex}.industryType`,
10045
10340
  placeholder: mergedLabels.selectPlaceholder,
10046
10341
  type: "select",
10047
- options: [],
10342
+ options: industryOptions,
10048
10343
  size: "large"
10049
10344
  }
10050
10345
  ),
@@ -10069,10 +10364,11 @@ var CardVehicleOwnerForm = ({
10069
10364
  InputDynamic_default,
10070
10365
  {
10071
10366
  control,
10367
+ disabled,
10072
10368
  name: `looseCargoOwners.${index}.cargo.${cargoIndex}.cargoCategory`,
10073
10369
  placeholder: mergedLabels.selectPlaceholder,
10074
10370
  type: "select",
10075
- options: [],
10371
+ options: loadCategoryOptions,
10076
10372
  size: "large"
10077
10373
  }
10078
10374
  ),
@@ -10095,6 +10391,7 @@ var CardVehicleOwnerForm = ({
10095
10391
  /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Row, { children: /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { children: (owner.cargoItems?.length || 0) > 1 && /* @__PURE__ */ jsxRuntime.jsx(
10096
10392
  reactComponents.Button,
10097
10393
  {
10394
+ disabled,
10098
10395
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:delete-24-regular" }),
10099
10396
  onClick: (e) => {
10100
10397
  e.stopPropagation();
@@ -10292,16 +10589,17 @@ var useStyles26 = reactComponents.makeStyles({
10292
10589
  var CardBookingTicket = ({
10293
10590
  language = "id",
10294
10591
  labels,
10295
- shipName = "KMP PORTLINK",
10296
- shipType = "Water Taxi",
10297
- shipTypeColor = "success",
10298
- departureDay = "Kamis, 25 Sep",
10299
- departureTime = "18:15",
10300
- departureLocation = "Merak, Banten",
10301
- arrivalDay = "Jumat, 26 Sep",
10302
- arrivalTime = "19:25",
10303
- arrivalLocation = "Bakauheni, Lampung",
10304
- duration = "1 jam 10 menit",
10592
+ providerLogo,
10593
+ shipName,
10594
+ shipType,
10595
+ shipTypeColor,
10596
+ departureDay,
10597
+ departureTime,
10598
+ departureLocation,
10599
+ arrivalDay,
10600
+ arrivalTime,
10601
+ arrivalLocation,
10602
+ duration = 0,
10305
10603
  totalPrice,
10306
10604
  reservationStep,
10307
10605
  paymentStep,
@@ -10320,7 +10618,7 @@ var CardBookingTicket = ({
10320
10618
  /* @__PURE__ */ jsxRuntime.jsx(
10321
10619
  "img",
10322
10620
  {
10323
- src: "/assets/logo/asdp-default.svg",
10621
+ src: providerLogo || "/assets/logo/asdp-default.svg",
10324
10622
  width: 81,
10325
10623
  height: 54,
10326
10624
  alt: "asdp"
@@ -10333,7 +10631,7 @@ var CardBookingTicket = ({
10333
10631
  {
10334
10632
  size: "extra-large",
10335
10633
  appearance: "filled",
10336
- color: shipTypeColor,
10634
+ style: { backgroundColor: shipTypeColor },
10337
10635
  iconPosition: "before",
10338
10636
  shape: "rounded",
10339
10637
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:info-24-regular" }),
@@ -10357,7 +10655,7 @@ var CardBookingTicket = ({
10357
10655
  /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Caption2, { children: [
10358
10656
  mergedLabels.estimationPrefix,
10359
10657
  " ",
10360
- duration
10658
+ formatDuration(duration)
10361
10659
  ] })
10362
10660
  ] }),
10363
10661
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketTime, children: [
@@ -10971,13 +11269,15 @@ var DEFAULT_LABELS29 = {
10971
11269
  addButton: "Tambah",
10972
11270
  currencySymbol: "Rp",
10973
11271
  decrementAriaLabel: "Kurangi jumlah",
10974
- incrementAriaLabel: "Tambah jumlah"
11272
+ incrementAriaLabel: "Tambah jumlah",
11273
+ searchPlaceholder: "Cari makanan atau minuman yang Anda inginkan"
10975
11274
  },
10976
11275
  en: {
10977
11276
  addButton: "Add",
10978
11277
  currencySymbol: "Rp",
10979
11278
  decrementAriaLabel: "Decrease quantity",
10980
- incrementAriaLabel: "Increase quantity"
11279
+ incrementAriaLabel: "Increase quantity",
11280
+ searchPlaceholder: "Search for food or drinks you want"
10981
11281
  }
10982
11282
  };
10983
11283
  var useStyles29 = reactComponents.makeStyles({
@@ -11107,6 +11407,9 @@ var useStyles29 = reactComponents.makeStyles({
11107
11407
  // tokensV2.lightModeColors.Brand_Stroke_1_Rest
11108
11408
  color: "rgb(30, 57, 141)"
11109
11409
  // tokensV2.lightModeColors.Brand_Foreground_1_Rest
11410
+ },
11411
+ searchContainer: {
11412
+ width: "100%"
11110
11413
  }
11111
11414
  });
11112
11415
  var CardMealCatalog = ({
@@ -11117,7 +11420,9 @@ var CardMealCatalog = ({
11117
11420
  categories,
11118
11421
  onAdd,
11119
11422
  onUpdateQuantity,
11120
- className
11423
+ className,
11424
+ searchValue,
11425
+ onSearchChange
11121
11426
  }) => {
11122
11427
  const styles = useStyles29();
11123
11428
  const mergedLabels = { ...DEFAULT_LABELS29[language], ...labels };
@@ -11142,6 +11447,16 @@ var CardMealCatalog = ({
11142
11447
  /* @__PURE__ */ jsxRuntime.jsx(reactIcons.InfoRegular, {}),
11143
11448
  /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: disclaimerText })
11144
11449
  ] }),
11450
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.searchContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
11451
+ reactComponents.Input,
11452
+ {
11453
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.SearchRegular, {}),
11454
+ placeholder: mergedLabels.searchPlaceholder,
11455
+ value: searchValue,
11456
+ onChange: (_, data) => onSearchChange?.(data.value),
11457
+ style: { width: "100%" }
11458
+ }
11459
+ ) }),
11145
11460
  categories.map((cat, index) => /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
11146
11461
  /* @__PURE__ */ jsxRuntime.jsx(
11147
11462
  reactComponents.Title3,
@@ -12541,6 +12856,59 @@ var DEFAULT_LABELS38 = {
12541
12856
  requiredError: "is required"
12542
12857
  }
12543
12858
  };
12859
+ var useStyles39 = reactComponents.makeStyles({
12860
+ surface: {
12861
+ maxWidth: "90vw",
12862
+ maxHeight: "90vh",
12863
+ backgroundColor: "transparent",
12864
+ boxShadow: "none"
12865
+ },
12866
+ closeButton: {
12867
+ backgroundColor: reactComponents.tokens.colorNeutralForeground2,
12868
+ color: reactComponents.tokens.colorNeutralBackground1
12869
+ },
12870
+ content: {
12871
+ alignItems: "center",
12872
+ textAlign: "center"
12873
+ },
12874
+ image: {
12875
+ maxWidth: "100%",
12876
+ maxHeight: "70vh",
12877
+ objectFit: "contain"
12878
+ }
12879
+ });
12880
+ var ModalPreviewImage = ({
12881
+ open,
12882
+ onOpenChange,
12883
+ imageUrl,
12884
+ alt = "Preview"
12885
+ }) => {
12886
+ const styles = useStyles39();
12887
+ return /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Dialog, { open, onOpenChange: (_, data) => onOpenChange(data.open), children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogSurface, { className: styles.surface, children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogBody, { children: [
12888
+ /* @__PURE__ */ jsxRuntime.jsx(
12889
+ reactComponents.DialogTitle,
12890
+ {
12891
+ action: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogTrigger, { action: "close", children: /* @__PURE__ */ jsxRuntime.jsx(
12892
+ reactComponents.Button,
12893
+ {
12894
+ appearance: "subtle",
12895
+ "aria-label": "close",
12896
+ icon: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.Dismiss24Regular, {}),
12897
+ className: styles.closeButton
12898
+ }
12899
+ ) })
12900
+ }
12901
+ ),
12902
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogContent, { className: styles.content, children: imageUrl && /* @__PURE__ */ jsxRuntime.jsx(
12903
+ "img",
12904
+ {
12905
+ src: imageUrl,
12906
+ alt,
12907
+ className: styles.image
12908
+ }
12909
+ ) })
12910
+ ] }) }) });
12911
+ };
12544
12912
  var uploadStyles = reactComponents.makeStyles({
12545
12913
  container: {
12546
12914
  backgroundColor: "#F0FEFF",
@@ -12814,56 +13182,7 @@ var FileUpload = React5__default.default.forwardRef(
12814
13182
  ] })
12815
13183
  }
12816
13184
  ),
12817
- /* @__PURE__ */ jsxRuntime.jsx(
12818
- reactComponents.Dialog,
12819
- {
12820
- open: isPreviewOpen,
12821
- onOpenChange: (_, data) => setIsPreviewOpen(data.open),
12822
- children: /* @__PURE__ */ jsxRuntime.jsx(
12823
- reactComponents.DialogSurface,
12824
- {
12825
- style: {
12826
- maxWidth: "90vw",
12827
- maxHeight: "90vh",
12828
- backgroundColor: "transparent",
12829
- boxShadow: "none"
12830
- },
12831
- children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogBody, { children: [
12832
- /* @__PURE__ */ jsxRuntime.jsx(
12833
- reactComponents.DialogTitle,
12834
- {
12835
- action: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogTrigger, { action: "close", children: /* @__PURE__ */ jsxRuntime.jsx(
12836
- reactComponents.Button,
12837
- {
12838
- "aria-label": "close",
12839
- icon: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.Dismiss24Regular, {}),
12840
- style: {
12841
- backgroundColor: reactComponents.tokens.colorNeutralForeground2,
12842
- color: reactComponents.tokens.colorNeutralBackground1
12843
- }
12844
- }
12845
- ) })
12846
- }
12847
- ),
12848
- /* @__PURE__ */ jsxRuntime.jsx(
12849
- reactComponents.DialogContent,
12850
- {
12851
- style: { alignItems: "center", textAlign: "center" },
12852
- children: previewUrl && /* @__PURE__ */ jsxRuntime.jsx(
12853
- "img",
12854
- {
12855
- src: previewUrl,
12856
- alt: "Preview",
12857
- className: styles.dialogImage
12858
- }
12859
- )
12860
- }
12861
- )
12862
- ] })
12863
- }
12864
- )
12865
- }
12866
- )
13185
+ /* @__PURE__ */ jsxRuntime.jsx(ModalPreviewImage, { imageUrl: previewUrl, open: isPreviewOpen, onOpenChange: setIsPreviewOpen })
12867
13186
  ]
12868
13187
  }
12869
13188
  );
@@ -13060,57 +13379,7 @@ var FileUpload = React5__default.default.forwardRef(
13060
13379
  ]
13061
13380
  }
13062
13381
  ),
13063
- /* @__PURE__ */ jsxRuntime.jsx(
13064
- reactComponents.Dialog,
13065
- {
13066
- open: isPreviewOpen,
13067
- onOpenChange: (_, data) => setIsPreviewOpen(data.open),
13068
- children: /* @__PURE__ */ jsxRuntime.jsx(
13069
- reactComponents.DialogSurface,
13070
- {
13071
- style: {
13072
- maxWidth: "90vw",
13073
- maxHeight: "90vh",
13074
- backgroundColor: "transparent",
13075
- boxShadow: "none"
13076
- },
13077
- children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogBody, { children: [
13078
- /* @__PURE__ */ jsxRuntime.jsx(
13079
- reactComponents.DialogTitle,
13080
- {
13081
- action: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogTrigger, { action: "close", children: /* @__PURE__ */ jsxRuntime.jsx(
13082
- reactComponents.Button,
13083
- {
13084
- appearance: "subtle",
13085
- "aria-label": "close",
13086
- icon: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.Dismiss24Regular, {}),
13087
- style: {
13088
- backgroundColor: reactComponents.tokens.colorNeutralForeground2,
13089
- color: reactComponents.tokens.colorNeutralBackground1
13090
- }
13091
- }
13092
- ) })
13093
- }
13094
- ),
13095
- /* @__PURE__ */ jsxRuntime.jsx(
13096
- reactComponents.DialogContent,
13097
- {
13098
- style: { alignItems: "center", textAlign: "center" },
13099
- children: previewUrl && /* @__PURE__ */ jsxRuntime.jsx(
13100
- "img",
13101
- {
13102
- src: previewUrl,
13103
- alt: "Preview",
13104
- className: styles.dialogImage
13105
- }
13106
- )
13107
- }
13108
- )
13109
- ] })
13110
- }
13111
- )
13112
- }
13113
- )
13382
+ /* @__PURE__ */ jsxRuntime.jsx(ModalPreviewImage, { imageUrl: previewUrl, open: isPreviewOpen, onOpenChange: setIsPreviewOpen })
13114
13383
  ]
13115
13384
  }
13116
13385
  );
@@ -13127,7 +13396,7 @@ var DEFAULT_LABELS39 = {
13127
13396
  id: {},
13128
13397
  en: {}
13129
13398
  };
13130
- var useStyles39 = reactComponents.makeStyles({
13399
+ var useStyles40 = reactComponents.makeStyles({
13131
13400
  container: {
13132
13401
  display: "flex",
13133
13402
  flexDirection: "column",
@@ -13167,12 +13436,14 @@ var useStyles39 = reactComponents.makeStyles({
13167
13436
  backgroundColor: reactComponents.tokens.colorBrandBackground2,
13168
13437
  color: reactComponents.tokens.colorBrandForeground1
13169
13438
  },
13170
- justifyContent: "flex-start"
13439
+ justifyContent: "flex-start",
13440
+ textAlign: "left"
13171
13441
  },
13172
13442
  tabItemLogout: {
13173
13443
  color: reactComponents.tokens.colorPaletteRedForeground1,
13174
13444
  backgroundColor: "transparent",
13175
13445
  justifyContent: "flex-start",
13446
+ textAlign: "left",
13176
13447
  "&:hover": {
13177
13448
  color: reactComponents.tokens.colorPaletteRedForeground1
13178
13449
  }
@@ -13185,7 +13456,7 @@ var CardProfileMenu = ({
13185
13456
  selectedValue,
13186
13457
  onTabSelect
13187
13458
  }) => {
13188
- const styles = useStyles39();
13459
+ const styles = useStyles40();
13189
13460
  ({ ...DEFAULT_LABELS39[language], ...labels });
13190
13461
  const handleTabSelect = (_, data) => {
13191
13462
  onTabSelect(data.value);
@@ -13215,6 +13486,9 @@ var CardProfileMenu = ({
13215
13486
  ) });
13216
13487
  };
13217
13488
 
13489
+ exports.API_CONFIG = API_CONFIG;
13490
+ exports.API_ENDPOINTS = API_ENDPOINTS;
13491
+ exports.API_ERROR_MESSAGES = API_ERROR_MESSAGES;
13218
13492
  exports.BackgroundTicketCard = BackgroundTicketCard_default;
13219
13493
  exports.BackgroundTicketCardVertical = BackgroundTicketCardVertical_default;
13220
13494
  exports.COUNTRIES = COUNTRIES;
@@ -13253,13 +13527,20 @@ exports.DEFAULT_VEHICLE_ICONS = DEFAULT_VEHICLE_ICONS;
13253
13527
  exports.DateFilter = DateFilter;
13254
13528
  exports.DateFilterDefaultLabels = DEFAULT_LABELS17;
13255
13529
  exports.FileUpload = FileUpload_default;
13530
+ exports.GENDER = GENDER;
13531
+ exports.HTTP_STATUS = HTTP_STATUS;
13532
+ exports.IDENTITY_TYPE = IDENTITY_TYPE;
13256
13533
  exports.InputDynamic = InputDynamic_default;
13534
+ exports.LOAD_TYPE = LOAD_TYPE;
13257
13535
  exports.MODAL_PRESETS = MODAL_PRESETS;
13536
+ exports.MY_TICKET_STATUS = MY_TICKET_STATUS;
13537
+ exports.MY_TICKET_TAB = MY_TICKET_TAB;
13258
13538
  exports.ModalFilterTicket = ModalFilterTicket;
13259
13539
  exports.ModalFilterTicketDefaultLabels = DEFAULT_LABELS16;
13260
13540
  exports.ModalIllustration = ModalIllustration;
13261
13541
  exports.ModalListPassenger = ModalListPassenger;
13262
13542
  exports.ModalPassengerForm = ModalPassengerForm;
13543
+ exports.ModalPreviewImage = ModalPreviewImage;
13263
13544
  exports.ModalPriceDetail = ModalPriceDetail;
13264
13545
  exports.ModalSearchHarbor = ModalSearchHarbor;
13265
13546
  exports.ModalSearchTicket = ModalSearchTicket;
@@ -13267,6 +13548,7 @@ exports.ModalSelectDate = ModalSelectDate;
13267
13548
  exports.ModalService = ModalService;
13268
13549
  exports.ModalTotalPassengers = ModalTotalPassengers;
13269
13550
  exports.ModalTypeOfService = ModalTypeOfService;
13551
+ exports.PASSENGER_TYPE = PASSENGER_TYPE;
13270
13552
  exports.SortMenu = SortMenu;
13271
13553
  exports.Stepper = Stepper;
13272
13554
  exports.getBadgeConfig = getBadgeConfig;