kaafil-react-uikit 0.4.0 → 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.
- package/CHANGELOG.md +33 -2
- package/dist/admin/index.cjs +355 -353
- package/dist/admin/index.cjs.map +1 -1
- package/dist/admin/index.js +16 -14
- package/dist/admin/index.js.map +1 -1
- package/dist/{chunk-WPQB7JWS.js → chunk-3E2FN5JJ.js} +3 -3
- package/dist/{chunk-WPQB7JWS.js.map → chunk-3E2FN5JJ.js.map} +1 -1
- package/dist/{chunk-2XW5EIMS.cjs → chunk-3RZDHDEY.cjs} +17 -17
- package/dist/{chunk-2XW5EIMS.cjs.map → chunk-3RZDHDEY.cjs.map} +1 -1
- package/dist/chunk-62HCQWZL.cjs +12 -0
- package/dist/chunk-62HCQWZL.cjs.map +1 -0
- package/dist/{chunk-7G6IENKN.js → chunk-6FUVFVYY.js} +99 -6
- package/dist/chunk-6FUVFVYY.js.map +1 -0
- package/dist/{chunk-E6ER25BG.js → chunk-762SWUEG.js} +3 -3
- package/dist/{chunk-E6ER25BG.js.map → chunk-762SWUEG.js.map} +1 -1
- package/dist/{chunk-3N2EQ2KC.cjs → chunk-CK3L6Y43.cjs} +100 -4
- package/dist/chunk-CK3L6Y43.cjs.map +1 -0
- package/dist/{chunk-A7C74SJT.cjs → chunk-DI77H7ED.cjs} +83 -83
- package/dist/{chunk-A7C74SJT.cjs.map → chunk-DI77H7ED.cjs.map} +1 -1
- package/dist/{chunk-3BEQYIFU.js → chunk-EDLIJSMR.js} +5 -5
- package/dist/{chunk-3BEQYIFU.js.map → chunk-EDLIJSMR.js.map} +1 -1
- package/dist/{chunk-RBIEMGHT.js → chunk-ITGVRN2S.js} +3 -3
- package/dist/{chunk-RBIEMGHT.js.map → chunk-ITGVRN2S.js.map} +1 -1
- package/dist/{chunk-6BY2NPBZ.cjs → chunk-LO3GQFQ6.cjs} +4 -4
- package/dist/{chunk-6BY2NPBZ.cjs.map → chunk-LO3GQFQ6.cjs.map} +1 -1
- package/dist/{chunk-7356B6YS.cjs → chunk-QD4Z5DRT.cjs} +12 -12
- package/dist/{chunk-7356B6YS.cjs.map → chunk-QD4Z5DRT.cjs.map} +1 -1
- package/dist/{chunk-2LMFSKZU.js → chunk-QMUIZHJO.js} +510 -16
- package/dist/chunk-QMUIZHJO.js.map +1 -0
- package/dist/{chunk-KTEXDGAA.js → chunk-RW6TJMRK.js} +3 -3
- package/dist/{chunk-KTEXDGAA.js.map → chunk-RW6TJMRK.js.map} +1 -1
- package/dist/{chunk-XBLAVNP3.cjs → chunk-V6UQ6GIM.cjs} +551 -48
- package/dist/chunk-V6UQ6GIM.cjs.map +1 -0
- package/dist/chunk-XU7GP53M.js +10 -0
- package/dist/chunk-XU7GP53M.js.map +1 -0
- package/dist/{chunk-KETEED2T.cjs → chunk-XYIOM75D.cjs} +9 -9
- package/dist/{chunk-KETEED2T.cjs.map → chunk-XYIOM75D.cjs.map} +1 -1
- package/dist/core/index.cjs +153 -613
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +36 -1
- package/dist/core/index.d.ts +36 -1
- package/dist/core/index.js +21 -511
- package/dist/core/index.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/manager/index.cjs +239 -239
- package/dist/manager/index.js +6 -6
- package/dist/traveller/index.cjs +35 -35
- package/dist/traveller/index.js +5 -5
- package/package.json +1 -1
- package/dist/chunk-2LMFSKZU.js.map +0 -1
- package/dist/chunk-3N2EQ2KC.cjs.map +0 -1
- package/dist/chunk-4QYI7TOF.cjs +0 -110
- package/dist/chunk-4QYI7TOF.cjs.map +0 -1
- package/dist/chunk-7G6IENKN.js.map +0 -1
- package/dist/chunk-CLHAJBJS.js +0 -105
- package/dist/chunk-CLHAJBJS.js.map +0 -1
- package/dist/chunk-XBLAVNP3.cjs.map +0 -1
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
295
|
-
const [
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
405
|
+
var useBookingsInternal = chunkDI77H7ED_cjs.createDomainHook("bookings", (tripRef) => {
|
|
404
406
|
const {
|
|
405
407
|
rows: bookings,
|
|
406
408
|
syncedAt,
|
|
407
409
|
refreshLive
|
|
408
|
-
} =
|
|
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 =
|
|
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 } =
|
|
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,
|
|
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 =
|
|
473
|
-
const serverTime =
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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 = chunk3N2EQ2KC_cjs.useRequiredContext(chunk3N2EQ2KC_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 =
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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 =
|
|
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-
|
|
998
|
-
//# sourceMappingURL=chunk-
|
|
1500
|
+
//# sourceMappingURL=chunk-V6UQ6GIM.cjs.map
|
|
1501
|
+
//# sourceMappingURL=chunk-V6UQ6GIM.cjs.map
|