kaafil-react-uikit 0.4.1 → 0.4.2

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +28 -5
  2. package/dist/admin/index.cjs +355 -353
  3. package/dist/admin/index.cjs.map +1 -1
  4. package/dist/admin/index.js +16 -14
  5. package/dist/admin/index.js.map +1 -1
  6. package/dist/{chunk-EP4VCID7.js → chunk-3E2FN5JJ.js} +3 -3
  7. package/dist/{chunk-EP4VCID7.js.map → chunk-3E2FN5JJ.js.map} +1 -1
  8. package/dist/{chunk-TPBKRXEB.cjs → chunk-3RZDHDEY.cjs} +17 -17
  9. package/dist/{chunk-TPBKRXEB.cjs.map → chunk-3RZDHDEY.cjs.map} +1 -1
  10. package/dist/chunk-62HCQWZL.cjs +12 -0
  11. package/dist/chunk-62HCQWZL.cjs.map +1 -0
  12. package/dist/{chunk-ABWNV4N4.js → chunk-6FUVFVYY.js} +97 -4
  13. package/dist/chunk-6FUVFVYY.js.map +1 -0
  14. package/dist/{chunk-BUE2GJDN.js → chunk-762SWUEG.js} +3 -3
  15. package/dist/{chunk-BUE2GJDN.js.map → chunk-762SWUEG.js.map} +1 -1
  16. package/dist/{chunk-CCJ5XNWY.cjs → chunk-CK3L6Y43.cjs} +98 -2
  17. package/dist/chunk-CK3L6Y43.cjs.map +1 -0
  18. package/dist/{chunk-XBYLSJOS.cjs → chunk-DI77H7ED.cjs} +83 -83
  19. package/dist/{chunk-XBYLSJOS.cjs.map → chunk-DI77H7ED.cjs.map} +1 -1
  20. package/dist/{chunk-5DVTAEQC.js → chunk-EDLIJSMR.js} +5 -5
  21. package/dist/{chunk-5DVTAEQC.js.map → chunk-EDLIJSMR.js.map} +1 -1
  22. package/dist/{chunk-DABF4PUI.js → chunk-ITGVRN2S.js} +3 -3
  23. package/dist/{chunk-DABF4PUI.js.map → chunk-ITGVRN2S.js.map} +1 -1
  24. package/dist/{chunk-DUZG6A22.cjs → chunk-LO3GQFQ6.cjs} +4 -4
  25. package/dist/{chunk-DUZG6A22.cjs.map → chunk-LO3GQFQ6.cjs.map} +1 -1
  26. package/dist/{chunk-4LZXDRAD.cjs → chunk-QD4Z5DRT.cjs} +12 -12
  27. package/dist/{chunk-4LZXDRAD.cjs.map → chunk-QD4Z5DRT.cjs.map} +1 -1
  28. package/dist/{chunk-VAJ4D7EF.js → chunk-QMUIZHJO.js} +510 -16
  29. package/dist/chunk-QMUIZHJO.js.map +1 -0
  30. package/dist/{chunk-TV5QTT44.js → chunk-RW6TJMRK.js} +3 -3
  31. package/dist/{chunk-TV5QTT44.js.map → chunk-RW6TJMRK.js.map} +1 -1
  32. package/dist/{chunk-2D4Y4LOT.cjs → chunk-V6UQ6GIM.cjs} +551 -48
  33. package/dist/chunk-V6UQ6GIM.cjs.map +1 -0
  34. package/dist/chunk-XU7GP53M.js +10 -0
  35. package/dist/chunk-XU7GP53M.js.map +1 -0
  36. package/dist/{chunk-DDSNXKFN.cjs → chunk-XYIOM75D.cjs} +9 -9
  37. package/dist/{chunk-DDSNXKFN.cjs.map → chunk-XYIOM75D.cjs.map} +1 -1
  38. package/dist/core/index.cjs +153 -613
  39. package/dist/core/index.cjs.map +1 -1
  40. package/dist/core/index.d.cts +36 -1
  41. package/dist/core/index.d.ts +36 -1
  42. package/dist/core/index.js +21 -511
  43. package/dist/core/index.js.map +1 -1
  44. package/dist/index.css +1 -1
  45. package/dist/manager/index.cjs +239 -239
  46. package/dist/manager/index.js +6 -6
  47. package/dist/traveller/index.cjs +35 -35
  48. package/dist/traveller/index.js +5 -5
  49. package/package.json +1 -1
  50. package/dist/chunk-2D4Y4LOT.cjs.map +0 -1
  51. package/dist/chunk-2JABR4FF.js +0 -105
  52. package/dist/chunk-2JABR4FF.js.map +0 -1
  53. package/dist/chunk-ABWNV4N4.js.map +0 -1
  54. package/dist/chunk-CCJ5XNWY.cjs.map +0 -1
  55. package/dist/chunk-KDGBJPPZ.cjs +0 -110
  56. package/dist/chunk-KDGBJPPZ.cjs.map +0 -1
  57. package/dist/chunk-VAJ4D7EF.js.map +0 -1
@@ -1,13 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var chunkXBYLSJOS_cjs = require('./chunk-XBYLSJOS.cjs');
4
- var chunkDUZG6A22_cjs = require('./chunk-DUZG6A22.cjs');
5
- var chunkCCJ5XNWY_cjs = require('./chunk-CCJ5XNWY.cjs');
3
+ var chunkDI77H7ED_cjs = require('./chunk-DI77H7ED.cjs');
4
+ var chunkLO3GQFQ6_cjs = require('./chunk-LO3GQFQ6.cjs');
5
+ var chunkCK3L6Y43_cjs = require('./chunk-CK3L6Y43.cjs');
6
6
  var react = require('react');
7
7
  var client = require('kaafil-js/client');
8
+ var reactDom = require('react-dom');
9
+ var jsxRuntime = require('react/jsx-runtime');
8
10
 
9
11
  function useAgencyAdminMe() {
10
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
12
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
11
13
  const [result, setResult] = react.useState({ status: "loading" });
12
14
  react.useEffect(() => {
13
15
  let cancelled = false;
@@ -29,7 +31,7 @@ function useAgencyAdminMe() {
29
31
  return result;
30
32
  }
31
33
  function useAgencyChecklistTemplates() {
32
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
34
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
33
35
  const [templates, setTemplates] = react.useState([]);
34
36
  const [loaded, setLoaded] = react.useState(false);
35
37
  const [lastFetchFailed, setLastFetchFailed] = react.useState(false);
@@ -89,7 +91,7 @@ function useAgencyChecklistTemplates() {
89
91
  };
90
92
  }
91
93
  function useAgencyForms() {
92
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
94
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
93
95
  const [forms, setForms] = react.useState([]);
94
96
  const [loaded, setLoaded] = react.useState(false);
95
97
  const [lastFetchFailed, setLastFetchFailed] = react.useState(false);
@@ -245,7 +247,7 @@ function useAgencyForms() {
245
247
  };
246
248
  }
247
249
  function useAgencyJourneyTriggers() {
248
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
250
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
249
251
  const [triggers, setTriggers] = react.useState([]);
250
252
  const [loaded, setLoaded] = react.useState(false);
251
253
  const [lastFetchFailed, setLastFetchFailed] = react.useState(false);
@@ -273,7 +275,7 @@ function useAgencyJourneyTriggers() {
273
275
  return { triggers, loaded, lastFetchFailed, refresh, patchTrigger };
274
276
  }
275
277
  function useAgencyManagerProfile(managerRef) {
276
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
278
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
277
279
  const [read, setRead] = react.useState(void 0);
278
280
  const [readFailed, setReadFailed] = react.useState(false);
279
281
  const refresh = react.useCallback(async () => {
@@ -291,8 +293,8 @@ function useAgencyManagerProfile(managerRef) {
291
293
  return { read, readFailed, refresh };
292
294
  }
293
295
  function useAgencySettings() {
294
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
295
- const [document, setDocument] = react.useState(void 0);
296
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
297
+ const [document2, setDocument] = react.useState(void 0);
296
298
  const [loaded, setLoaded] = react.useState(false);
297
299
  const [lastFetchFailed, setLastFetchFailed] = react.useState(false);
298
300
  const refresh = react.useCallback(async () => {
@@ -316,10 +318,10 @@ function useAgencySettings() {
316
318
  },
317
319
  [client, refresh]
318
320
  );
319
- return { document, loaded, lastFetchFailed, refresh, patchSettings };
321
+ return { document: document2, loaded, lastFetchFailed, refresh, patchSettings };
320
322
  }
321
323
  function useAgencyTrip(tripRef) {
322
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
324
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
323
325
  const [read, setRead] = react.useState(void 0);
324
326
  const [readFailed, setReadFailed] = react.useState(false);
325
327
  const refresh = react.useCallback(async () => {
@@ -339,7 +341,7 @@ function useAgencyTrip(tripRef) {
339
341
  var DEFAULT_PAGE_LIMIT = 20;
340
342
  var GROUPED_PAGE_LIMIT = 100;
341
343
  function useAgencyTripManifest(tripRef) {
342
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
344
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
343
345
  const [facets, setFacets] = react.useState(void 0);
344
346
  const mountedRef = react.useRef(true);
345
347
  react.useEffect(() => {
@@ -370,7 +372,7 @@ function useAgencyTripManifest(tripRef) {
370
372
  }
371
373
  var DEFAULT_PAGE_LIMIT2 = 20;
372
374
  function useAgencyTrips() {
373
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
375
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
374
376
  const [segmentCounts, setSegmentCounts] = react.useState(
375
377
  void 0
376
378
  );
@@ -400,18 +402,18 @@ function useAgencyTrips() {
400
402
  );
401
403
  return { makeTripsFetch, segmentCounts };
402
404
  }
403
- var useBookingsInternal = chunkXBYLSJOS_cjs.createDomainHook("bookings", (tripRef) => {
405
+ var useBookingsInternal = chunkDI77H7ED_cjs.createDomainHook("bookings", (tripRef) => {
404
406
  const {
405
407
  rows: bookings,
406
408
  syncedAt,
407
409
  refreshLive
408
- } = chunkXBYLSJOS_cjs.useSnapshotList(tripRef, "bookings", {
410
+ } = chunkDI77H7ED_cjs.useSnapshotList(tripRef, "bookings", {
409
411
  live: async (liveClient, ref) => {
410
412
  const response = await liveClient.bookings.list({ tripRef: ref });
411
413
  return { rows: [...response], syncedAt: response.meta.serverTime };
412
414
  }
413
415
  });
414
- const vouchersMutation = chunkCCJ5XNWY_cjs.useOfflineMutation({
416
+ const vouchersMutation = chunkCK3L6Y43_cjs.useOfflineMutation({
415
417
  tripRef,
416
418
  enqueue: (engine, input) => engine.enqueue({
417
419
  tripRef,
@@ -448,10 +450,10 @@ function useBookings(tripRef) {
448
450
  return useBookingsInternal(tripRef);
449
451
  }
450
452
  function useCapabilityStatuses(tripRef) {
451
- const { rows, loaded } = chunkCCJ5XNWY_cjs.useCapabilityRows(tripRef);
453
+ const { rows, loaded } = chunkCK3L6Y43_cjs.useCapabilityRows(tripRef);
452
454
  const statuses = react.useMemo(() => {
453
455
  const map = /* @__PURE__ */ new Map();
454
- for (const row of rows) map.set(row.capability, chunkCCJ5XNWY_cjs.deriveCapabilityTriple(row).status);
456
+ for (const row of rows) map.set(row.capability, chunkCK3L6Y43_cjs.deriveCapabilityTriple(row).status);
455
457
  return map;
456
458
  }, [rows]);
457
459
  return { statuses, loaded };
@@ -469,8 +471,8 @@ var DirectoriesWriteError = class _DirectoriesWriteError extends Error {
469
471
  }
470
472
  };
471
473
  function useDirectories(agencyRef) {
472
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
473
- const serverTime = chunkDUZG6A22_cjs.useServerTime();
474
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
475
+ const serverTime = chunkLO3GQFQ6_cjs.useServerTime();
474
476
  const makeManagersFetch = react.useCallback(
475
477
  (filters) => async (cursor) => {
476
478
  const page = await client.agencies.managers.listPage({
@@ -517,7 +519,7 @@ function useDirectories(agencyRef) {
517
519
  isLead: input.isLead
518
520
  });
519
521
  } catch (error) {
520
- throw new DirectoriesWriteError(chunkXBYLSJOS_cjs.classifyError(error));
522
+ throw new DirectoriesWriteError(chunkDI77H7ED_cjs.classifyError(error));
521
523
  }
522
524
  },
523
525
  [client]
@@ -532,7 +534,7 @@ function useDirectories(agencyRef) {
532
534
  ...input.isLead === void 0 ? {} : { isLead: input.isLead }
533
535
  });
534
536
  } catch (error) {
535
- throw new DirectoriesWriteError(chunkXBYLSJOS_cjs.classifyError(error));
537
+ throw new DirectoriesWriteError(chunkDI77H7ED_cjs.classifyError(error));
536
538
  }
537
539
  },
538
540
  [client]
@@ -545,7 +547,7 @@ function useDirectories(agencyRef) {
545
547
  managerRef: input.managerRef
546
548
  });
547
549
  } catch (error) {
548
- throw new DirectoriesWriteError(chunkXBYLSJOS_cjs.classifyError(error));
550
+ throw new DirectoriesWriteError(chunkDI77H7ED_cjs.classifyError(error));
549
551
  }
550
552
  },
551
553
  [client]
@@ -581,7 +583,7 @@ function useDirectories(agencyRef) {
581
583
  if (error instanceof DirectoriesWriteError) {
582
584
  throw error;
583
585
  }
584
- throw new DirectoriesWriteError(chunkXBYLSJOS_cjs.classifyError(error));
586
+ throw new DirectoriesWriteError(chunkDI77H7ED_cjs.classifyError(error));
585
587
  }
586
588
  },
587
589
  [client, serverTime]
@@ -597,7 +599,7 @@ function useDirectories(agencyRef) {
597
599
  externalTravellerId: input.externalTravellerId
598
600
  });
599
601
  } catch (error) {
600
- throw new DirectoriesWriteError(chunkXBYLSJOS_cjs.classifyError(error));
602
+ throw new DirectoriesWriteError(chunkDI77H7ED_cjs.classifyError(error));
601
603
  }
602
604
  },
603
605
  [client]
@@ -610,7 +612,7 @@ function useDirectories(agencyRef) {
610
612
  travellerRef: input.travellerRef
611
613
  });
612
614
  } catch (error) {
613
- throw new DirectoriesWriteError(chunkXBYLSJOS_cjs.classifyError(error));
615
+ throw new DirectoriesWriteError(chunkDI77H7ED_cjs.classifyError(error));
614
616
  }
615
617
  },
616
618
  [client]
@@ -625,7 +627,7 @@ function useDirectories(agencyRef) {
625
627
  travellerRefs: [...input.travellerRefs]
626
628
  });
627
629
  } catch (error) {
628
- throw new DirectoriesWriteError(chunkXBYLSJOS_cjs.classifyError(error));
630
+ throw new DirectoriesWriteError(chunkDI77H7ED_cjs.classifyError(error));
629
631
  }
630
632
  },
631
633
  [client]
@@ -642,7 +644,7 @@ function useDirectories(agencyRef) {
642
644
  ...input.travellerRefs !== void 0 ? { travellerRefs: [...input.travellerRefs] } : {}
643
645
  });
644
646
  } catch (error) {
645
- throw new DirectoriesWriteError(chunkXBYLSJOS_cjs.classifyError(error));
647
+ throw new DirectoriesWriteError(chunkDI77H7ED_cjs.classifyError(error));
646
648
  }
647
649
  },
648
650
  [client]
@@ -652,7 +654,7 @@ function useDirectories(agencyRef) {
652
654
  try {
653
655
  await client.trips.parties.remove({ tripRef: input.tripRef, partyId: input.partyId });
654
656
  } catch (error) {
655
- throw new DirectoriesWriteError(chunkXBYLSJOS_cjs.classifyError(error));
657
+ throw new DirectoriesWriteError(chunkDI77H7ED_cjs.classifyError(error));
656
658
  }
657
659
  },
658
660
  [client]
@@ -666,7 +668,7 @@ function useDirectories(agencyRef) {
666
668
  body: input.body
667
669
  });
668
670
  } catch (error) {
669
- throw new DirectoriesWriteError(chunkXBYLSJOS_cjs.classifyError(error));
671
+ throw new DirectoriesWriteError(chunkDI77H7ED_cjs.classifyError(error));
670
672
  }
671
673
  },
672
674
  [client]
@@ -713,7 +715,7 @@ function usePaginatedList(fetch, options) {
713
715
  setPageIndex(index);
714
716
  setError(void 0);
715
717
  } catch (caught) {
716
- setError(chunkXBYLSJOS_cjs.classifyError(caught));
718
+ setError(chunkDI77H7ED_cjs.classifyError(caught));
717
719
  setHasNext(false);
718
720
  } finally {
719
721
  setSettled(true);
@@ -744,12 +746,6 @@ function usePaginatedList(fetch, options) {
744
746
  loadPrev
745
747
  };
746
748
  }
747
-
748
- // src/core/hooks/useResolvedSetting.ts
749
- function useResolvedSetting(key) {
750
- const config = chunkCCJ5XNWY_cjs.useRequiredContext(chunkCCJ5XNWY_cjs.ConfigContext, "useResolvedSetting", "ConfigShell");
751
- return config.resolveSetting(key);
752
- }
753
749
  var SHARE_SECTION_KEYS = [
754
750
  "itinerary",
755
751
  "rooming",
@@ -778,7 +774,7 @@ var ShareLinkWriteError = class extends Error {
778
774
  }
779
775
  };
780
776
  function useShareLinks(tripRef, travellerRef) {
781
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
777
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
782
778
  const [links, setLinks] = react.useState(void 0);
783
779
  const [readFailed, setReadFailed] = react.useState(false);
784
780
  const refresh = react.useCallback(async () => {
@@ -809,7 +805,7 @@ function useShareLinks(tripRef, travellerRef) {
809
805
  await refresh();
810
806
  return minted;
811
807
  } catch (error) {
812
- throw new ShareLinkWriteError(chunkXBYLSJOS_cjs.classifyError(error));
808
+ throw new ShareLinkWriteError(chunkDI77H7ED_cjs.classifyError(error));
813
809
  }
814
810
  },
815
811
  [client, tripRef, refresh]
@@ -820,7 +816,7 @@ function useShareLinks(tripRef, travellerRef) {
820
816
  await client.shareTokens.revoke({ id });
821
817
  await refresh();
822
818
  } catch (error) {
823
- throw new ShareLinkWriteError(chunkXBYLSJOS_cjs.classifyError(error));
819
+ throw new ShareLinkWriteError(chunkDI77H7ED_cjs.classifyError(error));
824
820
  }
825
821
  },
826
822
  [client, refresh]
@@ -836,7 +832,7 @@ function useShareLinks(tripRef, travellerRef) {
836
832
  });
837
833
  await refresh();
838
834
  } catch (error) {
839
- throw new ShareLinkWriteError(chunkXBYLSJOS_cjs.classifyError(error));
835
+ throw new ShareLinkWriteError(chunkDI77H7ED_cjs.classifyError(error));
840
836
  }
841
837
  },
842
838
  [client, refresh]
@@ -848,7 +844,7 @@ function useShareLinks(tripRef, travellerRef) {
848
844
  await refresh();
849
845
  return minted;
850
846
  } catch (error) {
851
- throw new ShareLinkWriteError(chunkXBYLSJOS_cjs.classifyError(error));
847
+ throw new ShareLinkWriteError(chunkDI77H7ED_cjs.classifyError(error));
852
848
  }
853
849
  },
854
850
  [client, refresh]
@@ -859,7 +855,7 @@ function useShareLinks(tripRef, travellerRef) {
859
855
  const response = await client.shareTokens.reveal({ id });
860
856
  return response.token;
861
857
  } catch (error) {
862
- throw new ShareLinkWriteError(chunkXBYLSJOS_cjs.classifyError(error));
858
+ throw new ShareLinkWriteError(chunkDI77H7ED_cjs.classifyError(error));
863
859
  }
864
860
  },
865
861
  [client]
@@ -867,7 +863,7 @@ function useShareLinks(tripRef, travellerRef) {
867
863
  return { links, readFailed, refresh, mint, revoke, patch, regenerate, reveal };
868
864
  }
869
865
  function useTravellerFormResponses(tripRef, travellerRef) {
870
- const client = chunkCCJ5XNWY_cjs.useKaafilClient();
866
+ const client = chunkCK3L6Y43_cjs.useKaafilClient();
871
867
  const [responses, setResponses] = react.useState(
872
868
  void 0
873
869
  );
@@ -891,6 +887,504 @@ function useTravellerFormResponses(tripRef, travellerRef) {
891
887
  }, [refresh]);
892
888
  return { responses, readFailed, refresh };
893
889
  }
890
+ var ThemeAttributesContext = react.createContext(null);
891
+ var FAMILY_DEFAULT_FRAME = {
892
+ admin: "desk",
893
+ manager: "field",
894
+ traveller: "document"
895
+ };
896
+ var DESK_MINIMUM_CONTAINER_WIDTH_PX = 640;
897
+ function ShadowIsolationBoundary({
898
+ className,
899
+ children
900
+ }) {
901
+ const hostRef = react.useRef(null);
902
+ const [shadowContainer, setShadowContainer] = react.useState(null);
903
+ react.useEffect(() => {
904
+ const host = hostRef.current;
905
+ if (host === null) {
906
+ return;
907
+ }
908
+ const shadow = host.shadowRoot ?? host.attachShadow({ mode: "open" });
909
+ let container = shadow.querySelector("div[data-kf-shadow-content]");
910
+ if (container === null) {
911
+ container = document.createElement("div");
912
+ container.setAttribute("data-kf-shadow-content", "");
913
+ shadow.appendChild(container);
914
+ }
915
+ setShadowContainer(container);
916
+ }, []);
917
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: hostRef, className, "data-kf-isolation": "shadow", children: shadowContainer !== null ? reactDom.createPortal(children, shadowContainer) : null });
918
+ }
919
+ function useDeskMinimumWidthWarning(rootRef, frame) {
920
+ react.useEffect(() => {
921
+ if (frame !== "desk" || !chunkCK3L6Y43_cjs.isDevelopment() || typeof ResizeObserver === "undefined") {
922
+ return;
923
+ }
924
+ const node = rootRef.current;
925
+ if (node === null) {
926
+ return;
927
+ }
928
+ let warned = false;
929
+ const observer = new ResizeObserver((entries) => {
930
+ const entry = entries[0];
931
+ if (entry === void 0 || warned) {
932
+ return;
933
+ }
934
+ if (entry.contentRect.width < DESK_MINIMUM_CONTAINER_WIDTH_PX) {
935
+ warned = true;
936
+ console.warn(
937
+ `kaafil-react-uikit: the 'desk' frame's .kf-root is narrower than the stated minimum container width (05-theming-and-branding.md \xA74.4). AppShell never auto-swaps frames \u2014 mount the manager family, or pass frame="field" explicitly, for this container.`
938
+ );
939
+ }
940
+ });
941
+ observer.observe(node);
942
+ return () => observer.disconnect();
943
+ }, [rootRef, frame]);
944
+ }
945
+ function useUnfilledConnectivitySlotWarning(frame, connectivitySlot) {
946
+ react.useEffect(() => {
947
+ if (frame === "field" && connectivitySlot === void 0 && chunkCK3L6Y43_cjs.isDevelopment()) {
948
+ console.warn(
949
+ `kaafil-react-uikit: AppShell's "field" frame has no connectivitySlot filled \u2014 the permanently-visible connectivity/sync region this frame reserves is empty (01-app-shell.md, briefing \xA727.2).`
950
+ );
951
+ }
952
+ }, [frame, connectivitySlot]);
953
+ }
954
+ function AppShell({
955
+ frame,
956
+ family,
957
+ isolation = "scoped",
958
+ navSlot,
959
+ actionBarSlot,
960
+ connectivitySlot,
961
+ children,
962
+ style
963
+ }) {
964
+ const themeAttributes = react.useContext(ThemeAttributesContext);
965
+ const rootRef = react.useRef(null);
966
+ const resolvedFrame = frame ?? (family !== void 0 ? FAMILY_DEFAULT_FRAME[family] : "document");
967
+ useDeskMinimumWidthWarning(rootRef, resolvedFrame);
968
+ useUnfilledConnectivitySlotWarning(resolvedFrame, connectivitySlot);
969
+ const dataAttributes = {
970
+ "data-kf-frame": resolvedFrame
971
+ };
972
+ if (family !== void 0) {
973
+ dataAttributes["data-kf-family"] = family;
974
+ }
975
+ if (themeAttributes !== null) {
976
+ dataAttributes["data-kf-theme"] = themeAttributes.theme;
977
+ if (themeAttributes.density !== void 0) {
978
+ dataAttributes["data-kf-density"] = themeAttributes.density;
979
+ }
980
+ }
981
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
982
+ resolvedFrame === "desk" && navSlot !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "kf-app-shell__nav", children: navSlot }) : null,
983
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "kf-app-shell__content", children }),
984
+ resolvedFrame === "field" && actionBarSlot !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "kf-app-shell__action-bar", children: actionBarSlot }) : null,
985
+ resolvedFrame === "field" && connectivitySlot !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "kf-app-shell__connectivity", children: connectivitySlot }) : null,
986
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "kf-app-shell__live-region", role: "status", "aria-live": "polite" })
987
+ ] });
988
+ if (isolation === "shadow") {
989
+ return /* @__PURE__ */ jsxRuntime.jsx(
990
+ "div",
991
+ {
992
+ ref: rootRef,
993
+ className: "kf-root",
994
+ "data-kf-isolation": "shadow",
995
+ ...dataAttributes,
996
+ style: chunkCK3L6Y43_cjs.tokenStyle(style),
997
+ children: /* @__PURE__ */ jsxRuntime.jsx(ShadowIsolationBoundary, { className: "kf-app-shell__shadow-host", children: content })
998
+ }
999
+ );
1000
+ }
1001
+ return /* @__PURE__ */ jsxRuntime.jsx(
1002
+ "div",
1003
+ {
1004
+ ref: rootRef,
1005
+ className: "kf-root",
1006
+ "data-kf-isolation": "scoped",
1007
+ ...dataAttributes,
1008
+ style: chunkCK3L6Y43_cjs.tokenStyle(style),
1009
+ children: content
1010
+ }
1011
+ );
1012
+ }
1013
+ function ConfigShell({ seedConfig = {}, children }) {
1014
+ const value = react.useMemo(
1015
+ () => ({
1016
+ resolveSetting(key) {
1017
+ const agencyValue = seedConfig.agency?.[key];
1018
+ if (agencyValue !== void 0) {
1019
+ return agencyValue;
1020
+ }
1021
+ const tenantValue = seedConfig.tenant?.[key];
1022
+ return tenantValue === void 0 ? void 0 : tenantValue;
1023
+ }
1024
+ }),
1025
+ [seedConfig.agency, seedConfig.tenant]
1026
+ );
1027
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkCK3L6Y43_cjs.ConfigContext.Provider, { value, children });
1028
+ }
1029
+ function classifyForFallback(error) {
1030
+ const classification = chunkDI77H7ED_cjs.classifyError(error);
1031
+ if (classification.code === "RESOURCE_NOT_FOUND") {
1032
+ return { classification: "isolation", code: classification.code };
1033
+ }
1034
+ if (classification.path === "parked" || classification.unsatisfiableScheme) {
1035
+ return { classification: "parked", code: classification.code };
1036
+ }
1037
+ return { classification: "retryable", code: classification.code };
1038
+ }
1039
+ var FALLBACK_STYLE = {
1040
+ fontFamily: "system-ui, sans-serif",
1041
+ padding: "1.5rem",
1042
+ border: "1px solid #999",
1043
+ borderRadius: "4px",
1044
+ color: "#1a1a1a",
1045
+ background: "#fff"
1046
+ };
1047
+ function DefaultFallback({
1048
+ ctx,
1049
+ onRetry
1050
+ }) {
1051
+ const role = ctx.classification === "retryable" ? "status" : "alert";
1052
+ const ariaLive = ctx.classification === "retryable" ? "polite" : "assertive";
1053
+ const message = ctx.classification === "isolation" ? "Not found." : ctx.classification === "parked" ? "This action can't be completed right now." : "Something went wrong.";
1054
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: FALLBACK_STYLE, role, "aria-live": ariaLive, children: [
1055
+ /* @__PURE__ */ jsxRuntime.jsx("p", { style: { margin: 0 }, children: message }),
1056
+ ctx.classification === "retryable" ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: onRetry, style: { marginTop: "0.75rem" }, children: "Try again" }) : null
1057
+ ] });
1058
+ }
1059
+ var ErrorShell = class extends react.Component {
1060
+ state = { caught: null, retryKey: 0 };
1061
+ static getDerivedStateFromError(error) {
1062
+ return { caught: { error } };
1063
+ }
1064
+ handleRetry = () => {
1065
+ this.setState((current) => ({ caught: null, retryKey: current.retryKey + 1 }));
1066
+ };
1067
+ render() {
1068
+ if (this.state.caught !== null) {
1069
+ const ctx = classifyForFallback(this.state.caught.error);
1070
+ if (this.props.fallbackSlot !== void 0) {
1071
+ return this.props.fallbackSlot(ctx);
1072
+ }
1073
+ return /* @__PURE__ */ jsxRuntime.jsx(DefaultFallback, { ctx, onRetry: this.handleRetry });
1074
+ }
1075
+ return /* @__PURE__ */ jsxRuntime.jsx(react.Fragment, { children: this.props.children }, this.state.retryKey);
1076
+ }
1077
+ };
1078
+ var SessionExpiryBridgeContext = react.createContext(void 0);
1079
+ function OfflineShell({
1080
+ storage,
1081
+ blob,
1082
+ conflictResolver,
1083
+ readEntity,
1084
+ scope,
1085
+ children
1086
+ }) {
1087
+ const client = react.useContext(chunkCK3L6Y43_cjs.KaafilClientContext);
1088
+ const persona = chunkCK3L6Y43_cjs.usePersona();
1089
+ const session = chunkCK3L6Y43_cjs.useSession();
1090
+ const reportExpired = react.useContext(SessionExpiryBridgeContext);
1091
+ const [engine, setEngine] = react.useState(null);
1092
+ const engineRef = react.useRef(null);
1093
+ const derivedScope = scope ?? `${persona}:${session.agencyRef ?? "share"}`;
1094
+ react.useEffect(() => {
1095
+ if (session.status !== "authenticated" || client === null) {
1096
+ return;
1097
+ }
1098
+ const newEngine = client.openOffline({
1099
+ storage,
1100
+ scope: derivedScope,
1101
+ ...readEntity !== void 0 ? { readEntity } : {},
1102
+ ...conflictResolver !== void 0 ? { conflictResolver } : {},
1103
+ ...blob !== void 0 ? { blob } : {}
1104
+ // GAP flagged in this phase's report: a share session's local
1105
+ // `expiresAt` enforcement (`OpenOfflineOptions.share`,
1106
+ // `07-offline-and-sync.md §8`) needs an `expiresAt` this shell has no
1107
+ // source for yet — it is not on `useSession()`'s derived shape and no
1108
+ // prop carries it. Omitted here rather than guessed; a share engine
1109
+ // opens without the local expiry/grace/purge enforcement until that
1110
+ // value has a wire source.
1111
+ });
1112
+ engineRef.current = newEngine;
1113
+ let opened = false;
1114
+ let disposed = false;
1115
+ void newEngine.open().then(() => {
1116
+ opened = true;
1117
+ if (disposed) {
1118
+ newEngine.close();
1119
+ return;
1120
+ }
1121
+ if (engineRef.current === newEngine) setEngine(newEngine);
1122
+ }).catch(() => {
1123
+ if (!disposed && engineRef.current === newEngine) setEngine(null);
1124
+ });
1125
+ const unsubscribeSessionExpired = persona !== "share" ? newEngine.events.on("session.expired", () => reportExpired?.("session")) : void 0;
1126
+ const unsubscribeShareExpired = persona === "share" ? newEngine.events.on("share.expired", () => reportExpired?.("share")) : void 0;
1127
+ const unsubscribeShareRevoked = persona === "share" ? newEngine.events.on("share.revoked", () => reportExpired?.("share")) : void 0;
1128
+ return () => {
1129
+ unsubscribeSessionExpired?.();
1130
+ unsubscribeShareExpired?.();
1131
+ unsubscribeShareRevoked?.();
1132
+ disposed = true;
1133
+ if (opened) newEngine.close();
1134
+ if (engineRef.current === newEngine) {
1135
+ engineRef.current = null;
1136
+ }
1137
+ };
1138
+ }, [client, derivedScope, session.status, persona, reportExpired]);
1139
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkCK3L6Y43_cjs.OfflineEngineContext.Provider, { value: engine, children });
1140
+ }
1141
+
1142
+ // src/core/shells/internal/jwtKind.ts
1143
+ function base64UrlDecode(segment) {
1144
+ const padded = segment.replace(/-/g, "+").replace(/_/g, "/");
1145
+ const withPadding = padded + "=".repeat((4 - padded.length % 4) % 4);
1146
+ return atob(withPadding);
1147
+ }
1148
+ function decodeManagerOrAgencyAdminKind(accessToken) {
1149
+ const segments = accessToken.split(".");
1150
+ const payloadSegment = segments[1];
1151
+ if (segments.length !== 3 || payloadSegment === void 0) {
1152
+ throw new Error(
1153
+ 'SessionShell could not parse "accessToken" as a JWT \u2014 it does not have the three dot-separated segments every manager/agencyAdmin session token has.'
1154
+ );
1155
+ }
1156
+ let claim;
1157
+ try {
1158
+ claim = JSON.parse(base64UrlDecode(payloadSegment));
1159
+ } catch {
1160
+ throw new Error(
1161
+ `SessionShell could not decode "accessToken"'s payload segment as JSON \u2014 the value handed to <KaafilUIKitProvider accessToken> is not a well-formed JWT.`
1162
+ );
1163
+ }
1164
+ const kind = claim.kind;
1165
+ if (kind === "agencyAdmin") {
1166
+ return "agencyAdmin";
1167
+ }
1168
+ if (kind === "managerSession" || kind === "manager") {
1169
+ return "managerSession";
1170
+ }
1171
+ throw new Error(
1172
+ `SessionShell read an unrecognised "kind" claim ("${String(kind)}") off "accessToken" \u2014 expected the manager or agencyAdmin session JWT shape (00-decisions.md U-003).`
1173
+ );
1174
+ }
1175
+ async function resolveCredential(props) {
1176
+ if (props.credentialResolver !== void 0) {
1177
+ const resolved = await props.credentialResolver();
1178
+ if ("shareToken" in resolved) {
1179
+ return { kind: "share", shareToken: resolved.shareToken };
1180
+ }
1181
+ const kind2 = decodeManagerOrAgencyAdminKind(resolved.accessToken) === "agencyAdmin" ? "agencyAdmin" : "manager";
1182
+ return { kind: kind2, ...resolved };
1183
+ }
1184
+ if (props.shareToken !== void 0) {
1185
+ return { kind: "share", shareToken: props.shareToken };
1186
+ }
1187
+ const kind = decodeManagerOrAgencyAdminKind(props.accessToken) === "agencyAdmin" ? "agencyAdmin" : "manager";
1188
+ return {
1189
+ kind,
1190
+ accessToken: props.accessToken,
1191
+ refreshToken: props.refreshToken,
1192
+ agencyRef: props.agencyRef
1193
+ };
1194
+ }
1195
+ function SessionShell(props) {
1196
+ const { environment = "live", onRefresh, onSessionExpired, children } = props;
1197
+ const [state, setState] = react.useState(null);
1198
+ const expiredCallbackFiredRef = react.useRef(false);
1199
+ const currentPersonaRef = react.useRef("manager");
1200
+ const reportExpired = react.useCallback(() => {
1201
+ if (expiredCallbackFiredRef.current) {
1202
+ return;
1203
+ }
1204
+ expiredCallbackFiredRef.current = true;
1205
+ onSessionExpired?.(currentPersonaRef.current);
1206
+ setState(
1207
+ (current) => current === null ? current : { ...current, session: { ...current.session, status: "expired" } }
1208
+ );
1209
+ }, [onSessionExpired]);
1210
+ const accessTokenDep = "accessToken" in props ? props.accessToken : void 0;
1211
+ const refreshTokenDep = "refreshToken" in props ? props.refreshToken : void 0;
1212
+ const agencyRefDep = "agencyRef" in props ? props.agencyRef : void 0;
1213
+ const shareTokenDep = "shareToken" in props ? props.shareToken : void 0;
1214
+ react.useEffect(() => {
1215
+ let cancelled = false;
1216
+ const client$1 = new client.KaafilClient({ environment });
1217
+ expiredCallbackFiredRef.current = false;
1218
+ async function open() {
1219
+ const credential = await resolveCredential(props);
1220
+ if (cancelled) {
1221
+ return;
1222
+ }
1223
+ currentPersonaRef.current = credential.kind;
1224
+ if (credential.kind === "share") {
1225
+ client$1.share.open({ token: credential.shareToken });
1226
+ } else if (credential.kind === "agencyAdmin") {
1227
+ client$1.admin.open({
1228
+ accessToken: credential.accessToken,
1229
+ refreshToken: credential.refreshToken,
1230
+ agencyRef: credential.agencyRef,
1231
+ ...onRefresh !== void 0 ? { onRefresh } : {}
1232
+ });
1233
+ } else {
1234
+ client$1.session.open({
1235
+ accessToken: credential.accessToken,
1236
+ refreshToken: credential.refreshToken,
1237
+ agencyRef: credential.agencyRef,
1238
+ ...onRefresh !== void 0 ? { onRefresh } : {}
1239
+ });
1240
+ }
1241
+ setState({
1242
+ client: client$1,
1243
+ session: {
1244
+ status: "authenticated",
1245
+ persona: credential.kind,
1246
+ agencyRef: credential.agencyRef,
1247
+ environment
1248
+ }
1249
+ });
1250
+ }
1251
+ void open();
1252
+ return () => {
1253
+ cancelled = true;
1254
+ client$1.close();
1255
+ };
1256
+ }, [environment, accessTokenDep, refreshTokenDep, agencyRefDep, shareTokenDep]);
1257
+ if (state === null) {
1258
+ return /* @__PURE__ */ jsxRuntime.jsx(SessionExpiryBridgeContext.Provider, { value: reportExpired, children: /* @__PURE__ */ jsxRuntime.jsx(
1259
+ chunkCK3L6Y43_cjs.SessionContext.Provider,
1260
+ {
1261
+ value: { status: "opening", persona: "manager", agencyRef: void 0, environment },
1262
+ children
1263
+ }
1264
+ ) });
1265
+ }
1266
+ return /* @__PURE__ */ jsxRuntime.jsx(SessionExpiryBridgeContext.Provider, { value: reportExpired, children: /* @__PURE__ */ jsxRuntime.jsx(chunkCK3L6Y43_cjs.KaafilClientContext.Provider, { value: state.client, children: /* @__PURE__ */ jsxRuntime.jsx(chunkCK3L6Y43_cjs.SessionContext.Provider, { value: state.session, children }) }) });
1267
+ }
1268
+ function emit(onEvent, event) {
1269
+ if (onEvent === void 0) {
1270
+ return;
1271
+ }
1272
+ try {
1273
+ onEvent(event);
1274
+ } catch {
1275
+ }
1276
+ }
1277
+ function TelemetryShell({ onEvent, children }) {
1278
+ const session = chunkCK3L6Y43_cjs.useSession();
1279
+ const serverTime = chunkLO3GQFQ6_cjs.useServerTime();
1280
+ const previousStatusRef = react.useRef(void 0);
1281
+ react.useEffect(() => {
1282
+ const previousStatus = previousStatusRef.current;
1283
+ if (serverTime.sinceLastSync !== void 0) {
1284
+ if (session.status === "authenticated" && previousStatus !== "authenticated") {
1285
+ emit(onEvent, {
1286
+ type: "session.opened",
1287
+ timestamp: serverTime.now(),
1288
+ persona: session.persona
1289
+ });
1290
+ }
1291
+ if (session.status === "expired" && previousStatus !== "expired") {
1292
+ emit(onEvent, {
1293
+ type: "session.expired",
1294
+ timestamp: serverTime.now(),
1295
+ persona: session.persona
1296
+ });
1297
+ }
1298
+ }
1299
+ previousStatusRef.current = session.status;
1300
+ }, [session.status, serverTime.sinceLastSync]);
1301
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
1302
+ }
1303
+ function resolveSystemTheme() {
1304
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
1305
+ return "light";
1306
+ }
1307
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
1308
+ }
1309
+ function ThemeShell({ theme = "system", density, children }) {
1310
+ const [systemTheme, setSystemTheme] = react.useState(
1311
+ () => theme === "system" ? resolveSystemTheme() : theme
1312
+ );
1313
+ react.useEffect(() => {
1314
+ if (theme !== "system" || typeof window === "undefined" || typeof window.matchMedia !== "function") {
1315
+ return;
1316
+ }
1317
+ const query = window.matchMedia("(prefers-color-scheme: dark)");
1318
+ const listener = (event) => {
1319
+ setSystemTheme(event.matches ? "dark" : "light");
1320
+ };
1321
+ query.addEventListener("change", listener);
1322
+ return () => query.removeEventListener("change", listener);
1323
+ }, [theme]);
1324
+ const resolvedTheme = theme === "system" ? systemTheme : theme;
1325
+ const value = react.useMemo(() => ({ theme: resolvedTheme, density }), [resolvedTheme, density]);
1326
+ return /* @__PURE__ */ jsxRuntime.jsx(ThemeAttributesContext.Provider, { value, children });
1327
+ }
1328
+ var DefaultCapabilityViewsContext = react.createContext({});
1329
+ function useDefaultCapabilityViews() {
1330
+ return react.useContext(DefaultCapabilityViewsContext);
1331
+ }
1332
+ var BuildShareUrlContext = react.createContext(null);
1333
+ function useBuildShareUrl() {
1334
+ return react.useContext(BuildShareUrlContext);
1335
+ }
1336
+ function KaafilUIKitProvider(props) {
1337
+ const {
1338
+ environment,
1339
+ onSessionExpired,
1340
+ density,
1341
+ theme,
1342
+ brand,
1343
+ locale,
1344
+ isolation,
1345
+ onEvent,
1346
+ storage,
1347
+ blob,
1348
+ conflictResolver,
1349
+ readEntity,
1350
+ offlineScope,
1351
+ seedConfig,
1352
+ defaultCapabilityViews,
1353
+ buildShareUrl,
1354
+ children,
1355
+ ...credential
1356
+ } = props;
1357
+ const inner = /* @__PURE__ */ jsxRuntime.jsx(BuildShareUrlContext.Provider, { value: buildShareUrl ?? null, children: /* @__PURE__ */ jsxRuntime.jsx(DefaultCapabilityViewsContext.Provider, { value: defaultCapabilityViews ?? {}, children: /* @__PURE__ */ jsxRuntime.jsx(ConfigShell, { seedConfig, children: /* @__PURE__ */ jsxRuntime.jsx(
1358
+ chunkCK3L6Y43_cjs.BrandShell,
1359
+ {
1360
+ appName: brand?.appName,
1361
+ logo: brand?.logo,
1362
+ logoMark: brand?.logoMark,
1363
+ favicon: brand?.favicon,
1364
+ headStrategy: brand?.headStrategy,
1365
+ children: /* @__PURE__ */ jsxRuntime.jsx(TelemetryShell, { onEvent, children })
1366
+ }
1367
+ ) }) }) });
1368
+ return /* @__PURE__ */ jsxRuntime.jsx(ErrorShell, { children: /* @__PURE__ */ jsxRuntime.jsx(ThemeShell, { theme, density, children: /* @__PURE__ */ jsxRuntime.jsx(chunkCK3L6Y43_cjs.I18nShell, { locale, children: /* @__PURE__ */ jsxRuntime.jsx(AppShell, { isolation, children: /* @__PURE__ */ jsxRuntime.jsx(
1369
+ SessionShell,
1370
+ {
1371
+ ...credential,
1372
+ environment,
1373
+ onSessionExpired,
1374
+ children: storage !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
1375
+ OfflineShell,
1376
+ {
1377
+ storage,
1378
+ blob,
1379
+ conflictResolver,
1380
+ readEntity,
1381
+ scope: offlineScope,
1382
+ children: inner
1383
+ }
1384
+ ) : inner
1385
+ }
1386
+ ) }) }) }) });
1387
+ }
894
1388
 
895
1389
  // src/core/routing/deepLinks.ts
896
1390
  var CLOSEOUT_ACTION_TAB = {
@@ -972,7 +1466,15 @@ var TRIP_TAB_KEY_SET = {
972
1466
  forms: true
973
1467
  };
974
1468
 
1469
+ exports.AppShell = AppShell;
975
1470
  exports.CLOSEOUT_ACTION_TAB = CLOSEOUT_ACTION_TAB;
1471
+ exports.ConfigShell = ConfigShell;
1472
+ exports.ErrorShell = ErrorShell;
1473
+ exports.KaafilUIKitProvider = KaafilUIKitProvider;
1474
+ exports.OfflineShell = OfflineShell;
1475
+ exports.SessionShell = SessionShell;
1476
+ exports.TelemetryShell = TelemetryShell;
1477
+ exports.ThemeShell = ThemeShell;
976
1478
  exports.familySafeSections = familySafeSections;
977
1479
  exports.fromSearchParams = fromSearchParams;
978
1480
  exports.isTripTabKey = isTripTabKey;
@@ -988,11 +1490,12 @@ exports.useAgencyTrip = useAgencyTrip;
988
1490
  exports.useAgencyTripManifest = useAgencyTripManifest;
989
1491
  exports.useAgencyTrips = useAgencyTrips;
990
1492
  exports.useBookings = useBookings;
1493
+ exports.useBuildShareUrl = useBuildShareUrl;
991
1494
  exports.useCapabilityStatuses = useCapabilityStatuses;
1495
+ exports.useDefaultCapabilityViews = useDefaultCapabilityViews;
992
1496
  exports.useDirectories = useDirectories;
993
1497
  exports.usePaginatedList = usePaginatedList;
994
- exports.useResolvedSetting = useResolvedSetting;
995
1498
  exports.useShareLinks = useShareLinks;
996
1499
  exports.useTravellerFormResponses = useTravellerFormResponses;
997
- //# sourceMappingURL=chunk-2D4Y4LOT.cjs.map
998
- //# sourceMappingURL=chunk-2D4Y4LOT.cjs.map
1500
+ //# sourceMappingURL=chunk-V6UQ6GIM.cjs.map
1501
+ //# sourceMappingURL=chunk-V6UQ6GIM.cjs.map