@oxy.so/services 13.1.0 → 13.3.0

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 (81) hide show
  1. package/lib/commonjs/ui/client.js +13 -0
  2. package/lib/commonjs/ui/client.js.map +1 -1
  3. package/lib/commonjs/ui/context/OxyContext.js +17 -15
  4. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  5. package/lib/commonjs/ui/hooks/accountQueryPersistence.js +50 -15
  6. package/lib/commonjs/ui/hooks/accountQueryPersistence.js.map +1 -1
  7. package/lib/commonjs/ui/hooks/persistedQueryCache.js +10 -4
  8. package/lib/commonjs/ui/hooks/persistedQueryCache.js.map +1 -1
  9. package/lib/commonjs/ui/hooks/queryClient.js +9 -15
  10. package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
  11. package/lib/commonjs/ui/hooks/useAccountTheme.js +182 -0
  12. package/lib/commonjs/ui/hooks/useAccountTheme.js.map +1 -0
  13. package/lib/commonjs/ui/hooks/useFileDownloadUrl.js +64 -44
  14. package/lib/commonjs/ui/hooks/useFileDownloadUrl.js.map +1 -1
  15. package/lib/module/ui/client.js +1 -0
  16. package/lib/module/ui/client.js.map +1 -1
  17. package/lib/module/ui/context/OxyContext.js +17 -14
  18. package/lib/module/ui/context/OxyContext.js.map +1 -1
  19. package/lib/module/ui/hooks/accountQueryPersistence.js +50 -15
  20. package/lib/module/ui/hooks/accountQueryPersistence.js.map +1 -1
  21. package/lib/module/ui/hooks/persistedQueryCache.js +10 -4
  22. package/lib/module/ui/hooks/persistedQueryCache.js.map +1 -1
  23. package/lib/module/ui/hooks/queryClient.js +9 -15
  24. package/lib/module/ui/hooks/queryClient.js.map +1 -1
  25. package/lib/module/ui/hooks/useAccountTheme.js +178 -0
  26. package/lib/module/ui/hooks/useAccountTheme.js.map +1 -0
  27. package/lib/module/ui/hooks/useFileDownloadUrl.js +64 -44
  28. package/lib/module/ui/hooks/useFileDownloadUrl.js.map +1 -1
  29. package/lib/typescript/commonjs/index.d.ts +1 -1
  30. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  31. package/lib/typescript/commonjs/ui/client.d.ts +2 -0
  32. package/lib/typescript/commonjs/ui/client.d.ts.map +1 -1
  33. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  34. package/lib/typescript/commonjs/ui/hooks/accountQueryPersistence.d.ts +22 -4
  35. package/lib/typescript/commonjs/ui/hooks/accountQueryPersistence.d.ts.map +1 -1
  36. package/lib/typescript/commonjs/ui/hooks/persistedQueryCache.d.ts +5 -3
  37. package/lib/typescript/commonjs/ui/hooks/persistedQueryCache.d.ts.map +1 -1
  38. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts +5 -4
  39. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts.map +1 -1
  40. package/lib/typescript/commonjs/ui/hooks/useAccountTheme.d.ts +47 -0
  41. package/lib/typescript/commonjs/ui/hooks/useAccountTheme.d.ts.map +1 -0
  42. package/lib/typescript/commonjs/ui/hooks/useFileDownloadUrl.d.ts +10 -4
  43. package/lib/typescript/commonjs/ui/hooks/useFileDownloadUrl.d.ts.map +1 -1
  44. package/lib/typescript/commonjs/ui/icons/Ionicons.d.ts +1 -1
  45. package/lib/typescript/commonjs/ui/icons/MaterialCommunityIcons.d.ts +1 -1
  46. package/lib/typescript/commonjs/ui/index.d.ts +1 -1
  47. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  48. package/lib/typescript/commonjs/ui/types/navigation.d.ts +2 -0
  49. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  50. package/lib/typescript/module/index.d.ts +1 -1
  51. package/lib/typescript/module/index.d.ts.map +1 -1
  52. package/lib/typescript/module/ui/client.d.ts +2 -0
  53. package/lib/typescript/module/ui/client.d.ts.map +1 -1
  54. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  55. package/lib/typescript/module/ui/hooks/accountQueryPersistence.d.ts +22 -4
  56. package/lib/typescript/module/ui/hooks/accountQueryPersistence.d.ts.map +1 -1
  57. package/lib/typescript/module/ui/hooks/persistedQueryCache.d.ts +5 -3
  58. package/lib/typescript/module/ui/hooks/persistedQueryCache.d.ts.map +1 -1
  59. package/lib/typescript/module/ui/hooks/queryClient.d.ts +5 -4
  60. package/lib/typescript/module/ui/hooks/queryClient.d.ts.map +1 -1
  61. package/lib/typescript/module/ui/hooks/useAccountTheme.d.ts +47 -0
  62. package/lib/typescript/module/ui/hooks/useAccountTheme.d.ts.map +1 -0
  63. package/lib/typescript/module/ui/hooks/useFileDownloadUrl.d.ts +10 -4
  64. package/lib/typescript/module/ui/hooks/useFileDownloadUrl.d.ts.map +1 -1
  65. package/lib/typescript/module/ui/icons/Ionicons.d.ts +1 -1
  66. package/lib/typescript/module/ui/icons/MaterialCommunityIcons.d.ts +1 -1
  67. package/lib/typescript/module/ui/index.d.ts +1 -1
  68. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  69. package/lib/typescript/module/ui/types/navigation.d.ts +2 -0
  70. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  71. package/package.json +4 -4
  72. package/src/index.ts +1 -1
  73. package/src/ui/client.ts +2 -0
  74. package/src/ui/context/OxyContext.tsx +27 -19
  75. package/src/ui/hooks/accountQueryPersistence.ts +61 -16
  76. package/src/ui/hooks/persistedQueryCache.ts +13 -5
  77. package/src/ui/hooks/queryClient.ts +12 -18
  78. package/src/ui/hooks/useAccountTheme.ts +177 -0
  79. package/src/ui/hooks/useFileDownloadUrl.ts +59 -49
  80. package/src/ui/index.ts +1 -1
  81. package/src/ui/types/navigation.ts +2 -0
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * useAccountTheme / useAccountThemeControls
5
+ *
6
+ * The Oxy account carries a portable theme (`user.themePreference`: a mode and
7
+ * a colour preset) that every Oxy app can wear. The COLOUR is the account
8
+ * colour and always applies (`useAccountColor`). Whether an app also follows
9
+ * the account's MODE is the viewer's choice per device: the theme SOURCE.
10
+ *
11
+ * - `account` (the default): the account's mode is applied to Bloom, and a mode
12
+ * chosen here is written back to the account for the other Oxy apps.
13
+ * - `app`: the mode stays on this device; nothing is written to the account.
14
+ *
15
+ * The source is a local preference, never sent anywhere. On web it is read
16
+ * synchronously, so the first paint already knows it; on native it resolves
17
+ * from AsyncStorage right after mount. Bloom's own persistence still paints the
18
+ * last theme instantly on cold boot, so the account theme lands without a flash
19
+ * once the session resolves.
20
+ */
21
+
22
+ import { useCallback, useEffect } from 'react';
23
+ import { create } from 'zustand';
24
+ import { logger } from '@oxy.so/core';
25
+ import { useBloomTheme } from '@oxy.so/bloom/theme';
26
+ import { createPlatformStorage, isReactNative } from "../utils/storageHelpers.js";
27
+ import { resolveAccountColor, useAccountColor } from "./useAccountColor.js";
28
+ import { useAuth } from "./useAuth.js";
29
+ import { useUpdateProfile } from "./mutations/useAccountMutations.js";
30
+
31
+ /** Where the app's theme MODE comes from on this device. */
32
+
33
+ const THEME_SOURCE_KEY = 'oxy.theme.source';
34
+ function normalizeSource(stored) {
35
+ return stored === 'app' ? 'app' : 'account';
36
+ }
37
+
38
+ /**
39
+ * Bloom's richer mode set onto the portable subset the account stores
40
+ * (`adaptive` has no cross-app meaning, so it is `system`).
41
+ */
42
+ function toPortableMode(mode) {
43
+ return mode === 'light' || mode === 'dark' ? mode : 'system';
44
+ }
45
+
46
+ /** Web reads `localStorage` synchronously; native resolves in `hydrate`. */
47
+ function readInitialSource() {
48
+ if (isReactNative() || typeof window === 'undefined') {
49
+ return {
50
+ source: 'account',
51
+ hydrated: false
52
+ };
53
+ }
54
+ try {
55
+ return {
56
+ source: normalizeSource(window.localStorage?.getItem(THEME_SOURCE_KEY)),
57
+ hydrated: true
58
+ };
59
+ } catch {
60
+ // A sandboxed document's storage getter throws: no stored choice.
61
+ return {
62
+ source: 'account',
63
+ hydrated: true
64
+ };
65
+ }
66
+ }
67
+ const useThemeSourceStore = create((set, get) => ({
68
+ ...readInitialSource(),
69
+ setSource(source) {
70
+ set({
71
+ source,
72
+ hydrated: true
73
+ });
74
+ void createPlatformStorage().then(storage => storage.setItem(THEME_SOURCE_KEY, source)).catch(() => undefined);
75
+ },
76
+ async hydrate() {
77
+ if (get().hydrated) return;
78
+ const stored = await createPlatformStorage().then(storage => storage.getItem(THEME_SOURCE_KEY)).catch(() => null);
79
+ // A choice made while storage was being read wins over the stored one.
80
+ if (!get().hydrated) set({
81
+ source: normalizeSource(stored),
82
+ hydrated: true
83
+ });
84
+ }
85
+ }));
86
+
87
+ /**
88
+ * Apply the account theme to Bloom: the colour always (through
89
+ * `useAccountColor`, which `canUse` can narrow), the mode while this device's
90
+ * source is `account`. Mount ONCE, inside `OxyProvider` and Bloom's theme
91
+ * provider.
92
+ */
93
+ export function useAccountTheme({
94
+ canUse
95
+ } = {}) {
96
+ const {
97
+ isAuthenticated,
98
+ user
99
+ } = useAuth();
100
+ const source = useThemeSourceStore(state => state.source);
101
+ const hydrated = useThemeSourceStore(state => state.hydrated);
102
+ const hydrate = useThemeSourceStore(state => state.hydrate);
103
+ const {
104
+ setMode
105
+ } = useBloomTheme();
106
+ useAccountColor({
107
+ canUse
108
+ });
109
+ useEffect(() => {
110
+ void hydrate();
111
+ }, [hydrate]);
112
+ const accountMode = user?.themePreference?.mode;
113
+ useEffect(() => {
114
+ if (!hydrated || !isAuthenticated || source !== 'account' || !accountMode) return;
115
+ setMode(accountMode);
116
+ }, [hydrated, isAuthenticated, source, accountMode, setMode]);
117
+ }
118
+ /**
119
+ * Source-aware theme mode changes for a settings screen. Bloom changes at once;
120
+ * on the `account` source the account's portable theme follows. Without a
121
+ * usable session the effective source is `app`, so changes stay local, and the
122
+ * stored choice applies again once signed in. The colour is chosen with
123
+ * `useAccountColorSave`.
124
+ */
125
+ export function useAccountThemeControls() {
126
+ const {
127
+ user,
128
+ canUsePrivateApi
129
+ } = useAuth();
130
+ const {
131
+ mode,
132
+ colorPreset,
133
+ setMode
134
+ } = useBloomTheme();
135
+ const {
136
+ mutateAsync
137
+ } = useUpdateProfile();
138
+ const storedSource = useThemeSourceStore(state => state.source);
139
+ const setSource = useThemeSourceStore(state => state.setSource);
140
+ const source = canUsePrivateApi ? storedSource : 'app';
141
+ const persist = useCallback(async next => {
142
+ await mutateAsync({
143
+ themePreference: {
144
+ mode: toPortableMode(next.mode),
145
+ colorPreset: next.colorPreset
146
+ }
147
+ });
148
+ }, [mutateAsync]);
149
+ const changeThemeMode = useCallback(async nextMode => {
150
+ setMode(nextMode);
151
+ if (source === 'account') await persist({
152
+ mode: nextMode,
153
+ colorPreset
154
+ });
155
+ }, [setMode, source, persist, colorPreset]);
156
+ const accountTheme = user?.themePreference;
157
+ const hasAccountTheme = !!accountTheme && resolveAccountColor({
158
+ themePreference: accountTheme
159
+ }) !== null;
160
+ const changeThemeSource = useCallback(nextSource => {
161
+ setSource(nextSource);
162
+ // An existing account theme is applied by `useAccountTheme`; only an
163
+ // account without one is seeded, from what the viewer sees now.
164
+ if (nextSource !== 'account' || !canUsePrivateApi || hasAccountTheme) return;
165
+ persist({
166
+ mode,
167
+ colorPreset
168
+ }).catch(error => {
169
+ logger.error('Failed to seed the account theme', error);
170
+ });
171
+ }, [setSource, canUsePrivateApi, hasAccountTheme, persist, mode, colorPreset]);
172
+ return {
173
+ source,
174
+ changeThemeSource,
175
+ changeThemeMode
176
+ };
177
+ }
178
+ //# sourceMappingURL=useAccountTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","create","logger","useBloomTheme","createPlatformStorage","isReactNative","resolveAccountColor","useAccountColor","useAuth","useUpdateProfile","THEME_SOURCE_KEY","normalizeSource","stored","toPortableMode","mode","readInitialSource","window","source","hydrated","localStorage","getItem","useThemeSourceStore","set","get","setSource","then","storage","setItem","catch","undefined","hydrate","useAccountTheme","canUse","isAuthenticated","user","state","setMode","accountMode","themePreference","useAccountThemeControls","canUsePrivateApi","colorPreset","mutateAsync","storedSource","persist","next","changeThemeMode","nextMode","accountTheme","hasAccountTheme","changeThemeSource","nextSource","error"],"sourceRoot":"../../../../src","sources":["ui/hooks/useAccountTheme.ts"],"mappings":"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","ignoreList":[]}
@@ -1,63 +1,83 @@
1
1
  "use strict";
2
2
 
3
3
  import { useEffect, useState } from 'react';
4
+ import { useOptionalOxy } from "../context/oxyRuntimeContext.js";
5
+ function isAbsoluteUrl(ref) {
6
+ return ref.startsWith('http://') || ref.startsWith('https://');
7
+ }
8
+
4
9
  /**
5
- * Hook to resolve a file's download URL asynchronously.
10
+ * Resolve a file's download URL for the current caller.
11
+ *
12
+ * A URL `assets.url` already resolved is answered in the FIRST render from
13
+ * core's identity-scoped cache (`assets.cachedUrl`): no request, no loading
14
+ * frame. Only a miss resolves asynchronously, through `assets.url`, which
15
+ * returns a scoped media-token stream URL for a private asset. There is no
16
+ * public-CDN fallback: `assets.publicUrl` 404s for private uploads. A
17
+ * reference that is already an absolute `http(s)` URL is returned unchanged.
6
18
  *
7
- * Uses `getFileDownloadUrlAsync`, which returns a scoped media-token stream URL
8
- * for private assets. There is no sync CDN fallback — the synchronous
9
- * `getFileDownloadUrl` is public-CDN-only and 404s for private uploads.
19
+ * For a synchronous, render-only answer (an image resolver, a list row) use
20
+ * `oxyServices.assets.renderUrl`, which reads the same cache.
10
21
  */
11
22
  export const useFileDownloadUrl = (oxyServices, fileId, options) => {
12
- const [url, setUrl] = useState(null);
13
- const [loading, setLoading] = useState(false);
14
- const [error, setError] = useState(null);
15
23
  const variant = options?.variant;
16
24
  const expiresIn = options?.expiresIn;
25
+ // A resolved URL can carry the viewer's scoped media token, so the viewer is
26
+ // part of what was asked: an account switch never shows the previous one's.
27
+ const viewerId = useOptionalOxy()?.user?.id ?? '';
28
+ const request = fileId ? `${viewerId}|${fileId}|${variant ?? ''}|${expiresIn ?? ''}` : null;
29
+ const immediate = !fileId ? null : isAbsoluteUrl(fileId) ? fileId : oxyServices?.assets.cachedUrl(fileId, variant, expiresIn) ?? null;
30
+ const needsResolve = !!fileId && !!oxyServices && immediate === null;
31
+ const [settled, setSettled] = useState(null);
17
32
  useEffect(() => {
18
- if (!fileId) {
19
- setUrl(null);
20
- setLoading(false);
21
- setError(null);
22
- return;
23
- }
24
- if (!oxyServices) {
25
- setUrl(null);
26
- setLoading(false);
27
- setError(new Error('OxyServices instance not configured for useFileDownloadUrl'));
28
- return;
29
- }
33
+ if (!needsResolve || !fileId || !oxyServices || !request) return;
30
34
  let cancelled = false;
31
- const instance = oxyServices;
32
- const targetFileId = fileId;
33
- const load = async () => {
34
- setLoading(true);
35
- setError(null);
36
- try {
37
- const resolvedUrl = await instance.assets.url(targetFileId, variant, expiresIn);
38
- if (!cancelled) {
39
- setUrl(resolvedUrl || null);
40
- }
41
- } catch (err) {
42
- if (!cancelled) {
43
- setUrl(null);
44
- setError(err instanceof Error ? err : new Error(String(err)));
45
- }
46
- } finally {
47
- if (!cancelled) {
48
- setLoading(false);
49
- }
35
+ oxyServices.assets.url(fileId, variant, expiresIn).then(url => {
36
+ if (!cancelled) setSettled({
37
+ request,
38
+ url: url || null,
39
+ error: null
40
+ });
41
+ }, err => {
42
+ if (!cancelled) {
43
+ setSettled({
44
+ request,
45
+ url: null,
46
+ error: err instanceof Error ? err : new Error(String(err))
47
+ });
50
48
  }
51
- };
52
- load();
49
+ });
53
50
  return () => {
54
51
  cancelled = true;
55
52
  };
56
- }, [fileId, oxyServices, variant, expiresIn]);
53
+ }, [needsResolve, fileId, oxyServices, variant, expiresIn, request]);
54
+ if (!fileId) return {
55
+ url: null,
56
+ loading: false,
57
+ error: null
58
+ };
59
+ if (immediate !== null) return {
60
+ url: immediate,
61
+ loading: false,
62
+ error: null
63
+ };
64
+ if (!oxyServices) {
65
+ return {
66
+ url: null,
67
+ loading: false,
68
+ error: new Error('OxyServices instance not configured for useFileDownloadUrl')
69
+ };
70
+ }
71
+ // A result settled for another file, variant or expiry is never shown.
72
+ if (settled?.request !== request) return {
73
+ url: null,
74
+ loading: true,
75
+ error: null
76
+ };
57
77
  return {
58
- url,
59
- loading,
60
- error
78
+ url: settled.url,
79
+ loading: false,
80
+ error: settled.error
61
81
  };
62
82
  };
63
83
  //# sourceMappingURL=useFileDownloadUrl.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useState","useFileDownloadUrl","oxyServices","fileId","options","url","setUrl","loading","setLoading","error","setError","variant","expiresIn","Error","cancelled","instance","targetFileId","load","resolvedUrl","assets","err","String"],"sourceRoot":"../../../../src","sources":["ui/hooks/useFileDownloadUrl.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAc3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,GAAGA,CAChCC,WAA2C,EAC3CC,MAAiC,EACjCC,OAAmC,KACN;EAC7B,MAAM,CAACC,GAAG,EAAEC,MAAM,CAAC,GAAGN,QAAQ,CAAgB,IAAI,CAAC;EACnD,MAAM,CAACO,OAAO,EAAEC,UAAU,CAAC,GAAGR,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAM,CAACS,KAAK,EAAEC,QAAQ,CAAC,GAAGV,QAAQ,CAAe,IAAI,CAAC;EAEtD,MAAMW,OAAO,GAAGP,OAAO,EAAEO,OAAO;EAChC,MAAMC,SAAS,GAAGR,OAAO,EAAEQ,SAAS;EAEpCb,SAAS,CAAC,MAAM;IACd,IAAI,CAACI,MAAM,EAAE;MACXG,MAAM,CAAC,IAAI,CAAC;MACZE,UAAU,CAAC,KAAK,CAAC;MACjBE,QAAQ,CAAC,IAAI,CAAC;MACd;IACF;IAEA,IAAI,CAACR,WAAW,EAAE;MAChBI,MAAM,CAAC,IAAI,CAAC;MACZE,UAAU,CAAC,KAAK,CAAC;MACjBE,QAAQ,CAAC,IAAIG,KAAK,CAAC,4DAA4D,CAAC,CAAC;MACjF;IACF;IAEA,IAAIC,SAAS,GAAG,KAAK;IACrB,MAAMC,QAAQ,GAAGb,WAAW;IAC5B,MAAMc,YAAY,GAAGb,MAAM;IAE3B,MAAMc,IAAI,GAAG,MAAAA,CAAA,KAAY;MACvBT,UAAU,CAAC,IAAI,CAAC;MAChBE,QAAQ,CAAC,IAAI,CAAC;MAEd,IAAI;QACF,MAAMQ,WAAW,GAAG,MAAMH,QAAQ,CAACI,MAAM,CAACd,GAAG,CAACW,YAAY,EAAEL,OAAO,EAAEC,SAAS,CAAC;QAE/E,IAAI,CAACE,SAAS,EAAE;UACdR,MAAM,CAACY,WAAW,IAAI,IAAI,CAAC;QAC7B;MACF,CAAC,CAAC,OAAOE,GAAY,EAAE;QACrB,IAAI,CAACN,SAAS,EAAE;UACdR,MAAM,CAAC,IAAI,CAAC;UACZI,QAAQ,CAACU,GAAG,YAAYP,KAAK,GAAGO,GAAG,GAAG,IAAIP,KAAK,CAACQ,MAAM,CAACD,GAAG,CAAC,CAAC,CAAC;QAC/D;MACF,CAAC,SAAS;QACR,IAAI,CAACN,SAAS,EAAE;UACdN,UAAU,CAAC,KAAK,CAAC;QACnB;MACF;IACF,CAAC;IAEDS,IAAI,CAAC,CAAC;IAEN,OAAO,MAAM;MACXH,SAAS,GAAG,IAAI;IAClB,CAAC;EACH,CAAC,EAAE,CAACX,MAAM,EAAED,WAAW,EAAES,OAAO,EAAEC,SAAS,CAAC,CAAC;EAE7C,OAAO;IAAEP,GAAG;IAAEE,OAAO;IAAEE;EAAM,CAAC;AAChC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useState","useOptionalOxy","isAbsoluteUrl","ref","startsWith","useFileDownloadUrl","oxyServices","fileId","options","variant","expiresIn","viewerId","user","id","request","immediate","assets","cachedUrl","needsResolve","settled","setSettled","cancelled","url","then","error","err","Error","String","loading"],"sourceRoot":"../../../../src","sources":["ui/hooks/useFileDownloadUrl.ts"],"mappings":"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","ignoreList":[]}
@@ -79,7 +79,7 @@ export { OxyConsentScreen } from './ui/components/OxyConsentScreen';
79
79
  export type { OxyConsentScreenProps, OxyConsentApplication, OxyConsentUser, OxyConsentResource, } from './ui/components/OxyConsentScreen';
80
80
  export { RequireOxyAuth } from './ui/components/RequireOxyAuth';
81
81
  export type { RequireOxyAuthProps, RequireOxyAuthPrompt } from './ui/components/RequireOxyAuth';
82
- export type { AccountQueriesConfig } from './ui/hooks/accountQueryPersistence';
82
+ export type { AccountQueriesConfig, AccountQueryMeta } from './ui/hooks/accountQueryPersistence';
83
83
  export { default as FollowButton } from './ui/components/FollowButton';
84
84
  export type { FollowButtonProps, SingleFollowButtonProps, MultiFollowButtonProps, } from './ui/components/FollowButton';
85
85
  export { FollowTargetButton } from './ui/components/FollowTargetButton';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,8 @@ export type { OxyPayButtonProps } from './components/OxyPayButton';
36
36
  export { useOxy, useOptionalOxy, OxyProviderMissingError } from './context/OxyContext';
37
37
  export { useAuth } from './hooks/useAuth';
38
38
  export { useAccountColor, useAccountColorSave, resolveAccountColor, entitledAccountColors, } from './hooks/useAccountColor';
39
+ export { useAccountTheme, useAccountThemeControls } from './hooks/useAccountTheme';
40
+ export type { AccountThemeControls, ThemeSource } from './hooks/useAccountTheme';
39
41
  export { useAppAssertion, AppAssertionProviderMissingError, } from './appAssertion/AppAssertionContext';
40
42
  export type { UseAppAssertionResult } from './appAssertion/AppAssertionContext';
41
43
  export type { AppAssertionSnapshot, AppAssertionStatus } from './appAssertion/appAssertionManager';
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/ui/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/ui/client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OxyContext.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/OxyContext.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAoG/B,OAAO,KAAK,EAAmB,uBAAuB,EAAe,MAAM,mBAAmB,CAAC;AAQ/F,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAOhG,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,cAAc,EACd,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAI7B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAutDhE,CAAC"}
1
+ {"version":3,"file":"OxyContext.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/OxyContext.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAoG/B,OAAO,KAAK,EAAmB,uBAAuB,EAAe,MAAM,mBAAmB,CAAC;AAQ/F,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAOhG,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,cAAc,EACd,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAiuDhE,CAAC"}
@@ -4,7 +4,9 @@
4
4
  * The SDK's own persister (`attachQueryPersistence`) keeps account-agnostic
5
5
  * data. An app's mail, library or drafts belong to one account, and every app
6
6
  * that wanted them to survive a restart had to scope a persister to the session
7
- * itself. The SDK owns the session, so it owns this too:
7
+ * itself. The SDK owns the session, so it owns this too, for every root an app
8
+ * declares (`accountQueries`) and for any single query marked
9
+ * `meta: { persist: 'account' }`, with no declaration at all:
8
10
  *
9
11
  * - Storage is keyed by the account (`oxy_account_queries:<accountId>`), so a
10
12
  * restore can only ever hydrate the account that is signed in.
@@ -15,19 +17,33 @@
15
17
  * is woken. The leaving account's latest state is written first, a sign-out
16
18
  * then deletes it, and only then is the next account's blob read.
17
19
  * - `isReady()` is false until the signed-in account's blob is restored, and
18
- * `RequireOxyAuth` waits on it, so another account's rows never render.
20
+ * `RequireOxyAuth` waits on it, so another account's rows never render. A
21
+ * cold boot that paints a cached session waits on it too (`whenReady()`), so
22
+ * the first paint already has the account's rows.
19
23
  *
20
24
  * Every storage operation runs through one queue, in order, and a restore
21
25
  * checks that its account is still the active one in the same tick it hydrates.
22
26
  */
23
27
  import { type Mutation, type Query, type QueryClient, type QueryKey } from '@tanstack/react-query';
24
28
  import type { StorageInterface } from '../utils/storageHelpers';
29
+ /**
30
+ * The `meta` that makes one query the signed-in account's and keeps it across
31
+ * restarts, exactly like a query under a declared root: for the few reads that
32
+ * shape a returning user's first paint (the tabs, the theme), not for lists.
33
+ *
34
+ * `useQuery({ queryKey, queryFn, meta: { persist: 'account' } })`
35
+ */
36
+ export interface AccountQueryMeta {
37
+ persist: 'account';
38
+ }
25
39
  /** An app's declaration of which data is private to the signed-in account. */
26
40
  export interface AccountQueriesConfig {
27
41
  /**
28
42
  * Query-key roots (`queryKey[0]`) whose data belongs to the signed-in account
29
43
  * and survives a restart. `'all'`: every query the app runs, for an app whose
30
44
  * every read may depend on who is signed in, so no root can be forgotten.
45
+ * Every root's queries are written on every change to any of them: for one
46
+ * or two queries under a busy root, mark those instead (`AccountQueryMeta`).
31
47
  *
32
48
  * The roots `accounts`, `sessions` and `devices` are reserved for the SDK's
33
49
  * device-level data: an app must not use them. `users` and `privacy` are the
@@ -53,7 +69,7 @@ export interface AccountQueryOwnership {
53
69
  persistsQuery: (query: Query) => boolean;
54
70
  ownsMutation: (mutation: Mutation) => boolean;
55
71
  }
56
- export declare function accountQueryOwnership(config: AccountQueriesConfig): AccountQueryOwnership;
72
+ export declare function accountQueryOwnership(config?: AccountQueriesConfig): AccountQueryOwnership;
57
73
  export declare const ACCOUNT_QUERY_CACHE_KEY = "oxy_account_queries";
58
74
  export interface AccountQueryPersistence {
59
75
  /** Storage became available (it initializes asynchronously). */
@@ -66,7 +82,9 @@ export interface AccountQueryPersistence {
66
82
  detach(): void;
67
83
  /** True once the active account's cache is restored (always true signed out). */
68
84
  isReady(): boolean;
85
+ /** Resolves once `isReady()`, or once the account it waited for is left. */
86
+ whenReady(): Promise<void>;
69
87
  subscribe(listener: () => void): () => void;
70
88
  }
71
- export declare function createAccountQueryPersistence(queryClient: QueryClient, config: AccountQueriesConfig): AccountQueryPersistence;
89
+ export declare function createAccountQueryPersistence(queryClient: QueryClient, config?: AccountQueriesConfig): AccountQueryPersistence;
72
90
  //# sourceMappingURL=accountQueryPersistence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accountQueryPersistence.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/accountQueryPersistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAWhE,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;OAQG;IACH,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAAC;IACjC;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;CACpC;AAED,iFAAiF;AACjF,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IACrC,qCAAqC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IACzC,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;CAC/C;AAKD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,oBAAoB,GAAG,qBAAqB,CA0BzF;AAED,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAI7D,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC5C,wFAAwF;IACxF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACzC,2EAA2E;IAC3E,MAAM,IAAI,IAAI,CAAC;IACf,2EAA2E;IAC3E,MAAM,IAAI,IAAI,CAAC;IACf,iFAAiF;IACjF,OAAO,IAAI,OAAO,CAAC;IACnB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7C;AAMD,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,oBAAoB,GAC3B,uBAAuB,CAgIzB"}
1
+ {"version":3,"file":"accountQueryPersistence.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/accountQueryPersistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAWhE;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,CAAC;CACpB;AAMD,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;;;OAUG;IACH,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAAC;IACjC;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;CACpC;AAED,iFAAiF;AACjF,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IACrC,qCAAqC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IACzC,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;CAC/C;AAQD,wBAAgB,qBAAqB,CACnC,MAAM,GAAE,oBAA+B,GACtC,qBAAqB,CA6BvB;AAED,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAI7D,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC5C,wFAAwF;IACxF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACzC,2EAA2E;IAC3E,MAAM,IAAI,IAAI,CAAC;IACf,2EAA2E;IAC3E,MAAM,IAAI,IAAI,CAAC;IACf,iFAAiF;IACjF,OAAO,IAAI,OAAO,CAAC;IACnB,4EAA4E;IAC5E,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7C;AAMD,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,WAAW,EACxB,MAAM,CAAC,EAAE,oBAAoB,GAC5B,uBAAuB,CA8IzB"}
@@ -21,7 +21,8 @@ export declare const PERSISTED_QUERY_PREFIXES: ReadonlyArray<string>;
21
21
  */
22
22
  export declare const SDK_MEMORY_ONLY_ROOTS: ReadonlyArray<string>;
23
23
  export interface PersistFilters {
24
- shouldDehydrateQuery: (query: Query) => boolean;
24
+ /** The queries this cache keeps, whatever their state; only successful ones are written. */
25
+ persistsQuery: (query: Query) => boolean;
25
26
  shouldDehydrateMutation: (mutation: Mutation) => boolean;
26
27
  }
27
28
  export declare function rootOf(query: Query): string | null;
@@ -34,8 +35,9 @@ export declare function snapshot(queryClient: QueryClient, filters: PersistFilte
34
35
  */
35
36
  export declare function hydrateSnapshot(queryClient: QueryClient, raw: string | null, maxAge: number): boolean;
36
37
  /**
37
- * Write the filtered cache on every change, at most once per `throttleMs`.
38
- * `write` receives the serialized snapshot; `flush()` writes now.
38
+ * Write the filtered cache whenever one of its queries or any mutation changes,
39
+ * at most once per `throttleMs`. Activity in queries it does not keep (feeds,
40
+ * search) never serializes it. `write` receives the snapshot; `flush()` writes now.
39
41
  */
40
42
  export declare function subscribeSnapshots(queryClient: QueryClient, filters: PersistFilters, throttleMs: number, write: (serialized: string) => void): {
41
43
  flush: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"persistedQueryCache.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/persistedQueryCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAIL,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAG/B,yFAAyF;AACzF,eAAO,MAAM,wBAAwB,EAAE,aAAa,CAAC,MAAM,CAM1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,MAAM,CAKvD,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,oBAAoB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IAChD,uBAAuB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;CAC1D;AAQD,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAGlD;AAED,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAOlF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAqBT;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAClC;IAAE,KAAK,EAAE,MAAM,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,IAAI,CAAA;CAAE,CAqBhD"}
1
+ {"version":3,"file":"persistedQueryCache.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/persistedQueryCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAIL,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAG/B,yFAAyF;AACzF,eAAO,MAAM,wBAAwB,EAAE,aAAa,CAAC,MAAM,CAM1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,MAAM,CAKvD,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IACzC,uBAAuB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;CAC1D;AAQD,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAGlD;AAED,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAWlF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAqBT;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAClC;IAAE,KAAK,EAAE,MAAM,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,IAAI,CAAA;CAAE,CAuBhD"}
@@ -48,10 +48,11 @@ export interface AttachPersistenceResult {
48
48
  * Restore, then keep writing, the account-agnostic cache.
49
49
  *
50
50
  * Queries written by another build are dropped; queued mutations are kept
51
- * (`persistedQueryCache.ts`). Whatever the app declared account-scoped
52
- * (`accountQueries`) is left to `createAccountQueryPersistence`, even under
53
- * one of the SDK's prefixes, so private rows never land in the shared blob and
54
- * a paused mutation cannot replay twice or under another account.
51
+ * (`persistedQueryCache.ts`). Whatever belongs to the account (`accountQueries`,
52
+ * or a query marked `meta: { persist: 'account' }`) is left to
53
+ * `createAccountQueryPersistence`, even under one of the SDK's prefixes, so
54
+ * private rows never land in the shared blob and a paused mutation cannot
55
+ * replay twice or under another account.
55
56
  *
56
57
  * Safe to no-op if `storage` is null/undefined (e.g. server-side render
57
58
  * with no host storage).
@@ -1 +1 @@
1
- {"version":3,"file":"queryClient.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/queryClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,WAAW,EAA4C,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAoB7F,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAK9E;AAeD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,QAAO,WA6CpC,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,GACjC,aAAa,WAAW,EACxB,SAAS,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAC5C,iBAAiB,oBAAoB,KACpC,uBA6CF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAQ7E,CAAC;AAEF;;GAEG;AACH,YAAY,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"queryClient.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/queryClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,WAAW,EAA6B,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAqB7F,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAK9E;AAQD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,QAAO,WA6CpC,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,GACjC,aAAa,WAAW,EACxB,SAAS,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAC5C,iBAAiB,oBAAoB,KACpC,uBA4CF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAQ7E,CAAC;AAEF;;GAEG;AACH,YAAY,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * useAccountTheme / useAccountThemeControls
3
+ *
4
+ * The Oxy account carries a portable theme (`user.themePreference`: a mode and
5
+ * a colour preset) that every Oxy app can wear. The COLOUR is the account
6
+ * colour and always applies (`useAccountColor`). Whether an app also follows
7
+ * the account's MODE is the viewer's choice per device: the theme SOURCE.
8
+ *
9
+ * - `account` (the default): the account's mode is applied to Bloom, and a mode
10
+ * chosen here is written back to the account for the other Oxy apps.
11
+ * - `app`: the mode stays on this device; nothing is written to the account.
12
+ *
13
+ * The source is a local preference, never sent anywhere. On web it is read
14
+ * synchronously, so the first paint already knows it; on native it resolves
15
+ * from AsyncStorage right after mount. Bloom's own persistence still paints the
16
+ * last theme instantly on cold boot, so the account theme lands without a flash
17
+ * once the session resolves.
18
+ */
19
+ import { type AppColorName, type ThemeMode } from '@oxy.so/bloom/theme';
20
+ /** Where the app's theme MODE comes from on this device. */
21
+ export type ThemeSource = 'app' | 'account';
22
+ /**
23
+ * Apply the account theme to Bloom: the colour always (through
24
+ * `useAccountColor`, which `canUse` can narrow), the mode while this device's
25
+ * source is `account`. Mount ONCE, inside `OxyProvider` and Bloom's theme
26
+ * provider.
27
+ */
28
+ export declare function useAccountTheme({ canUse, }?: {
29
+ canUse?: (name: AppColorName) => boolean;
30
+ }): void;
31
+ export interface AccountThemeControls {
32
+ /** The effective source: `app` whenever no session can reach the account. */
33
+ source: ThemeSource;
34
+ /** Switch this device's source; enabling `account` seeds an account with no theme yet. */
35
+ changeThemeSource: (source: ThemeSource) => void;
36
+ /** Change the mode now; on the `account` source, also write it to the account. */
37
+ changeThemeMode: (mode: ThemeMode) => Promise<void>;
38
+ }
39
+ /**
40
+ * Source-aware theme mode changes for a settings screen. Bloom changes at once;
41
+ * on the `account` source the account's portable theme follows. Without a
42
+ * usable session the effective source is `app`, so changes stay local, and the
43
+ * stored choice applies again once signed in. The colour is chosen with
44
+ * `useAccountColorSave`.
45
+ */
46
+ export declare function useAccountThemeControls(): AccountThemeControls;
47
+ //# sourceMappingURL=useAccountTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAccountTheme.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/useAccountTheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EAAiB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAMvF,4DAA4D;AAC5D,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,SAAS,CAAC;AA4D5C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,GACP,GAAE;IACD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC;CACrC,GAAG,IAAI,CAiBZ;AAED,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,MAAM,EAAE,WAAW,CAAC;IACpB,0FAA0F;IAC1F,iBAAiB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACjD,kFAAkF;IAClF,eAAe,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,IAAI,oBAAoB,CA0C9D"}
@@ -9,11 +9,17 @@ export interface UseFileDownloadUrlResult {
9
9
  error: Error | null;
10
10
  }
11
11
  /**
12
- * Hook to resolve a file's download URL asynchronously.
12
+ * Resolve a file's download URL for the current caller.
13
13
  *
14
- * Uses `getFileDownloadUrlAsync`, which returns a scoped media-token stream URL
15
- * for private assets. There is no sync CDN fallback — the synchronous
16
- * `getFileDownloadUrl` is public-CDN-only and 404s for private uploads.
14
+ * A URL `assets.url` already resolved is answered in the FIRST render from
15
+ * core's identity-scoped cache (`assets.cachedUrl`): no request, no loading
16
+ * frame. Only a miss resolves asynchronously, through `assets.url`, which
17
+ * returns a scoped media-token stream URL for a private asset. There is no
18
+ * public-CDN fallback: `assets.publicUrl` 404s for private uploads. A
19
+ * reference that is already an absolute `http(s)` URL is returned unchanged.
20
+ *
21
+ * For a synchronous, render-only answer (an image resolver, a list row) use
22
+ * `oxyServices.assets.renderUrl`, which reads the same cache.
17
23
  */
18
24
  export declare const useFileDownloadUrl: (oxyServices: OxyServices | null | undefined, fileId: string | null | undefined, options?: UseFileDownloadUrlOptions) => UseFileDownloadUrlResult;
19
25
  //# sourceMappingURL=useFileDownloadUrl.d.ts.map