@arbidocs/react 0.5.52 → 0.5.54

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 (40) hide show
  1. package/README.md +15 -0
  2. package/dist/artifacts/index.cjs +9 -9
  3. package/dist/artifacts/index.js +3 -3
  4. package/dist/calls/livekit/index.cjs +48 -48
  5. package/dist/calls/livekit/index.js +3 -3
  6. package/dist/{chunk-ME4TS33T.cjs → chunk-2JQ7QNOO.cjs} +31 -31
  7. package/dist/{chunk-ME4TS33T.cjs.map → chunk-2JQ7QNOO.cjs.map} +1 -1
  8. package/dist/{chunk-W7DQJT4T.cjs → chunk-3CVY5SGY.cjs} +159 -22
  9. package/dist/chunk-3CVY5SGY.cjs.map +1 -0
  10. package/dist/{chunk-KOLCL4KV.js → chunk-4TKNUJKD.js} +3 -3
  11. package/dist/{chunk-KOLCL4KV.js.map → chunk-4TKNUJKD.js.map} +1 -1
  12. package/dist/{chunk-MB34NKBZ.js → chunk-DFZECLD3.js} +2 -2
  13. package/dist/chunk-DFZECLD3.js.map +1 -0
  14. package/dist/{chunk-MJWUUDYT.js → chunk-JFL7BBZ6.js} +3 -3
  15. package/dist/{chunk-MJWUUDYT.js.map → chunk-JFL7BBZ6.js.map} +1 -1
  16. package/dist/{chunk-BIHGAW4G.js → chunk-PVUZULHI.js} +3 -3
  17. package/dist/{chunk-BIHGAW4G.js.map → chunk-PVUZULHI.js.map} +1 -1
  18. package/dist/{chunk-GAW2PLSL.cjs → chunk-UKEUDTOE.cjs} +16 -16
  19. package/dist/{chunk-GAW2PLSL.cjs.map → chunk-UKEUDTOE.cjs.map} +1 -1
  20. package/dist/{chunk-ONGNP4JM.cjs → chunk-V64EETLS.cjs} +4 -4
  21. package/dist/{chunk-ONGNP4JM.cjs.map → chunk-V64EETLS.cjs.map} +1 -1
  22. package/dist/{chunk-JQSHGBNI.js → chunk-WRMA2JYX.js} +139 -8
  23. package/dist/chunk-WRMA2JYX.js.map +1 -0
  24. package/dist/{chunk-YIUUTRMQ.cjs → chunk-YRY6DGRU.cjs} +2 -2
  25. package/dist/chunk-YRY6DGRU.cjs.map +1 -0
  26. package/dist/document-tools/index.cjs +41 -41
  27. package/dist/document-tools/index.js +3 -3
  28. package/dist/index.cjs +770 -780
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.d.cts +204 -126
  31. package/dist/index.d.ts +204 -126
  32. package/dist/index.js +11 -43
  33. package/dist/index.js.map +1 -1
  34. package/dist/viewers/index.cjs +2 -2
  35. package/dist/viewers/index.js +1 -1
  36. package/package.json +3 -3
  37. package/dist/chunk-JQSHGBNI.js.map +0 -1
  38. package/dist/chunk-MB34NKBZ.js.map +0 -1
  39. package/dist/chunk-W7DQJT4T.cjs.map +0 -1
  40. package/dist/chunk-YIUUTRMQ.cjs.map +0 -1
@@ -1,15 +1,146 @@
1
1
  'use strict';
2
2
 
3
- var chunkME4TS33T_cjs = require('./chunk-ME4TS33T.cjs');
3
+ var chunk2JQ7QNOO_cjs = require('./chunk-2JQ7QNOO.cjs');
4
4
  var chunkRRWAX52L_cjs = require('./chunk-RRWAX52L.cjs');
5
5
  var chunkVAMPYLQ4_cjs = require('./chunk-VAMPYLQ4.cjs');
6
6
  var chunkEEIYXVM4_cjs = require('./chunk-EEIYXVM4.cjs');
7
- var chunkYIUUTRMQ_cjs = require('./chunk-YIUUTRMQ.cjs');
8
- var browser = require('@arbidocs/sdk/browser');
9
- var react = require('react');
7
+ var chunkYRY6DGRU_cjs = require('./chunk-YRY6DGRU.cjs');
10
8
  var reactQuery = require('@tanstack/react-query');
9
+ var react = require('react');
10
+ var browser = require('@arbidocs/sdk/browser');
11
11
  var client = require('@arbidocs/client');
12
12
 
13
+ function useUserSettings(options) {
14
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
15
+ return reactQuery.useQuery({
16
+ queryKey: chunkRRWAX52L_cjs.arbiQueryKeys.userSettings(),
17
+ queryFn: () => arbi.settings.get(),
18
+ // Edited about once a month, and every write here patches the cache: no refetch on each mount.
19
+ staleTime: 30 * 60 * 1e3,
20
+ enabled: (options?.enabled ?? true) && arbi.isLoggedIn
21
+ });
22
+ }
23
+ function useUpdateUserSettings() {
24
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
25
+ const qc = reactQuery.useQueryClient();
26
+ return reactQuery.useMutation({
27
+ mutationFn: (patch) => arbi.settings.update(patch),
28
+ onMutate: async (patch) => {
29
+ await qc.cancelQueries({ queryKey: chunkRRWAX52L_cjs.arbiQueryKeys.userSettings() });
30
+ const previous = qc.getQueryData(chunkRRWAX52L_cjs.arbiQueryKeys.userSettings());
31
+ qc.setQueryData(
32
+ chunkRRWAX52L_cjs.arbiQueryKeys.userSettings(),
33
+ (old) => old ? { ...old, ...patch } : old
34
+ );
35
+ return { previous };
36
+ },
37
+ onError: (_err, _patch, context) => {
38
+ qc.setQueryData(chunkRRWAX52L_cjs.arbiQueryKeys.userSettings(), context?.previous);
39
+ },
40
+ onSettled: () => qc.invalidateQueries({ queryKey: chunkRRWAX52L_cjs.arbiQueryKeys.userSettings() })
41
+ });
42
+ }
43
+ var ALWAYS_ON = { on: true, set: () => {
44
+ } };
45
+ function useUnlisted() {
46
+ return ALWAYS_ON;
47
+ }
48
+ function useUserSettingSwitch(source) {
49
+ const { userSetting, default: fallback } = source;
50
+ const { data } = useUserSettings();
51
+ const { mutate } = useUpdateUserSettings();
52
+ const saved = data?.[userSetting];
53
+ const set = react.useCallback((on) => mutate({ [userSetting]: on }), [mutate, userSetting]);
54
+ return { on: saved ?? fallback, set };
55
+ }
56
+ function useLocalSwitch(source, feature) {
57
+ const { local, default: fallback } = source;
58
+ const saved = react.useSyncExternalStore(local.subscribe, () => local.get(feature));
59
+ const set = react.useCallback((on) => local.set(feature, on), [local, feature]);
60
+ return { on: saved ?? fallback, set };
61
+ }
62
+ function useFeatureSwitch(feature) {
63
+ const source = chunkYRY6DGRU_cjs.useArbiHost().features?.[feature];
64
+ const useSource = !source ? useUnlisted : "userSetting" in source ? useUserSettingSwitch : useLocalSwitch;
65
+ return useSource(source, feature);
66
+ }
67
+ function useFeature(feature) {
68
+ return useFeatureSwitch(feature).on;
69
+ }
70
+ function readLocalFeature(features, feature) {
71
+ const source = features[feature];
72
+ if (!source) return true;
73
+ if ("local" in source) return source.local.get(feature) ?? source.default;
74
+ return source.default;
75
+ }
76
+ function defaultStorage() {
77
+ try {
78
+ return typeof localStorage === "undefined" ? null : localStorage;
79
+ } catch {
80
+ return null;
81
+ }
82
+ }
83
+ function parseValues(raw) {
84
+ if (raw === null) return null;
85
+ try {
86
+ const parsed = JSON.parse(raw);
87
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return {};
88
+ return Object.fromEntries(
89
+ Object.entries(parsed).filter(([, value]) => typeof value === "boolean")
90
+ );
91
+ } catch {
92
+ return {};
93
+ }
94
+ }
95
+ function createLocalFeatureStore({
96
+ key,
97
+ storage = defaultStorage(),
98
+ migrate
99
+ }) {
100
+ const listeners3 = /* @__PURE__ */ new Set();
101
+ const read = () => {
102
+ try {
103
+ return storage?.getItem(key) ?? null;
104
+ } catch {
105
+ return null;
106
+ }
107
+ };
108
+ const write = () => {
109
+ try {
110
+ storage?.setItem(key, JSON.stringify(values));
111
+ } catch {
112
+ }
113
+ };
114
+ const notify2 = () => listeners3.forEach((listener) => listener());
115
+ const saved = parseValues(read());
116
+ let values = saved ?? {};
117
+ let hydrated = saved !== null || !migrate;
118
+ const ready = hydrated ? Promise.resolve() : migrate().catch((error) => {
119
+ console.warn(`[features] The saved ${key} could not be brought in`, error);
120
+ return null;
121
+ }).then((earlier) => {
122
+ values = { ...earlier ?? {}, ...values };
123
+ write();
124
+ hydrated = true;
125
+ notify2();
126
+ });
127
+ return {
128
+ get: (feature) => values[feature],
129
+ set(feature, on) {
130
+ if (values[feature] === on) return;
131
+ values = { ...values, [feature]: on };
132
+ write();
133
+ notify2();
134
+ },
135
+ subscribe(listener) {
136
+ listeners3.add(listener);
137
+ return () => listeners3.delete(listener);
138
+ },
139
+ isHydrated: () => hydrated,
140
+ hydrated: () => ready
141
+ };
142
+ }
143
+
13
144
  // src/conversation-list.ts
14
145
  function isConversationListKey(queryKey) {
15
146
  return queryKey.length === 3 && queryKey[0] === "arbi" && queryKey[1] === "conversations";
@@ -675,7 +806,7 @@ function arbiAccountClient(arbi, overrides = {}) {
675
806
  if (everywhere) await arbi.sessions.logoutAll();
676
807
  else await arbi.logout();
677
808
  } finally {
678
- chunkME4TS33T_cjs.clearSealedDrafts();
809
+ chunk2JQ7QNOO_cjs.clearSealedDrafts();
679
810
  }
680
811
  },
681
812
  requestDeletion: () => arbi.account.requestDeletion(),
@@ -719,7 +850,7 @@ var NO_ACCOUNT = {
719
850
  };
720
851
  var ALWAYS = () => true;
721
852
  function useAccountClient() {
722
- const { account, arbi } = chunkYIUUTRMQ_cjs.useArbiHost();
853
+ const { account, arbi } = chunkYRY6DGRU_cjs.useArbiHost();
723
854
  const fallback = react.useMemo(() => arbi ? arbiAccountClient(arbi) : null, [arbi]);
724
855
  const useEnabled = account?.useEnabled ?? ALWAYS;
725
856
  const enabled = useEnabled();
@@ -730,7 +861,7 @@ function useAccountClient() {
730
861
  return { client: fallback, enabled: arbi.isLoggedIn };
731
862
  }
732
863
  function useEntitlements() {
733
- const arbi = chunkYIUUTRMQ_cjs.useArbi();
864
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
734
865
  return reactQuery.useQuery({
735
866
  queryKey: chunkRRWAX52L_cjs.arbiQueryKeys.entitlements(),
736
867
  queryFn: () => arbi.account.entitlements(),
@@ -1867,7 +1998,7 @@ async function transcribeRecording(params) {
1867
1998
  return { stored, failed };
1868
1999
  }
1869
2000
  function useCallsConfig() {
1870
- const arbi = chunkYIUUTRMQ_cjs.useArbi();
2001
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
1871
2002
  const { data } = reactQuery.useQuery({
1872
2003
  queryKey: chunkRRWAX52L_cjs.callQueryKeys.config(),
1873
2004
  queryFn: () => arbi.calls.config(),
@@ -1887,7 +2018,7 @@ function useCallTranscriptionAvailable() {
1887
2018
  return useCallsConfig()?.transcription_available === true;
1888
2019
  }
1889
2020
  function useCall(callExtId) {
1890
- const arbi = chunkYIUUTRMQ_cjs.useArbi();
2021
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
1891
2022
  return reactQuery.useQuery({
1892
2023
  queryKey: chunkRRWAX52L_cjs.callQueryKeys.call(callExtId ?? ""),
1893
2024
  queryFn: () => arbi.calls.get(callExtId),
@@ -1897,7 +2028,7 @@ function useCall(callExtId) {
1897
2028
  });
1898
2029
  }
1899
2030
  function useCallRecordings(callExtId, enabled = true) {
1900
- const arbi = chunkYIUUTRMQ_cjs.useArbi();
2031
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
1901
2032
  return reactQuery.useQuery({
1902
2033
  queryKey: chunkRRWAX52L_cjs.callQueryKeys.recordings(callExtId ?? ""),
1903
2034
  queryFn: () => arbi.calls.recording.list(callExtId),
@@ -1906,7 +2037,7 @@ function useCallRecordings(callExtId, enabled = true) {
1906
2037
  });
1907
2038
  }
1908
2039
  function useCallRecording(callExtId, recordingExtId) {
1909
- const arbi = chunkYIUUTRMQ_cjs.useArbi();
2040
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
1910
2041
  return reactQuery.useQuery({
1911
2042
  queryKey: chunkRRWAX52L_cjs.callQueryKeys.recording(callExtId ?? "", recordingExtId ?? ""),
1912
2043
  queryFn: () => arbi.calls.recording.get(callExtId, recordingExtId),
@@ -1920,7 +2051,7 @@ function useRecordingWindows(callExtId, enabled) {
1920
2051
  return react.useMemo(() => data ? recordingWindowsOf(data) : NO_WINDOWS, [data]);
1921
2052
  }
1922
2053
  function useCallInviteLinks(callExtId) {
1923
- const arbi = chunkYIUUTRMQ_cjs.useArbi();
2054
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
1924
2055
  return reactQuery.useQuery({
1925
2056
  queryKey: chunkRRWAX52L_cjs.callQueryKeys.inviteLinks(callExtId ?? ""),
1926
2057
  queryFn: () => arbi.calls.inviteLinks.list(callExtId),
@@ -1929,7 +2060,7 @@ function useCallInviteLinks(callExtId) {
1929
2060
  });
1930
2061
  }
1931
2062
  function useRecordingActions(call) {
1932
- const arbi = chunkYIUUTRMQ_cjs.useArbi();
2063
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
1933
2064
  const queryClient = reactQuery.useQueryClient();
1934
2065
  return react.useMemo(
1935
2066
  () => ({
@@ -1950,7 +2081,7 @@ function useRecordingActions(call) {
1950
2081
  );
1951
2082
  }
1952
2083
  function useRevokeCallInviteLink(callExtId) {
1953
- const arbi = chunkYIUUTRMQ_cjs.useArbi();
2084
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
1954
2085
  const queryClient = reactQuery.useQueryClient();
1955
2086
  return react.useCallback(
1956
2087
  async (inviteExtId) => {
@@ -2012,7 +2143,7 @@ async function saveRecordingFilesToThread(arbi, params) {
2012
2143
  });
2013
2144
  }
2014
2145
  function useSaveToThread() {
2015
- const arbi = chunkYIUUTRMQ_cjs.useArbi();
2146
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
2016
2147
  const queryClient = reactQuery.useQueryClient();
2017
2148
  return react.useMemo(() => {
2018
2149
  const thenRefresh = async (run) => {
@@ -2299,9 +2430,9 @@ function isWorkspaceGuestOf(workspaces, workspaceExtId, me) {
2299
2430
  return workspace?.users?.find((wu) => wu.user.external_id === me)?.role === "guest";
2300
2431
  }
2301
2432
  function useMeetingReadOnly(lockedWorkspaceExtId) {
2302
- const arbi = chunkYIUUTRMQ_cjs.useArbi();
2433
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
2303
2434
  const me = arbi.isLoggedIn ? arbi.user.identity()?.externalId ?? null : null;
2304
- const { data: workspaces } = chunkME4TS33T_cjs.useWorkspaces({
2435
+ const { data: workspaces } = chunk2JQ7QNOO_cjs.useWorkspaces({
2305
2436
  enabled: !!lockedWorkspaceExtId && arbi.isLoggedIn
2306
2437
  });
2307
2438
  return isWorkspaceGuestOf(
@@ -2315,7 +2446,7 @@ function useMeetingReadOnly(lockedWorkspaceExtId) {
2315
2446
  function useCallsEnabled() {
2316
2447
  const serverEnabled = useServerCallsEnabled();
2317
2448
  const experimental = useServerCallsExperimental();
2318
- const switchedOn = chunkYIUUTRMQ_cjs.useArbiHost().calls?.useEnabled?.() ?? true;
2449
+ const switchedOn = useFeature("calls");
2319
2450
  return serverEnabled && (switchedOn || !experimental);
2320
2451
  }
2321
2452
  function useCanHostCalls() {
@@ -2324,9 +2455,9 @@ function useCanHostCalls() {
2324
2455
  return callsEnabled && entitled;
2325
2456
  }
2326
2457
  function useOpenCallMeetingChat() {
2327
- const arbi = chunkYIUUTRMQ_cjs.useArbi();
2458
+ const arbi = chunkYRY6DGRU_cjs.useArbi();
2328
2459
  const queryClient = reactQuery.useQueryClient();
2329
- const open = chunkYIUUTRMQ_cjs.useArbiHost().calls?.openMeetingChat;
2460
+ const open = chunkYRY6DGRU_cjs.useArbiHost().calls?.openMeetingChat;
2330
2461
  return react.useCallback(
2331
2462
  async (target) => {
2332
2463
  try {
@@ -2399,6 +2530,7 @@ exports.clockTime = clockTime;
2399
2530
  exports.compositeFiles = compositeFiles;
2400
2531
  exports.compositeTrack = compositeTrack;
2401
2532
  exports.conversationKeyForCall = conversationKeyForCall;
2533
+ exports.createLocalFeatureStore = createLocalFeatureStore;
2402
2534
  exports.createMutedNotifier = createMutedNotifier;
2403
2535
  exports.createTrackCutter = createTrackCutter;
2404
2536
  exports.cutAtPauses = cutAtPauses;
@@ -2463,6 +2595,7 @@ exports.persistTranscriptSegment = persistTranscriptSegment;
2463
2595
  exports.playheadAt = playheadAt;
2464
2596
  exports.postRecordingDocsToThread = postRecordingDocsToThread;
2465
2597
  exports.postTranscriptToThread = postTranscriptToThread;
2598
+ exports.readLocalFeature = readLocalFeature;
2466
2599
  exports.recordingFiles = recordingFiles;
2467
2600
  exports.recordingWindowsOf = recordingWindowsOf;
2468
2601
  exports.rejoinAsAudience = rejoinAsAudience;
@@ -2516,6 +2649,8 @@ exports.useCallsConfig = useCallsConfig;
2516
2649
  exports.useCallsEnabled = useCallsEnabled;
2517
2650
  exports.useCanHostCalls = useCanHostCalls;
2518
2651
  exports.useEntitlements = useEntitlements;
2652
+ exports.useFeature = useFeature;
2653
+ exports.useFeatureSwitch = useFeatureSwitch;
2519
2654
  exports.useIsEntitled = useIsEntitled;
2520
2655
  exports.useMeetingReadOnly = useMeetingReadOnly;
2521
2656
  exports.useNameEditor = useNameEditor;
@@ -2528,7 +2663,9 @@ exports.useSaveToThread = useSaveToThread;
2528
2663
  exports.useServerCallsEnabled = useServerCallsEnabled;
2529
2664
  exports.useServerCallsExperimental = useServerCallsExperimental;
2530
2665
  exports.useUpdateProfile = useUpdateProfile;
2666
+ exports.useUpdateUserSettings = useUpdateUserSettings;
2667
+ exports.useUserSettings = useUserSettings;
2531
2668
  exports.wrapTrackKey = wrapTrackKey;
2532
2669
  exports.writeSamples = writeSamples;
2533
- //# sourceMappingURL=chunk-W7DQJT4T.cjs.map
2534
- //# sourceMappingURL=chunk-W7DQJT4T.cjs.map
2670
+ //# sourceMappingURL=chunk-3CVY5SGY.cjs.map
2671
+ //# sourceMappingURL=chunk-3CVY5SGY.cjs.map