@asdp/ferryui 0.1.22-dev.8978 → 0.1.22-dev.9111

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,128 @@ 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
+ };
347
469
  var useStyles2 = reactComponents.makeStyles({
348
470
  carousel: {},
349
471
  carouselContainer: {
@@ -933,6 +1055,15 @@ var DEFAULT_LABELS5 = {
933
1055
  logoAlt: "ASDP Logo"
934
1056
  }
935
1057
  };
1058
+
1059
+ // src/utils/format.ts
1060
+ function formatDuration(minutes) {
1061
+ const hours = Math.floor(minutes / 60);
1062
+ const mins = minutes % 60;
1063
+ if (hours && mins) return `${hours} jam ${mins} menit`;
1064
+ if (hours) return `${hours} jam`;
1065
+ return `${mins} menit`;
1066
+ }
936
1067
  var useStyles5 = reactComponents.makeStyles({
937
1068
  dividerContainer: {
938
1069
  position: "relative",
@@ -970,12 +1101,12 @@ var useStyles5 = reactComponents.makeStyles({
970
1101
  },
971
1102
  circularLeft: {
972
1103
  position: "absolute",
973
- width: "100px",
974
- height: "50px",
1104
+ width: "80px",
1105
+ height: "80px",
975
1106
  borderRadius: "50%",
976
1107
  backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover,
977
- left: "-50px",
978
- boxShadow: "inset -3px 0px 1px rgba(0, 0, 0, 0.1)"
1108
+ left: "-50px"
1109
+ // boxShadow: "inset -3px 0px 1px rgba(0, 0, 0, 0.1)",
979
1110
  },
980
1111
  ticketMiddleCard: {
981
1112
  width: "100%",
@@ -1080,12 +1211,12 @@ var useStyles5 = reactComponents.makeStyles({
1080
1211
  },
1081
1212
  circularRight: {
1082
1213
  position: "absolute",
1083
- width: "100px",
1084
- height: "50px",
1214
+ width: "80px",
1215
+ height: "80px",
1085
1216
  borderRadius: "50%",
1086
1217
  backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover,
1087
- right: "-50px",
1088
- boxShadow: "inset 3px 0px 1px rgba(0, 0, 0, 0.1)"
1218
+ right: "-50px"
1219
+ // boxShadow: "inset 3px 0px 1px rgba(0, 0, 0, 0.1)",
1089
1220
  },
1090
1221
  ticketWrapper: {
1091
1222
  borderRadius: reactComponents.tokens.borderRadiusXLarge,
@@ -1131,21 +1262,8 @@ var useStyles5 = reactComponents.makeStyles({
1131
1262
  var CardTicket = ({
1132
1263
  language = "id",
1133
1264
  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,
1265
+ routeItem,
1266
+ departureItem,
1149
1267
  buttonText,
1150
1268
  onPriceDetailClick,
1151
1269
  onPolicyClick,
@@ -1155,8 +1273,8 @@ var CardTicket = ({
1155
1273
  const { width } = useWindowSize();
1156
1274
  const mergedLabels = { ...DEFAULT_LABELS5[language], ...labels };
1157
1275
  const getCircularVerticalConfig = () => {
1158
- if (width <= 1600) return { count: 6, spacing: 60, top: 10 };
1159
- return { count: 5, spacing: 60, top: 18 };
1276
+ if (width <= 1600) return { count: 3, spacing: 120, top: 25 };
1277
+ return { count: 3, spacing: 100, top: 25 };
1160
1278
  };
1161
1279
  const circularVerticalConfig = getCircularVerticalConfig();
1162
1280
  return /* @__PURE__ */ jsxRuntime.jsxs(reactGridSystem.Row, { className: styles.ticketWrapper, children: [
@@ -1191,7 +1309,7 @@ var CardTicket = ({
1191
1309
  children: /* @__PURE__ */ jsxRuntime.jsx(
1192
1310
  reactComponents.Tooltip,
1193
1311
  {
1194
- content: tooltipCaption,
1312
+ content: departureItem?.provider?.description,
1195
1313
  relationship: "label",
1196
1314
  appearance: "inverted",
1197
1315
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -1199,11 +1317,11 @@ var CardTicket = ({
1199
1317
  {
1200
1318
  size: "large",
1201
1319
  appearance: "filled",
1202
- color: shipTypeColor,
1320
+ style: { backgroundColor: departureItem?.provider?.serviceColor },
1203
1321
  iconPosition: "before",
1204
1322
  shape: "rounded",
1205
1323
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:info-24-regular" }),
1206
- children: shipType
1324
+ children: departureItem?.provider?.service
1207
1325
  }
1208
1326
  )
1209
1327
  }
@@ -1228,7 +1346,7 @@ var CardTicket = ({
1228
1346
  children: /* @__PURE__ */ jsxRuntime.jsx(
1229
1347
  "img",
1230
1348
  {
1231
- src: "/assets/logo/asdp-default.svg",
1349
+ src: departureItem?.provider?.logo,
1232
1350
  className: styles.asdpLogo,
1233
1351
  alt: mergedLabels.logoAlt,
1234
1352
  height: 56,
@@ -1257,17 +1375,17 @@ var CardTicket = ({
1257
1375
  {
1258
1376
  size: "large",
1259
1377
  style: {
1260
- color: availableSeats > 50 ? sharedColors.Shared_Green_Primary : sharedColors.Shared_Red_Primary
1378
+ color: departureItem?.availableTicket > 50 ? sharedColors.Shared_Green_Primary : sharedColors.Shared_Red_Primary
1261
1379
  },
1262
1380
  appearance: "tint",
1263
- color: availableSeats > 50 ? "success" : "danger",
1381
+ color: departureItem?.availableTicket > 50 ? "success" : "danger",
1264
1382
  iconPosition: "after",
1265
1383
  shape: "rounded",
1266
1384
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:ticket-diagonal-24-regular" }),
1267
1385
  children: [
1268
1386
  mergedLabels.availableSeatsLabel,
1269
1387
  " ",
1270
- availableSeats
1388
+ departureItem?.availableTicket
1271
1389
  ]
1272
1390
  }
1273
1391
  )
@@ -1284,7 +1402,7 @@ var CardTicket = ({
1284
1402
  xl: 12,
1285
1403
  xxl: 12,
1286
1404
  xxxl: 12,
1287
- children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: shipName })
1405
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle2, { children: departureItem?.provider?.name })
1288
1406
  }
1289
1407
  )
1290
1408
  ] }),
@@ -1324,46 +1442,42 @@ var CardTicket = ({
1324
1442
  {
1325
1443
  size: "extra-large",
1326
1444
  style: {
1327
- color: availableSeats > 50 ? sharedColors.Shared_Green_Primary : sharedColors.Shared_Red_Primary
1445
+ color: departureItem?.availableTicket > 50 ? sharedColors.Shared_Green_Primary : sharedColors.Shared_Red_Primary
1328
1446
  },
1329
1447
  appearance: "tint",
1330
- color: availableSeats > 50 ? "success" : "danger",
1448
+ color: departureItem?.availableTicket > 50 ? "success" : "danger",
1331
1449
  iconPosition: "after",
1332
1450
  shape: "rounded",
1333
1451
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:ticket-diagonal-24-regular" }),
1334
1452
  children: [
1335
1453
  mergedLabels.availableSeatsLabel,
1336
1454
  " ",
1337
- availableSeats
1455
+ departureItem?.availableTicket
1338
1456
  ]
1339
1457
  }
1340
1458
  ) }),
1341
1459
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketInfo, children: [
1342
1460
  /* @__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 })
1461
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: "KAMIS" }),
1462
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Title2, { children: departureItem?.departureTime }),
1463
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: routeItem?.portFrom + ", " + routeItem?.branchFrom })
1350
1464
  ] }),
1351
1465
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketDuration, children: [
1352
1466
  /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Caption2, { children: [
1353
1467
  mergedLabels.estimationPrefix,
1354
1468
  " ",
1355
- duration
1469
+ formatDuration(departureItem?.estimatedSailingMinute)
1356
1470
  ] }),
1357
1471
  /* @__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
1472
  ] }),
1359
1473
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketTime, children: [
1360
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: arrivalDay }),
1474
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: "KAMIS" }),
1361
1475
  /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Title2, { children: [
1362
- arrivalTime,
1476
+ departureItem?.arrivedTime,
1363
1477
  " ",
1364
1478
  mergedLabels.timezoneLabel
1365
1479
  ] }),
1366
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: arrivalLocation })
1480
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: routeItem?.portTo + ", " + routeItem?.branchTo })
1367
1481
  ] })
1368
1482
  ] }) }),
1369
1483
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketButtons, children: [
@@ -1379,7 +1493,7 @@ var CardTicket = ({
1379
1493
  },
1380
1494
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:money-24-regular" }),
1381
1495
  size: "medium",
1382
- onClick: onPriceDetailClick,
1496
+ onClick: () => onPriceDetailClick(departureItem?.billingDetail, departureItem?.provider),
1383
1497
  children: mergedLabels.priceDetailsButton
1384
1498
  }
1385
1499
  ),
@@ -1437,9 +1551,7 @@ var CardTicket = ({
1437
1551
  children: [
1438
1552
  mergedLabels.currencySymbol,
1439
1553
  "\xA0",
1440
- totalPrice.toLocaleString(
1441
- language === "id" ? "id-ID" : "en-US"
1442
- )
1554
+ departureItem?.billingDetail?.total?.formatted
1443
1555
  ]
1444
1556
  }
1445
1557
  )
@@ -1461,7 +1573,7 @@ var CardTicket = ({
1461
1573
  ] }),
1462
1574
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.facilitiesSection, children: [
1463
1575
  /* @__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: [
1576
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.facilitiesList, children: departureItem?.provider?.facilities.map((facility, idx) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.facilityItem, children: [
1465
1577
  /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:checkmark-circle-24-filled" }),
1466
1578
  /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1Strong, { children: facility })
1467
1579
  ] }, idx)) })
@@ -1799,6 +1911,12 @@ var useStyles6 = reactComponents.makeStyles({
1799
1911
  fontSize: reactComponents.tokens.fontSizeBase200,
1800
1912
  fontWeight: reactComponents.tokens.fontWeightRegular,
1801
1913
  color: reactComponents.tokens.colorNeutralForeground2,
1914
+ // truncate text with ellipsis 2 line
1915
+ display: "-webkit-box",
1916
+ WebkitLineClamp: 2,
1917
+ WebkitBoxOrient: "vertical",
1918
+ overflow: "hidden",
1919
+ textOverflow: "ellipsis",
1802
1920
  lineHeight: "1.4",
1803
1921
  "@media (max-width: 1200px)": {
1804
1922
  fontSize: reactComponents.tokens.fontSizeBase100,
@@ -1840,10 +1958,23 @@ var CardServiceMenu = ({
1840
1958
  onClick: () => onServiceClick?.(item.id),
1841
1959
  "aria-label": item.name,
1842
1960
  children: [
1843
- /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.imageUrl, alt: item.name, className: styles.logo }),
1961
+ /* @__PURE__ */ jsxRuntime.jsx(
1962
+ "img",
1963
+ {
1964
+ src: item.imageUrl,
1965
+ alt: item.name,
1966
+ className: styles.logo
1967
+ }
1968
+ ),
1844
1969
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.textContent, children: [
1845
1970
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.label, children: item.name }),
1846
- showDescriptions && /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.description, children: item.description })
1971
+ showDescriptions && /* @__PURE__ */ jsxRuntime.jsx(
1972
+ MenuItemDescription,
1973
+ {
1974
+ description: item.description,
1975
+ className: styles.description
1976
+ }
1977
+ )
1847
1978
  ] })
1848
1979
  ]
1849
1980
  }
@@ -1855,6 +1986,40 @@ var CardServiceMenu = ({
1855
1986
  ] }, item.id);
1856
1987
  }) }) });
1857
1988
  };
1989
+ function useIsClamped(deps) {
1990
+ const ref = React5.useRef(null);
1991
+ const [isClamped, setIsClamped] = React5.useState(false);
1992
+ React5.useEffect(() => {
1993
+ const el = ref.current;
1994
+ if (!el) return;
1995
+ const check = () => setIsClamped(el.scrollHeight > el.clientHeight);
1996
+ const timer = setTimeout(check, 0);
1997
+ const observer = new ResizeObserver(check);
1998
+ observer.observe(el);
1999
+ return () => {
2000
+ clearTimeout(timer);
2001
+ observer.disconnect();
2002
+ };
2003
+ }, deps ?? []);
2004
+ return { ref, isClamped };
2005
+ }
2006
+ var MenuItemDescription = ({ description, className }) => {
2007
+ const { ref, isClamped } = useIsClamped([description]);
2008
+ console.log({ isClamped, ref });
2009
+ if (isClamped) {
2010
+ return /* @__PURE__ */ jsxRuntime.jsx(
2011
+ reactComponents.Tooltip,
2012
+ {
2013
+ appearance: "inverted",
2014
+ content: description,
2015
+ relationship: "label",
2016
+ positioning: "after",
2017
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { ref, className, children: description })
2018
+ }
2019
+ );
2020
+ }
2021
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { ref, className, children: description });
2022
+ };
1858
2023
  var DatePickerInput = React5.forwardRef(
1859
2024
  ({
1860
2025
  field,
@@ -2147,6 +2312,7 @@ var useStyles7 = reactComponents.makeStyles({
2147
2312
  border: `1px solid ${reactComponents.tokens.colorNeutralStroke1}`,
2148
2313
  borderRadius: reactComponents.tokens.borderRadiusMedium,
2149
2314
  padding: reactComponents.tokens.spacingVerticalS,
2315
+ borderBottom: `1px solid ${reactComponents.tokens.colorNeutralForeground3}`,
2150
2316
  paddingLeft: "48px",
2151
2317
  // fontSize: tokens.fontSizeBase300,
2152
2318
  fontFamily: reactComponents.tokens.fontFamilyBase,
@@ -2160,10 +2326,11 @@ var useStyles7 = reactComponents.makeStyles({
2160
2326
  // fontSize: tokens.fontSizeBase400,
2161
2327
  },
2162
2328
  "& .react-tel-input .form-control:hover": {
2163
- border: `1px solid ${reactComponents.tokens.colorNeutralStroke1Hover}`
2329
+ border: `1px solid ${reactComponents.tokens.colorNeutralStroke1Hover}`,
2330
+ borderBottom: `1px solid ${reactComponents.tokens.colorNeutralForeground3Hover}`
2164
2331
  },
2165
2332
  "& .react-tel-input .form-control:focus": {
2166
- borderBottom: `2px solid ${reactComponents.tokens.colorBrandStroke1}`
2333
+ borderBottom: `2px solid ${reactComponents.tokens.colorBrandStroke1} !important`
2167
2334
  // boxShadow: `0 0 0 1px ${tokens.colorBrandStroke1}`,
2168
2335
  },
2169
2336
  "& .react-tel-input .form-control:disabled": {
@@ -2188,6 +2355,77 @@ var useStyles7 = reactComponents.makeStyles({
2188
2355
  backgroundColor: "transparent"
2189
2356
  }
2190
2357
  },
2358
+ // Appearance: underline
2359
+ phoneInputUnderline: {
2360
+ "& .react-tel-input .form-control": {
2361
+ border: "none",
2362
+ borderBottom: `1px solid ${reactComponents.tokens.colorNeutralForeground3}`,
2363
+ borderRadius: 0,
2364
+ backgroundColor: "transparent",
2365
+ paddingLeft: "48px"
2366
+ },
2367
+ "& .react-tel-input .form-control:hover": {
2368
+ border: "none",
2369
+ borderBottom: `1px solid ${reactComponents.tokens.colorNeutralForeground3Hover}`
2370
+ },
2371
+ "& .react-tel-input .form-control:focus": {
2372
+ border: "none",
2373
+ borderBottom: `2px solid ${reactComponents.tokens.colorBrandStroke1}`,
2374
+ boxShadow: "none"
2375
+ },
2376
+ "& .react-tel-input .flag-dropdown": {
2377
+ border: "none",
2378
+ backgroundColor: "transparent"
2379
+ }
2380
+ },
2381
+ // Appearance: filled-darker
2382
+ phoneInputFilledDarker: {
2383
+ "& .react-tel-input .form-control": {
2384
+ border: "none",
2385
+ borderBottom: `1px solid transparent`,
2386
+ borderRadius: `${reactComponents.tokens.borderRadiusMedium} ${reactComponents.tokens.borderRadiusMedium} 0 0`,
2387
+ backgroundColor: reactComponents.tokens.colorNeutralBackground3,
2388
+ paddingLeft: "48px"
2389
+ },
2390
+ "& .react-tel-input .form-control:hover": {
2391
+ border: "none",
2392
+ borderBottom: `1px solid transparent`,
2393
+ backgroundColor: reactComponents.tokens.colorNeutralBackground3Hover
2394
+ },
2395
+ "& .react-tel-input .form-control:focus": {
2396
+ border: "none",
2397
+ borderBottom: `2px solid ${reactComponents.tokens.colorBrandStroke1}`,
2398
+ boxShadow: "none"
2399
+ },
2400
+ "& .react-tel-input .flag-dropdown": {
2401
+ border: "none",
2402
+ backgroundColor: "transparent"
2403
+ }
2404
+ },
2405
+ // Appearance: filled-lighter
2406
+ phoneInputFilledLighter: {
2407
+ "& .react-tel-input .form-control": {
2408
+ border: "none",
2409
+ borderBottom: `1px solid transparent`,
2410
+ borderRadius: `${reactComponents.tokens.borderRadiusMedium} ${reactComponents.tokens.borderRadiusMedium} 0 0`,
2411
+ backgroundColor: reactComponents.tokens.colorNeutralBackground1,
2412
+ paddingLeft: "48px"
2413
+ },
2414
+ "& .react-tel-input .form-control:hover": {
2415
+ border: "none",
2416
+ borderBottom: `1px solid transparent`,
2417
+ backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover
2418
+ },
2419
+ "& .react-tel-input .form-control:focus": {
2420
+ border: "none",
2421
+ borderBottom: `2px solid ${reactComponents.tokens.colorBrandStroke1}`,
2422
+ boxShadow: "none"
2423
+ },
2424
+ "& .react-tel-input .flag-dropdown": {
2425
+ border: "none",
2426
+ backgroundColor: "transparent"
2427
+ }
2428
+ },
2191
2429
  phoneInputError: {
2192
2430
  "& .react-tel-input .form-control": {
2193
2431
  border: `2px solid ${reactComponents.tokens.colorPaletteRedBorder2}`
@@ -2510,6 +2748,13 @@ var InputDynamic = ({
2510
2748
  };
2511
2749
  const renderInput = (field, error) => {
2512
2750
  const shouldTransparentBorder = disabled && appearance !== "outline" && appearance !== "underline";
2751
+ const getPhoneAppearanceClass = () => {
2752
+ if (appearance === "underline") return styles.phoneInputUnderline;
2753
+ if (appearance === "filled-darker") return styles.phoneInputFilledDarker;
2754
+ if (appearance === "filled-lighter") return styles.phoneInputFilledLighter;
2755
+ return "";
2756
+ };
2757
+ const phoneAppearanceClass = getPhoneAppearanceClass();
2513
2758
  const inputStyle = shouldTransparentBorder ? { ...style, border: "transparent" } : style;
2514
2759
  const handleInputChange = (e) => {
2515
2760
  field.onChange(e);
@@ -2537,6 +2782,12 @@ var InputDynamic = ({
2537
2782
  const otpIndex2 = otpMatch ? parseInt(otpMatch[1], 10) : null;
2538
2783
  const classNameSize = size === "small" ? styles.valueSmall : size === "medium" ? styles.valueMedium : styles.valueLarge;
2539
2784
  const fontSizeValuePhoneInput = size == "small" ? reactComponents.tokens.fontSizeBase200 : size === "medium" ? reactComponents.tokens.fontSizeBase300 : reactComponents.tokens.fontSizeBase400;
2785
+ const phoneInputSizeStyle = {
2786
+ fontSize: fontSizeValuePhoneInput,
2787
+ ...size === "small" && { minHeight: "26px", height: "26px", padding: `0 ${reactComponents.tokens.spacingHorizontalS} 0 48px` },
2788
+ ...size === "medium" && { minHeight: "34px", height: "34px", padding: `${reactComponents.tokens.spacingVerticalXXS} ${reactComponents.tokens.spacingHorizontalS} ${reactComponents.tokens.spacingVerticalXXS} 48px` },
2789
+ ...size === "large" && { minHeight: "40px", height: "40px", padding: `${reactComponents.tokens.spacingVerticalXS} ${reactComponents.tokens.spacingHorizontalS} ${reactComponents.tokens.spacingVerticalXS} 48px` }
2790
+ };
2540
2791
  if (type === "emailOrPhone") {
2541
2792
  updateEmailOrPhoneType(field.value);
2542
2793
  const stringValue = typeof field.value === "string" ? field.value : "";
@@ -2572,13 +2823,11 @@ var InputDynamic = ({
2572
2823
  "div",
2573
2824
  {
2574
2825
  ref: emailOrPhoneInputRef,
2575
- className: `${styles.phoneInputWrapper} ${error ? styles.phoneInputError : ""}`,
2826
+ className: reactComponents.mergeClasses(styles.phoneInputWrapper, phoneAppearanceClass, error ? styles.phoneInputError : ""),
2576
2827
  children: /* @__PURE__ */ jsxRuntime.jsx(
2577
2828
  PhoneInput,
2578
2829
  {
2579
- inputStyle: {
2580
- fontSize: fontSizeValuePhoneInput
2581
- },
2830
+ inputStyle: phoneInputSizeStyle,
2582
2831
  country: defaultCountry.toLowerCase(),
2583
2832
  value: stringValue.startsWith("+") ? stringValue.substring(1) : stringValue,
2584
2833
  onChange: (value, data) => {
@@ -2677,7 +2926,7 @@ var InputDynamic = ({
2677
2926
  "div",
2678
2927
  {
2679
2928
  ref: phoneInputRef,
2680
- className: `${styles.phoneInputWrapper} ${error ? styles.phoneInputError : ""}`,
2929
+ className: reactComponents.mergeClasses(styles.phoneInputWrapper, phoneAppearanceClass, error ? styles.phoneInputError : ""),
2681
2930
  children: /* @__PURE__ */ jsxRuntime.jsx(
2682
2931
  PhoneInput,
2683
2932
  {
@@ -2719,9 +2968,7 @@ var InputDynamic = ({
2719
2968
  disabled,
2720
2969
  enableSearch: true,
2721
2970
  disableSearchIcon: true,
2722
- inputStyle: {
2723
- fontSize: fontSizeValuePhoneInput
2724
- }
2971
+ inputStyle: phoneInputSizeStyle
2725
2972
  }
2726
2973
  )
2727
2974
  }
@@ -2804,7 +3051,7 @@ var InputDynamic = ({
2804
3051
  name: `${String(name)}_${Math.random().toString(36).substring(7)}`,
2805
3052
  isDisabled: disabled,
2806
3053
  placeholder: placeholder || "Select country",
2807
- options: COUNTRIES,
3054
+ options: options && options.length > 0 ? options : COUNTRIES,
2808
3055
  styles: getSelectStyles(!!error),
2809
3056
  className: reactComponents.mergeClasses(styles.reactSelect, classNameSize),
2810
3057
  classNamePrefix: "react-select",
@@ -2828,7 +3075,7 @@ var InputDynamic = ({
2828
3075
  {
2829
3076
  style: { display: "flex", alignItems: "center", gap: "8px" },
2830
3077
  children: [
2831
- /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: option.flag, width: 20, height: 20 }),
3078
+ 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
3079
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: option.label })
2833
3080
  ]
2834
3081
  }
@@ -2850,7 +3097,7 @@ var InputDynamic = ({
2850
3097
  return /* @__PURE__ */ jsxRuntime.jsx(
2851
3098
  "div",
2852
3099
  {
2853
- className: `${styles.phoneInputWrapper} ${error ? styles.phoneInputError : ""}`,
3100
+ className: reactComponents.mergeClasses(styles.phoneInputWrapper, phoneAppearanceClass, error ? styles.phoneInputError : ""),
2854
3101
  children: /* @__PURE__ */ jsxRuntime.jsx(
2855
3102
  PhoneInput,
2856
3103
  {
@@ -2864,9 +3111,7 @@ var InputDynamic = ({
2864
3111
  disabled,
2865
3112
  enableSearch: true,
2866
3113
  disableSearchIcon: true,
2867
- inputStyle: {
2868
- fontSize: fontSizeValuePhoneInput
2869
- }
3114
+ inputStyle: phoneInputSizeStyle
2870
3115
  }
2871
3116
  )
2872
3117
  }
@@ -4070,9 +4315,10 @@ var useStyles9 = reactComponents.makeStyles({
4070
4315
  },
4071
4316
  circular: {
4072
4317
  position: "absolute",
4073
- width: "clamp(40px, 7vw, 90px)",
4074
- height: "clamp(40px, 7vw, 90px)",
4075
- borderRadius: "50% 50% 0 0",
4318
+ width: "clamp(45px, 8vw, 90px)",
4319
+ height: "clamp(22.5px, 4vw, 45px)",
4320
+ // lebih kecil dari width
4321
+ borderRadius: "50% 50% 0 0 / 100% 100% 0 0",
4076
4322
  backgroundColor: reactComponents.tokens.colorNeutralBackground1Hover,
4077
4323
  bottom: "-10px",
4078
4324
  boxShadow: "inset 0 2px 0px rgba(0, 0, 0, 0.1)"
@@ -4096,23 +4342,27 @@ var CardTicketSearchSummary = ({
4096
4342
  const { width } = useWindowSize();
4097
4343
  const getCircularConfig = () => {
4098
4344
  if (width <= parseInt(extendedTokens.breakpointXs))
4099
- return { count: 4, spacing: 65, size: 30, height: 30 };
4345
+ return { count: 4, spacing: 65 };
4100
4346
  if (width <= parseInt(extendedTokens.breakpointSm))
4101
- return { count: 5, spacing: 71, size: 40, height: 40 };
4347
+ return { count: 5, spacing: 71 };
4102
4348
  if (width <= parseInt(extendedTokens.breakpointMd))
4103
- return { count: 8, spacing: 87, size: 50, height: 50 };
4349
+ return { count: 8, spacing: 87 };
4104
4350
  if (width <= parseInt(extendedTokens.breakpointLg))
4105
- return { count: 9, spacing: 100, size: 60, height: 60 };
4351
+ return { count: 9, spacing: 100 };
4106
4352
  if (width <= parseInt(extendedTokens.breakpointXl))
4107
- return { count: 8, spacing: 115, size: 70, height: 70 };
4353
+ return { count: 8, spacing: 115 };
4108
4354
  if (width <= parseInt(extendedTokens.breakpointXxl))
4109
- return { count: 8, spacing: 136, size: 90, height: 90 };
4355
+ return { count: 8, spacing: 125 };
4110
4356
  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 };
4357
+ return { count: 9, spacing: 120 };
4358
+ return { count: 13, spacing: 114 };
4113
4359
  };
4114
4360
  const circularConfig = getCircularConfig();
4115
- const RenderField = ({ label, value, icon }) => {
4361
+ const RenderField = ({
4362
+ label,
4363
+ value,
4364
+ icon
4365
+ }) => {
4116
4366
  return /* @__PURE__ */ jsxRuntime.jsxs(
4117
4367
  "div",
4118
4368
  {
@@ -4140,12 +4390,18 @@ var CardTicketSearchSummary = ({
4140
4390
  style: { height: "20px", width: "20px" }
4141
4391
  }
4142
4392
  ),
4143
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1Strong, { style: {
4144
- display: "-webkit-box",
4145
- WebkitLineClamp: 1,
4146
- WebkitBoxOrient: "vertical",
4147
- overflow: "hidden"
4148
- }, children: value })
4393
+ /* @__PURE__ */ jsxRuntime.jsx(
4394
+ reactComponents.Body1Strong,
4395
+ {
4396
+ style: {
4397
+ display: "-webkit-box",
4398
+ WebkitLineClamp: 1,
4399
+ WebkitBoxOrient: "vertical",
4400
+ overflow: "hidden"
4401
+ },
4402
+ children: value
4403
+ }
4404
+ )
4149
4405
  ]
4150
4406
  }
4151
4407
  )
@@ -4540,7 +4796,8 @@ var ModalSearchHarbor = ({
4540
4796
  onAddLastSearched,
4541
4797
  onRemoveLastSearched,
4542
4798
  onClearLastSearched,
4543
- popularHarbors
4799
+ popularHarbors,
4800
+ showButtonFavorite = true
4544
4801
  }) => {
4545
4802
  const styles = useStyles10();
4546
4803
  const mergedLabels = { ...DEFAULT_LABELS10[language], ...labels };
@@ -4694,7 +4951,7 @@ var ModalSearchHarbor = ({
4694
4951
  ]
4695
4952
  }
4696
4953
  ),
4697
- /* @__PURE__ */ jsxRuntime.jsx(
4954
+ showButtonFavorite && /* @__PURE__ */ jsxRuntime.jsx(
4698
4955
  react.Icon,
4699
4956
  {
4700
4957
  icon: harbor.isFavorite ? "fluent:star-24-filled" : "fluent:star-24-regular",
@@ -5446,7 +5703,7 @@ var ModalTotalPassengers = ({
5446
5703
  const parts = [];
5447
5704
  passenger.classes.forEach((cls) => {
5448
5705
  if ((cls.count ?? 0) > 0) {
5449
- const displayName = cls.classCode?.toUpperCase();
5706
+ const displayName = cls.className?.toUpperCase();
5450
5707
  parts.push(`${cls.count} ${displayName}`);
5451
5708
  }
5452
5709
  });
@@ -5570,7 +5827,7 @@ var ModalTotalPassengers = ({
5570
5827
  {
5571
5828
  className: styles.nestedRow,
5572
5829
  children: [
5573
- /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: cls.classCode.toUpperCase() }),
5830
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Body1, { children: (cls?.className || "")?.toUpperCase() }),
5574
5831
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.passengerCount, children: [
5575
5832
  /* @__PURE__ */ jsxRuntime.jsx(
5576
5833
  reactComponents.Button,
@@ -7658,7 +7915,7 @@ var CardOrdererInfo = ({
7658
7915
  var DEFAULT_LABELS21 = {
7659
7916
  id: {
7660
7917
  title: "Detail Penumpang",
7661
- sameAsOrderer: "Sama Dengan Pemesan",
7918
+ // sameAsOrderer: 'Sama Dengan Pemesan',
7662
7919
  searchPlaceholder: "Cari Penumpang",
7663
7920
  addPassengerButton: "Tambah Penumpang",
7664
7921
  cancelButton: "Batal",
@@ -7672,7 +7929,7 @@ var DEFAULT_LABELS21 = {
7672
7929
  },
7673
7930
  en: {
7674
7931
  title: "Passenger Details",
7675
- sameAsOrderer: "Same as Orderer",
7932
+ // sameAsOrderer: 'Same as Orderer',
7676
7933
  searchPlaceholder: "Search Passenger",
7677
7934
  addPassengerButton: "Add Passenger",
7678
7935
  cancelButton: "Cancel",
@@ -7736,9 +7993,9 @@ var ModalListPassenger = ({
7736
7993
  onSearchChange,
7737
7994
  onSelectPassenger,
7738
7995
  onEditPassenger,
7739
- onAddPassenger,
7740
- sameAsOrderer,
7741
- onSameAsOrdererChange
7996
+ onAddPassenger
7997
+ // sameAsOrderer,
7998
+ // onSameAsOrdererChange,
7742
7999
  }) => {
7743
8000
  const styles = useStyles21();
7744
8001
  const mergedLabels = { ...DEFAULT_LABELS21[language], ...labels };
@@ -7754,7 +8011,7 @@ var ModalListPassenger = ({
7754
8011
  const filteredPassengers = passengers.filter((passenger) => {
7755
8012
  if (!searchQuery) return true;
7756
8013
  const query = searchQuery.toLowerCase();
7757
- return passenger.name && passenger.name.toLowerCase().includes(query) || passenger.category && passenger.category.toLowerCase().includes(query);
8014
+ return passenger.fullName && passenger.fullName.toLowerCase().includes(query) || passenger.ageLabel && passenger.ageLabel.toLowerCase().includes(query);
7758
8015
  });
7759
8016
  return /* @__PURE__ */ jsxRuntime.jsx(
7760
8017
  reactComponents.Dialog,
@@ -7769,14 +8026,6 @@ var ModalListPassenger = ({
7769
8026
  /* @__PURE__ */ jsxRuntime.jsx(
7770
8027
  reactComponents.DialogTitle,
7771
8028
  {
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
8029
  children: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Subtitle1, { children: displayTitle })
7781
8030
  }
7782
8031
  ),
@@ -7807,21 +8056,10 @@ var ModalListPassenger = ({
7807
8056
  },
7808
8057
  children: [
7809
8058
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Subtitle2, { children: [
7810
- passenger.name,
8059
+ passenger.fullName,
7811
8060
  " (",
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
- ")"
8061
+ passenger.ageLabel,
8062
+ " )"
7825
8063
  ] }) }),
7826
8064
  /* @__PURE__ */ jsxRuntime.jsx(
7827
8065
  reactComponents.Button,
@@ -7894,6 +8132,10 @@ var DEFAULT_LABELS22 = {
7894
8132
  countryLabel: "Negara Penerbit Passport",
7895
8133
  countryPlaceholder: "Masukkan Negara",
7896
8134
  autofill: "Isi Data Otomatis",
8135
+ phoneNumberLabel: "Nomor Telepon",
8136
+ phoneNumberPlaceholder: "Masukkan Nomor Telepon",
8137
+ emailLabel: "Email",
8138
+ emailPlaceholder: "Masukkan Email",
7897
8139
  // Scan Identity
7898
8140
  selectIdTypeTitle: "Isi Data Dengan Scan Identitas",
7899
8141
  scanIdentityTitle: "Scan Identitas",
@@ -7923,7 +8165,10 @@ var DEFAULT_LABELS22 = {
7923
8165
  maxAge: "Usia maksimal 150 tahun",
7924
8166
  requiredDate: "Tanggal lahir harus diisi",
7925
8167
  requiredCity: "Kota/Kabupaten harus diisi",
7926
- requiredCountry: "Negara harus diisi"
8168
+ requiredCountry: "Negara harus diisi",
8169
+ requiredPhoneNumber: "Nomor telepon harus diisi",
8170
+ minLengthPhoneNumber: "Nomor telepon minimal 10 karakter",
8171
+ invalidEmail: "Format email tidak valid"
7927
8172
  }
7928
8173
  },
7929
8174
  en: {
@@ -7950,6 +8195,10 @@ var DEFAULT_LABELS22 = {
7950
8195
  countryLabel: "Country of Issue",
7951
8196
  countryPlaceholder: "Enter Country",
7952
8197
  autofill: "Autofill",
8198
+ phoneNumberLabel: "Phone Number",
8199
+ phoneNumberPlaceholder: "Enter Phone Number",
8200
+ emailLabel: "Email",
8201
+ emailPlaceholder: "Enter Email",
7953
8202
  // Scan Identity
7954
8203
  selectIdTypeTitle: "Fill Data by Scanning Identity",
7955
8204
  scanIdentityTitle: "Scan Identity",
@@ -7979,7 +8228,10 @@ var DEFAULT_LABELS22 = {
7979
8228
  maxAge: "Age must be at most 150 years",
7980
8229
  requiredDate: "Date of birth is required",
7981
8230
  requiredCity: "City/Regency is required",
7982
- requiredCountry: "Country is required"
8231
+ requiredCountry: "Country is required",
8232
+ requiredPhoneNumber: "Phone number is required",
8233
+ minLengthPhoneNumber: "Phone number must be at least 10 characters",
8234
+ invalidEmail: "Invalid email format"
7983
8235
  }
7984
8236
  }
7985
8237
  };
@@ -8288,7 +8540,9 @@ var ModalPassengerForm = ({
8288
8540
  const performOCR = async () => {
8289
8541
  try {
8290
8542
  const Tesseract = await import('tesseract.js');
8291
- const { data: { text } } = await Tesseract.recognize(capturedImage, "ind");
8543
+ const {
8544
+ data: { text }
8545
+ } = await Tesseract.recognize(capturedImage, "ind");
8292
8546
  if (isCancelled) return;
8293
8547
  setScanStep(1);
8294
8548
  await new Promise((resolve) => setTimeout(resolve, 500));
@@ -8340,7 +8594,14 @@ var ModalPassengerForm = ({
8340
8594
  return () => {
8341
8595
  isCancelled = true;
8342
8596
  };
8343
- }, [scanStatus, capturedImage, stopCamera, setValue, scannedIdType, onScanComplete]);
8597
+ }, [
8598
+ scanStatus,
8599
+ capturedImage,
8600
+ stopCamera,
8601
+ setValue,
8602
+ scannedIdType,
8603
+ onScanComplete
8604
+ ]);
8344
8605
  const handleFormSubmit = (data) => {
8345
8606
  onSubmit(data);
8346
8607
  reset();
@@ -8898,23 +9159,28 @@ var getBadgeConfig = (ticketClass) => {
8898
9159
  case "EKONOMI":
8899
9160
  case "ECONOMY":
8900
9161
  return {
9162
+ code: "ECONOMY",
8901
9163
  color: "#A74109",
8902
9164
  icon: "/assets/images/class/shield_badge_ekonomi.svg"
8903
9165
  };
8904
9166
  case "BISNIS":
8905
9167
  case "BUSINESS":
8906
9168
  return {
9169
+ code: "BUSINESS",
8907
9170
  color: "#859599",
8908
9171
  icon: "/assets/images/class/ribbon_badge_bisnis.svg"
8909
9172
  };
8910
9173
  case "EKSEKUTIF":
9174
+ case "EKSEKUTIVE":
8911
9175
  case "EXECUTIVE":
8912
9176
  return {
9177
+ code: "EXECUTIVE",
8913
9178
  color: "#C19C00",
8914
9179
  icon: "/assets/images/class/crown_badge_eksekutif.svg"
8915
9180
  };
8916
9181
  default:
8917
9182
  return {
9183
+ code: "",
8918
9184
  color: reactComponents.tokens.colorNeutralBackground3,
8919
9185
  icon: ""
8920
9186
  };
@@ -9127,6 +9393,7 @@ var CardVehicleDetail = ({
9127
9393
  serviceTitle,
9128
9394
  serviceImage,
9129
9395
  control,
9396
+ disabled,
9130
9397
  vehicleNumberName = "vehicleNumber",
9131
9398
  showLoadOption = false,
9132
9399
  hasLoad,
@@ -9170,6 +9437,7 @@ var CardVehicleDetail = ({
9170
9437
  InputDynamic_default,
9171
9438
  {
9172
9439
  control,
9440
+ disabled,
9173
9441
  name: vehicleNumberName,
9174
9442
  placeholder: mergedLabels.vehicleNumberPlaceholder,
9175
9443
  type: "text"
@@ -9181,6 +9449,7 @@ var CardVehicleDetail = ({
9181
9449
  /* @__PURE__ */ jsxRuntime.jsxs(
9182
9450
  reactComponents.RadioGroup,
9183
9451
  {
9452
+ disabled,
9184
9453
  value: hasLoad,
9185
9454
  onChange: (_, data) => onHasLoadChange?.(data.value),
9186
9455
  layout: "horizontal",
@@ -9348,6 +9617,7 @@ var CardVehicleOwnerForm = ({
9348
9617
  owners,
9349
9618
  hasLoad,
9350
9619
  control,
9620
+ disabled,
9351
9621
  watch,
9352
9622
  setValue,
9353
9623
  getValues,
@@ -9357,8 +9627,16 @@ var CardVehicleOwnerForm = ({
9357
9627
  onAddCargo,
9358
9628
  onDeleteCargo,
9359
9629
  onUpdateCargoQuantity,
9360
- companyOptions = [],
9361
- cityOptions = [],
9630
+ companySenderOptions = [],
9631
+ companyOwnerOptions = [],
9632
+ companyLogisticsOptions = [],
9633
+ companyReceiverOptions = [],
9634
+ cityOriginOptions = [],
9635
+ cityDestinationOptions = [],
9636
+ commodityOptions = [],
9637
+ loadTypeOptions = [],
9638
+ industryOptions = [],
9639
+ loadCategoryOptions = [],
9362
9640
  language = "id",
9363
9641
  labels
9364
9642
  }) => {
@@ -9416,8 +9694,9 @@ var CardVehicleOwnerForm = ({
9416
9694
  reactComponents.Button,
9417
9695
  {
9418
9696
  appearance: "transparent",
9419
- icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:delete-24-regular" }),
9420
9697
  "aria-label": mergedLabels.deleteOwnerAriaLabel,
9698
+ disabled,
9699
+ icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:delete-24-regular" }),
9421
9700
  onClick: (e) => {
9422
9701
  e.stopPropagation();
9423
9702
  onDeleteOwner(owner.id);
@@ -9445,6 +9724,7 @@ var CardVehicleOwnerForm = ({
9445
9724
  children: /* @__PURE__ */ jsxRuntime.jsxs(
9446
9725
  reactComponents.RadioGroup,
9447
9726
  {
9727
+ disabled,
9448
9728
  layout: "horizontal",
9449
9729
  value: owner.senderType,
9450
9730
  onChange: (_, data) => onUpdateOwner(owner.id, {
@@ -9474,11 +9754,12 @@ var CardVehicleOwnerForm = ({
9474
9754
  InputDynamic_default,
9475
9755
  {
9476
9756
  control,
9757
+ disabled,
9477
9758
  name: `owners.${index}.senderName`,
9478
9759
  placeholder: owner.senderType === "Perusahaan" ? mergedLabels.selectCompanyPlaceholder : mergedLabels.inputSenderNamePlaceholder,
9479
9760
  size: "large",
9480
9761
  type: owner.senderType === "Perusahaan" ? "select" : "text",
9481
- options: owner.senderType === "Perusahaan" ? companyOptions : []
9762
+ options: owner.senderType === "Perusahaan" ? companySenderOptions : []
9482
9763
  }
9483
9764
  )
9484
9765
  ] }),
@@ -9493,6 +9774,7 @@ var CardVehicleOwnerForm = ({
9493
9774
  InputDynamic_default,
9494
9775
  {
9495
9776
  control,
9777
+ disabled,
9496
9778
  name: `owners.${index}.estimatedWeight`,
9497
9779
  placeholder: mergedLabels.inputNumberPlaceholder,
9498
9780
  size: "large",
@@ -9508,10 +9790,11 @@ var CardVehicleOwnerForm = ({
9508
9790
  InputDynamic_default,
9509
9791
  {
9510
9792
  control,
9793
+ disabled,
9511
9794
  name: `looseCargoOwners.${index}.originCity`,
9512
9795
  placeholder: mergedLabels.selectPlaceholder,
9513
9796
  type: "select",
9514
- options: cityOptions,
9797
+ options: cityOriginOptions,
9515
9798
  size: "large"
9516
9799
  }
9517
9800
  )
@@ -9522,10 +9805,11 @@ var CardVehicleOwnerForm = ({
9522
9805
  InputDynamic_default,
9523
9806
  {
9524
9807
  control,
9808
+ disabled,
9525
9809
  name: `looseCargoOwners.${index}.destinationCity`,
9526
9810
  placeholder: mergedLabels.selectPlaceholder,
9527
9811
  type: "select",
9528
- options: cityOptions,
9812
+ options: cityDestinationOptions,
9529
9813
  size: "large"
9530
9814
  }
9531
9815
  )
@@ -9550,6 +9834,7 @@ var CardVehicleOwnerForm = ({
9550
9834
  children: /* @__PURE__ */ jsxRuntime.jsxs(
9551
9835
  reactComponents.RadioGroup,
9552
9836
  {
9837
+ disabled,
9553
9838
  layout: "horizontal",
9554
9839
  value: owner.cargoOwnerType || "Perusahaan",
9555
9840
  onChange: (_, data) => onUpdateOwner(owner.id, {
@@ -9578,12 +9863,13 @@ var CardVehicleOwnerForm = ({
9578
9863
  /* @__PURE__ */ jsxRuntime.jsx(
9579
9864
  InputDynamic_default,
9580
9865
  {
9866
+ disabled,
9581
9867
  control,
9582
9868
  name: `looseCargoOwners.${index}.cargoOwnerName`,
9583
9869
  placeholder: owner.cargoOwnerType === "Perusahaan" ? mergedLabels.cargoOwnerCompanyPlaceholder : mergedLabels.cargoOwnerIndividualPlaceholder,
9584
9870
  size: "large",
9585
9871
  type: owner.cargoOwnerType === "Perusahaan" ? "select" : "text",
9586
- options: owner.cargoOwnerType === "Perusahaan" ? companyOptions : []
9872
+ options: owner.cargoOwnerType === "Perusahaan" ? companyOwnerOptions : []
9587
9873
  }
9588
9874
  ),
9589
9875
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -9614,6 +9900,7 @@ var CardVehicleOwnerForm = ({
9614
9900
  children: /* @__PURE__ */ jsxRuntime.jsxs(
9615
9901
  reactComponents.RadioGroup,
9616
9902
  {
9903
+ disabled,
9617
9904
  layout: "horizontal",
9618
9905
  value: owner.logisticsCompanyType || "Perseorangan",
9619
9906
  onChange: (_, data) => onUpdateOwner(owner.id, {
@@ -9643,11 +9930,12 @@ var CardVehicleOwnerForm = ({
9643
9930
  InputDynamic_default,
9644
9931
  {
9645
9932
  control,
9933
+ disabled,
9646
9934
  name: `looseCargoOwners.${index}.logisticsCompanyName`,
9647
9935
  placeholder: owner.logisticsCompanyType === "Perusahaan" ? mergedLabels.logisticsCompanyPlaceholder : mergedLabels.logisticsIndividualPlaceholder,
9648
9936
  size: "large",
9649
9937
  type: owner.logisticsCompanyType === "Perusahaan" ? "select" : "text",
9650
- options: owner.logisticsCompanyType === "Perusahaan" ? companyOptions : []
9938
+ options: owner.logisticsCompanyType === "Perusahaan" ? companyLogisticsOptions : []
9651
9939
  }
9652
9940
  ),
9653
9941
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -9668,6 +9956,7 @@ var CardVehicleOwnerForm = ({
9668
9956
  /* @__PURE__ */ jsxRuntime.jsxs(
9669
9957
  reactComponents.RadioGroup,
9670
9958
  {
9959
+ disabled,
9671
9960
  layout: "horizontal",
9672
9961
  value: owner.cargoReceiverType || "Perusahaan",
9673
9962
  onChange: (_, data) => onUpdateOwner(owner.id, {
@@ -9695,11 +9984,12 @@ var CardVehicleOwnerForm = ({
9695
9984
  InputDynamic_default,
9696
9985
  {
9697
9986
  control,
9987
+ disabled,
9698
9988
  name: `looseCargoOwners.${index}.cargoReceiverName`,
9699
9989
  placeholder: owner.cargoReceiverType === "Perusahaan" ? mergedLabels.cargoReceiverCompanyPlaceholder : mergedLabels.cargoReceiverIndividualPlaceholder,
9700
9990
  size: "large",
9701
9991
  type: owner.cargoReceiverType === "Perusahaan" ? "select" : "text",
9702
- options: owner.cargoReceiverType === "Perusahaan" ? companyOptions : []
9992
+ options: owner.cargoReceiverType === "Perusahaan" ? companyReceiverOptions : []
9703
9993
  }
9704
9994
  ),
9705
9995
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -9724,6 +10014,7 @@ var CardVehicleOwnerForm = ({
9724
10014
  InputDynamic_default,
9725
10015
  {
9726
10016
  control,
10017
+ disabled,
9727
10018
  name: `looseCargoOwners.${index}.cargoWeight`,
9728
10019
  placeholder: mergedLabels.inputNumberPlaceholder,
9729
10020
  type: "number",
@@ -9782,10 +10073,11 @@ var CardVehicleOwnerForm = ({
9782
10073
  InputDynamic_default,
9783
10074
  {
9784
10075
  control,
10076
+ disabled,
9785
10077
  name: `looseCargoOwners.${index}.cargo.${cargoIndex}.commodity`,
9786
10078
  placeholder: mergedLabels.selectPlaceholder,
9787
10079
  type: "select",
9788
- options: [],
10080
+ options: commodityOptions,
9789
10081
  size: "large"
9790
10082
  }
9791
10083
  ),
@@ -9814,27 +10106,11 @@ var CardVehicleOwnerForm = ({
9814
10106
  InputDynamic_default,
9815
10107
  {
9816
10108
  control,
10109
+ disabled,
9817
10110
  name: `looseCargoOwners.${index}.cargo.${cargoIndex}.cargoType`,
9818
10111
  placeholder: mergedLabels.selectPlaceholder,
9819
10112
  type: "select",
9820
- options: [
9821
- {
9822
- value: "karung",
9823
- label: mergedLabels.cargoTypeOptions.karung
9824
- },
9825
- {
9826
- value: "kg",
9827
- label: mergedLabels.cargoTypeOptions.kg
9828
- },
9829
- {
9830
- value: "ton",
9831
- label: mergedLabels.cargoTypeOptions.ton
9832
- },
9833
- {
9834
- value: "unit",
9835
- label: mergedLabels.cargoTypeOptions.unit
9836
- }
9837
- ],
10113
+ options: loadTypeOptions,
9838
10114
  size: "large"
9839
10115
  }
9840
10116
  ),
@@ -9878,6 +10154,7 @@ var CardVehicleOwnerForm = ({
9878
10154
  reactComponents.Button,
9879
10155
  {
9880
10156
  appearance: "transparent",
10157
+ disabled,
9881
10158
  icon: /* @__PURE__ */ jsxRuntime.jsx(
9882
10159
  react.Icon,
9883
10160
  {
@@ -9919,6 +10196,7 @@ var CardVehicleOwnerForm = ({
9919
10196
  {
9920
10197
  name: `looseCargoOwners.${index}.cargo.${cargoIndex}.quantity`,
9921
10198
  control,
10199
+ disabled,
9922
10200
  render: ({ field }) => /* @__PURE__ */ jsxRuntime.jsx(
9923
10201
  "input",
9924
10202
  {
@@ -9943,6 +10221,7 @@ var CardVehicleOwnerForm = ({
9943
10221
  reactComponents.Button,
9944
10222
  {
9945
10223
  appearance: "transparent",
10224
+ disabled,
9946
10225
  icon: /* @__PURE__ */ jsxRuntime.jsx(
9947
10226
  react.Icon,
9948
10227
  {
@@ -10016,9 +10295,9 @@ var CardVehicleOwnerForm = ({
10016
10295
  InputDynamic_default,
10017
10296
  {
10018
10297
  control,
10298
+ disabled: true,
10019
10299
  name: `owners.${index}.price`,
10020
10300
  placeholder: mergedLabels.pricePlaceholder,
10021
- disabled: true,
10022
10301
  size: "large",
10023
10302
  type: "text"
10024
10303
  }
@@ -10036,10 +10315,11 @@ var CardVehicleOwnerForm = ({
10036
10315
  InputDynamic_default,
10037
10316
  {
10038
10317
  control,
10318
+ disabled,
10039
10319
  name: `looseCargoOwners.${index}.cargo.${cargoIndex}.industryType`,
10040
10320
  placeholder: mergedLabels.selectPlaceholder,
10041
10321
  type: "select",
10042
- options: [],
10322
+ options: industryOptions,
10043
10323
  size: "large"
10044
10324
  }
10045
10325
  ),
@@ -10064,10 +10344,11 @@ var CardVehicleOwnerForm = ({
10064
10344
  InputDynamic_default,
10065
10345
  {
10066
10346
  control,
10347
+ disabled,
10067
10348
  name: `looseCargoOwners.${index}.cargo.${cargoIndex}.cargoCategory`,
10068
10349
  placeholder: mergedLabels.selectPlaceholder,
10069
10350
  type: "select",
10070
- options: [],
10351
+ options: loadCategoryOptions,
10071
10352
  size: "large"
10072
10353
  }
10073
10354
  ),
@@ -10090,6 +10371,7 @@ var CardVehicleOwnerForm = ({
10090
10371
  /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Row, { children: /* @__PURE__ */ jsxRuntime.jsx(reactGridSystem.Col, { children: (owner.cargoItems?.length || 0) > 1 && /* @__PURE__ */ jsxRuntime.jsx(
10091
10372
  reactComponents.Button,
10092
10373
  {
10374
+ disabled,
10093
10375
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:delete-24-regular" }),
10094
10376
  onClick: (e) => {
10095
10377
  e.stopPropagation();
@@ -10287,16 +10569,17 @@ var useStyles26 = reactComponents.makeStyles({
10287
10569
  var CardBookingTicket = ({
10288
10570
  language = "id",
10289
10571
  labels,
10290
- shipName = "KMP PORTLINK",
10291
- shipType = "Water Taxi",
10292
- shipTypeColor = "success",
10293
- departureDay = "Kamis, 25 Sep",
10294
- departureTime = "18:15",
10295
- departureLocation = "Merak, Banten",
10296
- arrivalDay = "Jumat, 26 Sep",
10297
- arrivalTime = "19:25",
10298
- arrivalLocation = "Bakauheni, Lampung",
10299
- duration = "1 jam 10 menit",
10572
+ providerLogo,
10573
+ shipName,
10574
+ shipType,
10575
+ shipTypeColor,
10576
+ departureDay,
10577
+ departureTime,
10578
+ departureLocation,
10579
+ arrivalDay,
10580
+ arrivalTime,
10581
+ arrivalLocation,
10582
+ duration = 0,
10300
10583
  totalPrice,
10301
10584
  reservationStep,
10302
10585
  paymentStep,
@@ -10315,7 +10598,7 @@ var CardBookingTicket = ({
10315
10598
  /* @__PURE__ */ jsxRuntime.jsx(
10316
10599
  "img",
10317
10600
  {
10318
- src: "/assets/logo/asdp-default.svg",
10601
+ src: providerLogo || "/assets/logo/asdp-default.svg",
10319
10602
  width: 81,
10320
10603
  height: 54,
10321
10604
  alt: "asdp"
@@ -10328,7 +10611,7 @@ var CardBookingTicket = ({
10328
10611
  {
10329
10612
  size: "extra-large",
10330
10613
  appearance: "filled",
10331
- color: shipTypeColor,
10614
+ style: { backgroundColor: shipTypeColor },
10332
10615
  iconPosition: "before",
10333
10616
  shape: "rounded",
10334
10617
  icon: /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "fluent:info-24-regular" }),
@@ -10352,7 +10635,7 @@ var CardBookingTicket = ({
10352
10635
  /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.Caption2, { children: [
10353
10636
  mergedLabels.estimationPrefix,
10354
10637
  " ",
10355
- duration
10638
+ formatDuration(duration)
10356
10639
  ] })
10357
10640
  ] }),
10358
10641
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.ticketTime, children: [
@@ -10966,13 +11249,15 @@ var DEFAULT_LABELS29 = {
10966
11249
  addButton: "Tambah",
10967
11250
  currencySymbol: "Rp",
10968
11251
  decrementAriaLabel: "Kurangi jumlah",
10969
- incrementAriaLabel: "Tambah jumlah"
11252
+ incrementAriaLabel: "Tambah jumlah",
11253
+ searchPlaceholder: "Cari makanan atau minuman yang Anda inginkan"
10970
11254
  },
10971
11255
  en: {
10972
11256
  addButton: "Add",
10973
11257
  currencySymbol: "Rp",
10974
11258
  decrementAriaLabel: "Decrease quantity",
10975
- incrementAriaLabel: "Increase quantity"
11259
+ incrementAriaLabel: "Increase quantity",
11260
+ searchPlaceholder: "Search for food or drinks you want"
10976
11261
  }
10977
11262
  };
10978
11263
  var useStyles29 = reactComponents.makeStyles({
@@ -11102,6 +11387,9 @@ var useStyles29 = reactComponents.makeStyles({
11102
11387
  // tokensV2.lightModeColors.Brand_Stroke_1_Rest
11103
11388
  color: "rgb(30, 57, 141)"
11104
11389
  // tokensV2.lightModeColors.Brand_Foreground_1_Rest
11390
+ },
11391
+ searchContainer: {
11392
+ width: "100%"
11105
11393
  }
11106
11394
  });
11107
11395
  var CardMealCatalog = ({
@@ -11112,7 +11400,9 @@ var CardMealCatalog = ({
11112
11400
  categories,
11113
11401
  onAdd,
11114
11402
  onUpdateQuantity,
11115
- className
11403
+ className,
11404
+ searchValue,
11405
+ onSearchChange
11116
11406
  }) => {
11117
11407
  const styles = useStyles29();
11118
11408
  const mergedLabels = { ...DEFAULT_LABELS29[language], ...labels };
@@ -11137,6 +11427,16 @@ var CardMealCatalog = ({
11137
11427
  /* @__PURE__ */ jsxRuntime.jsx(reactIcons.InfoRegular, {}),
11138
11428
  /* @__PURE__ */ jsxRuntime.jsx(reactComponents.Caption1, { children: disclaimerText })
11139
11429
  ] }),
11430
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.searchContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
11431
+ reactComponents.Input,
11432
+ {
11433
+ contentBefore: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.SearchRegular, {}),
11434
+ placeholder: mergedLabels.searchPlaceholder,
11435
+ value: searchValue,
11436
+ onChange: (_, data) => onSearchChange?.(data.value),
11437
+ style: { width: "100%" }
11438
+ }
11439
+ ) }),
11140
11440
  categories.map((cat, index) => /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
11141
11441
  /* @__PURE__ */ jsxRuntime.jsx(
11142
11442
  reactComponents.Title3,
@@ -12536,6 +12836,59 @@ var DEFAULT_LABELS38 = {
12536
12836
  requiredError: "is required"
12537
12837
  }
12538
12838
  };
12839
+ var useStyles39 = reactComponents.makeStyles({
12840
+ surface: {
12841
+ maxWidth: "90vw",
12842
+ maxHeight: "90vh",
12843
+ backgroundColor: "transparent",
12844
+ boxShadow: "none"
12845
+ },
12846
+ closeButton: {
12847
+ backgroundColor: reactComponents.tokens.colorNeutralForeground2,
12848
+ color: reactComponents.tokens.colorNeutralBackground1
12849
+ },
12850
+ content: {
12851
+ alignItems: "center",
12852
+ textAlign: "center"
12853
+ },
12854
+ image: {
12855
+ maxWidth: "100%",
12856
+ maxHeight: "70vh",
12857
+ objectFit: "contain"
12858
+ }
12859
+ });
12860
+ var ModalPreviewImage = ({
12861
+ open,
12862
+ onOpenChange,
12863
+ imageUrl,
12864
+ alt = "Preview"
12865
+ }) => {
12866
+ const styles = useStyles39();
12867
+ 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: [
12868
+ /* @__PURE__ */ jsxRuntime.jsx(
12869
+ reactComponents.DialogTitle,
12870
+ {
12871
+ action: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogTrigger, { action: "close", children: /* @__PURE__ */ jsxRuntime.jsx(
12872
+ reactComponents.Button,
12873
+ {
12874
+ appearance: "subtle",
12875
+ "aria-label": "close",
12876
+ icon: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.Dismiss24Regular, {}),
12877
+ className: styles.closeButton
12878
+ }
12879
+ ) })
12880
+ }
12881
+ ),
12882
+ /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogContent, { className: styles.content, children: imageUrl && /* @__PURE__ */ jsxRuntime.jsx(
12883
+ "img",
12884
+ {
12885
+ src: imageUrl,
12886
+ alt,
12887
+ className: styles.image
12888
+ }
12889
+ ) })
12890
+ ] }) }) });
12891
+ };
12539
12892
  var uploadStyles = reactComponents.makeStyles({
12540
12893
  container: {
12541
12894
  backgroundColor: "#F0FEFF",
@@ -12809,56 +13162,7 @@ var FileUpload = React5__default.default.forwardRef(
12809
13162
  ] })
12810
13163
  }
12811
13164
  ),
12812
- /* @__PURE__ */ jsxRuntime.jsx(
12813
- reactComponents.Dialog,
12814
- {
12815
- open: isPreviewOpen,
12816
- onOpenChange: (_, data) => setIsPreviewOpen(data.open),
12817
- children: /* @__PURE__ */ jsxRuntime.jsx(
12818
- reactComponents.DialogSurface,
12819
- {
12820
- style: {
12821
- maxWidth: "90vw",
12822
- maxHeight: "90vh",
12823
- backgroundColor: "transparent",
12824
- boxShadow: "none"
12825
- },
12826
- children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogBody, { children: [
12827
- /* @__PURE__ */ jsxRuntime.jsx(
12828
- reactComponents.DialogTitle,
12829
- {
12830
- action: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogTrigger, { action: "close", children: /* @__PURE__ */ jsxRuntime.jsx(
12831
- reactComponents.Button,
12832
- {
12833
- "aria-label": "close",
12834
- icon: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.Dismiss24Regular, {}),
12835
- style: {
12836
- backgroundColor: reactComponents.tokens.colorNeutralForeground2,
12837
- color: reactComponents.tokens.colorNeutralBackground1
12838
- }
12839
- }
12840
- ) })
12841
- }
12842
- ),
12843
- /* @__PURE__ */ jsxRuntime.jsx(
12844
- reactComponents.DialogContent,
12845
- {
12846
- style: { alignItems: "center", textAlign: "center" },
12847
- children: previewUrl && /* @__PURE__ */ jsxRuntime.jsx(
12848
- "img",
12849
- {
12850
- src: previewUrl,
12851
- alt: "Preview",
12852
- className: styles.dialogImage
12853
- }
12854
- )
12855
- }
12856
- )
12857
- ] })
12858
- }
12859
- )
12860
- }
12861
- )
13165
+ /* @__PURE__ */ jsxRuntime.jsx(ModalPreviewImage, { imageUrl: previewUrl, open: isPreviewOpen, onOpenChange: setIsPreviewOpen })
12862
13166
  ]
12863
13167
  }
12864
13168
  );
@@ -13055,57 +13359,7 @@ var FileUpload = React5__default.default.forwardRef(
13055
13359
  ]
13056
13360
  }
13057
13361
  ),
13058
- /* @__PURE__ */ jsxRuntime.jsx(
13059
- reactComponents.Dialog,
13060
- {
13061
- open: isPreviewOpen,
13062
- onOpenChange: (_, data) => setIsPreviewOpen(data.open),
13063
- children: /* @__PURE__ */ jsxRuntime.jsx(
13064
- reactComponents.DialogSurface,
13065
- {
13066
- style: {
13067
- maxWidth: "90vw",
13068
- maxHeight: "90vh",
13069
- backgroundColor: "transparent",
13070
- boxShadow: "none"
13071
- },
13072
- children: /* @__PURE__ */ jsxRuntime.jsxs(reactComponents.DialogBody, { children: [
13073
- /* @__PURE__ */ jsxRuntime.jsx(
13074
- reactComponents.DialogTitle,
13075
- {
13076
- action: /* @__PURE__ */ jsxRuntime.jsx(reactComponents.DialogTrigger, { action: "close", children: /* @__PURE__ */ jsxRuntime.jsx(
13077
- reactComponents.Button,
13078
- {
13079
- appearance: "subtle",
13080
- "aria-label": "close",
13081
- icon: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.Dismiss24Regular, {}),
13082
- style: {
13083
- backgroundColor: reactComponents.tokens.colorNeutralForeground2,
13084
- color: reactComponents.tokens.colorNeutralBackground1
13085
- }
13086
- }
13087
- ) })
13088
- }
13089
- ),
13090
- /* @__PURE__ */ jsxRuntime.jsx(
13091
- reactComponents.DialogContent,
13092
- {
13093
- style: { alignItems: "center", textAlign: "center" },
13094
- children: previewUrl && /* @__PURE__ */ jsxRuntime.jsx(
13095
- "img",
13096
- {
13097
- src: previewUrl,
13098
- alt: "Preview",
13099
- className: styles.dialogImage
13100
- }
13101
- )
13102
- }
13103
- )
13104
- ] })
13105
- }
13106
- )
13107
- }
13108
- )
13362
+ /* @__PURE__ */ jsxRuntime.jsx(ModalPreviewImage, { imageUrl: previewUrl, open: isPreviewOpen, onOpenChange: setIsPreviewOpen })
13109
13363
  ]
13110
13364
  }
13111
13365
  );
@@ -13122,7 +13376,7 @@ var DEFAULT_LABELS39 = {
13122
13376
  id: {},
13123
13377
  en: {}
13124
13378
  };
13125
- var useStyles39 = reactComponents.makeStyles({
13379
+ var useStyles40 = reactComponents.makeStyles({
13126
13380
  container: {
13127
13381
  display: "flex",
13128
13382
  flexDirection: "column",
@@ -13162,12 +13416,14 @@ var useStyles39 = reactComponents.makeStyles({
13162
13416
  backgroundColor: reactComponents.tokens.colorBrandBackground2,
13163
13417
  color: reactComponents.tokens.colorBrandForeground1
13164
13418
  },
13165
- justifyContent: "flex-start"
13419
+ justifyContent: "flex-start",
13420
+ textAlign: "left"
13166
13421
  },
13167
13422
  tabItemLogout: {
13168
13423
  color: reactComponents.tokens.colorPaletteRedForeground1,
13169
13424
  backgroundColor: "transparent",
13170
13425
  justifyContent: "flex-start",
13426
+ textAlign: "left",
13171
13427
  "&:hover": {
13172
13428
  color: reactComponents.tokens.colorPaletteRedForeground1
13173
13429
  }
@@ -13180,7 +13436,7 @@ var CardProfileMenu = ({
13180
13436
  selectedValue,
13181
13437
  onTabSelect
13182
13438
  }) => {
13183
- const styles = useStyles39();
13439
+ const styles = useStyles40();
13184
13440
  ({ ...DEFAULT_LABELS39[language], ...labels });
13185
13441
  const handleTabSelect = (_, data) => {
13186
13442
  onTabSelect(data.value);
@@ -13210,6 +13466,9 @@ var CardProfileMenu = ({
13210
13466
  ) });
13211
13467
  };
13212
13468
 
13469
+ exports.API_CONFIG = API_CONFIG;
13470
+ exports.API_ENDPOINTS = API_ENDPOINTS;
13471
+ exports.API_ERROR_MESSAGES = API_ERROR_MESSAGES;
13213
13472
  exports.BackgroundTicketCard = BackgroundTicketCard_default;
13214
13473
  exports.BackgroundTicketCardVertical = BackgroundTicketCardVertical_default;
13215
13474
  exports.COUNTRIES = COUNTRIES;
@@ -13248,13 +13507,18 @@ exports.DEFAULT_VEHICLE_ICONS = DEFAULT_VEHICLE_ICONS;
13248
13507
  exports.DateFilter = DateFilter;
13249
13508
  exports.DateFilterDefaultLabels = DEFAULT_LABELS17;
13250
13509
  exports.FileUpload = FileUpload_default;
13510
+ exports.GENDER = GENDER;
13511
+ exports.HTTP_STATUS = HTTP_STATUS;
13512
+ exports.IDENTITY_TYPE = IDENTITY_TYPE;
13251
13513
  exports.InputDynamic = InputDynamic_default;
13514
+ exports.LOAD_TYPE = LOAD_TYPE;
13252
13515
  exports.MODAL_PRESETS = MODAL_PRESETS;
13253
13516
  exports.ModalFilterTicket = ModalFilterTicket;
13254
13517
  exports.ModalFilterTicketDefaultLabels = DEFAULT_LABELS16;
13255
13518
  exports.ModalIllustration = ModalIllustration;
13256
13519
  exports.ModalListPassenger = ModalListPassenger;
13257
13520
  exports.ModalPassengerForm = ModalPassengerForm;
13521
+ exports.ModalPreviewImage = ModalPreviewImage;
13258
13522
  exports.ModalPriceDetail = ModalPriceDetail;
13259
13523
  exports.ModalSearchHarbor = ModalSearchHarbor;
13260
13524
  exports.ModalSearchTicket = ModalSearchTicket;
@@ -13262,6 +13526,7 @@ exports.ModalSelectDate = ModalSelectDate;
13262
13526
  exports.ModalService = ModalService;
13263
13527
  exports.ModalTotalPassengers = ModalTotalPassengers;
13264
13528
  exports.ModalTypeOfService = ModalTypeOfService;
13529
+ exports.PASSENGER_TYPE = PASSENGER_TYPE;
13265
13530
  exports.SortMenu = SortMenu;
13266
13531
  exports.Stepper = Stepper;
13267
13532
  exports.getBadgeConfig = getBadgeConfig;