@harkenapp/sdk-react-native 0.0.1-alpha.1 → 0.0.1-alpha.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/README.md +44 -7
- package/app.plugin.cjs +12 -17
- package/dist/__mocks__/async-storage.d.ts +16 -0
- package/dist/__mocks__/async-storage.d.ts.map +1 -0
- package/dist/__mocks__/async-storage.js +39 -0
- package/dist/__mocks__/async-storage.js.map +1 -0
- package/dist/__mocks__/expo-document-picker.d.ts +26 -0
- package/dist/__mocks__/expo-document-picker.d.ts.map +1 -0
- package/dist/__mocks__/expo-document-picker.js +25 -0
- package/dist/__mocks__/expo-document-picker.js.map +1 -0
- package/dist/__mocks__/expo-file-system.d.ts +42 -0
- package/dist/__mocks__/expo-file-system.d.ts.map +1 -0
- package/dist/__mocks__/expo-file-system.js +37 -0
- package/dist/__mocks__/expo-file-system.js.map +1 -0
- package/dist/__mocks__/expo-image-picker.d.ts +30 -0
- package/dist/__mocks__/expo-image-picker.d.ts.map +1 -0
- package/dist/__mocks__/expo-image-picker.js +30 -0
- package/dist/__mocks__/expo-image-picker.js.map +1 -0
- package/dist/__mocks__/expo-secure-store.d.ts +15 -0
- package/dist/__mocks__/expo-secure-store.d.ts.map +1 -0
- package/dist/__mocks__/expo-secure-store.js +30 -0
- package/dist/__mocks__/expo-secure-store.js.map +1 -0
- package/dist/__mocks__/react-native.d.ts +73 -0
- package/dist/__mocks__/react-native.d.ts.map +1 -0
- package/dist/__mocks__/react-native.js +45 -0
- package/dist/__mocks__/react-native.js.map +1 -0
- package/dist/api/client.d.ts +8 -8
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +17 -19
- package/dist/api/client.js.map +1 -1
- package/dist/api/client.test.d.ts +2 -0
- package/dist/api/client.test.d.ts.map +1 -0
- package/dist/api/client.test.js +417 -0
- package/dist/api/client.test.js.map +1 -0
- package/dist/api/errors.d.ts +3 -3
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/errors.js +3 -3
- package/dist/api/errors.js.map +1 -1
- package/dist/api/errors.test.d.ts +2 -0
- package/dist/api/errors.test.d.ts.map +1 -0
- package/dist/api/errors.test.js +155 -0
- package/dist/api/errors.test.js.map +1 -0
- package/dist/api/index.d.ts +6 -6
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/retry.d.ts +1 -1
- package/dist/api/retry.d.ts.map +1 -1
- package/dist/api/retry.js.map +1 -1
- package/dist/api/retry.test.d.ts +2 -0
- package/dist/api/retry.test.d.ts.map +1 -0
- package/dist/api/retry.test.js +193 -0
- package/dist/api/retry.test.js.map +1 -0
- package/dist/attachments/FeedbackSheet.d.ts +36 -13
- package/dist/attachments/FeedbackSheet.d.ts.map +1 -1
- package/dist/attachments/FeedbackSheet.js +50 -30
- package/dist/attachments/FeedbackSheet.js.map +1 -1
- package/dist/attachments/index.d.ts +2 -2
- package/dist/components/AttachmentGrid.d.ts +12 -4
- package/dist/components/AttachmentGrid.d.ts.map +1 -1
- package/dist/components/AttachmentGrid.js +44 -34
- package/dist/components/AttachmentGrid.js.map +1 -1
- package/dist/components/AttachmentPicker.d.ts +3 -3
- package/dist/components/AttachmentPicker.d.ts.map +1 -1
- package/dist/components/AttachmentPicker.js +34 -36
- package/dist/components/AttachmentPicker.js.map +1 -1
- package/dist/components/AttachmentPreview.d.ts +10 -4
- package/dist/components/AttachmentPreview.d.ts.map +1 -1
- package/dist/components/AttachmentPreview.js +48 -34
- package/dist/components/AttachmentPreview.js.map +1 -1
- package/dist/components/CategorySelector.d.ts +3 -3
- package/dist/components/CategorySelector.d.ts.map +1 -1
- package/dist/components/CategorySelector.js +21 -27
- package/dist/components/CategorySelector.js.map +1 -1
- package/dist/components/FeedbackForm.d.ts +3 -3
- package/dist/components/FeedbackForm.d.ts.map +1 -1
- package/dist/components/FeedbackForm.js +7 -8
- package/dist/components/FeedbackForm.js.map +1 -1
- package/dist/components/FeedbackSheet.d.ts +34 -11
- package/dist/components/FeedbackSheet.d.ts.map +1 -1
- package/dist/components/FeedbackSheet.js +46 -28
- package/dist/components/FeedbackSheet.js.map +1 -1
- package/dist/components/ThemedButton.d.ts +16 -5
- package/dist/components/ThemedButton.d.ts.map +1 -1
- package/dist/components/ThemedButton.js +38 -29
- package/dist/components/ThemedButton.js.map +1 -1
- package/dist/components/ThemedText.d.ts +3 -3
- package/dist/components/ThemedText.d.ts.map +1 -1
- package/dist/components/ThemedText.js +1 -1
- package/dist/components/ThemedText.js.map +1 -1
- package/dist/components/ThemedTextInput.d.ts +11 -2
- package/dist/components/ThemedTextInput.d.ts.map +1 -1
- package/dist/components/ThemedTextInput.js +19 -9
- package/dist/components/ThemedTextInput.js.map +1 -1
- package/dist/components/UploadStatusOverlay.d.ts +11 -3
- package/dist/components/UploadStatusOverlay.d.ts.map +1 -1
- package/dist/components/UploadStatusOverlay.js +59 -76
- package/dist/components/UploadStatusOverlay.js.map +1 -1
- package/dist/components/index.d.ts +18 -18
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/context/HarkenContext.d.ts +20 -15
- package/dist/context/HarkenContext.d.ts.map +1 -1
- package/dist/context/HarkenContext.js +20 -17
- package/dist/context/HarkenContext.js.map +1 -1
- package/dist/context/index.d.ts +2 -2
- package/dist/domain/index.d.ts +2 -2
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js.map +1 -1
- package/dist/hooks/index.d.ts +5 -5
- package/dist/hooks/useAnonymousId.js +1 -1
- package/dist/hooks/useAnonymousId.test.d.ts +2 -0
- package/dist/hooks/useAnonymousId.test.d.ts.map +1 -0
- package/dist/hooks/useAnonymousId.test.js +154 -0
- package/dist/hooks/useAnonymousId.test.js.map +1 -0
- package/dist/hooks/useAttachmentPicker.d.ts +3 -3
- package/dist/hooks/useAttachmentPicker.js +7 -7
- package/dist/hooks/useAttachmentStatus.d.ts +1 -1
- package/dist/hooks/useAttachmentStatus.d.ts.map +1 -1
- package/dist/hooks/useAttachmentStatus.js.map +1 -1
- package/dist/hooks/useAttachmentUpload.d.ts +2 -2
- package/dist/hooks/useAttachmentUpload.d.ts.map +1 -1
- package/dist/hooks/useAttachmentUpload.js +5 -5
- package/dist/hooks/useAttachmentUpload.js.map +1 -1
- package/dist/hooks/useAttachmentUpload.test.d.ts +2 -0
- package/dist/hooks/useAttachmentUpload.test.d.ts.map +1 -0
- package/dist/hooks/useAttachmentUpload.test.js +542 -0
- package/dist/hooks/useAttachmentUpload.test.js.map +1 -0
- package/dist/hooks/useFeedback.d.ts +4 -4
- package/dist/hooks/useFeedback.d.ts.map +1 -1
- package/dist/hooks/useFeedback.js +3 -5
- package/dist/hooks/useFeedback.js.map +1 -1
- package/dist/hooks/useFeedback.test.d.ts +2 -0
- package/dist/hooks/useFeedback.test.d.ts.map +1 -0
- package/dist/hooks/useFeedback.test.js +299 -0
- package/dist/hooks/useFeedback.test.js.map +1 -0
- package/dist/hooks/useHarkenContext.d.ts +1 -1
- package/dist/hooks/useHarkenContext.js +1 -1
- package/dist/hooks/useHarkenTheme.d.ts +27 -3
- package/dist/hooks/useHarkenTheme.d.ts.map +1 -1
- package/dist/hooks/useHarkenTheme.js +26 -2
- package/dist/hooks/useHarkenTheme.js.map +1 -1
- package/dist/index.d.ts +28 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/services/index.d.ts +3 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/uploadQueueService.d.ts +2 -2
- package/dist/services/uploadQueueService.d.ts.map +1 -1
- package/dist/services/uploadQueueService.js +16 -17
- package/dist/services/uploadQueueService.js.map +1 -1
- package/dist/services/uploadQueueService.test.d.ts +2 -0
- package/dist/services/uploadQueueService.test.d.ts.map +1 -0
- package/dist/services/uploadQueueService.test.js +426 -0
- package/dist/services/uploadQueueService.test.js.map +1 -0
- package/dist/services/uploadQueueStorage.d.ts +1 -1
- package/dist/services/uploadQueueStorage.d.ts.map +1 -1
- package/dist/services/uploadQueueStorage.js +4 -4
- package/dist/services/uploadQueueStorage.js.map +1 -1
- package/dist/services/uploadQueueStorage.test.d.ts +2 -0
- package/dist/services/uploadQueueStorage.test.d.ts.map +1 -0
- package/dist/services/uploadQueueStorage.test.js +200 -0
- package/dist/services/uploadQueueStorage.test.js.map +1 -0
- package/dist/storage/IdentityStore.d.ts +1 -1
- package/dist/storage/IdentityStore.d.ts.map +1 -1
- package/dist/storage/IdentityStore.js.map +1 -1
- package/dist/storage/IdentityStore.test.d.ts +2 -0
- package/dist/storage/IdentityStore.test.d.ts.map +1 -0
- package/dist/storage/IdentityStore.test.js +176 -0
- package/dist/storage/IdentityStore.test.js.map +1 -0
- package/dist/storage/SecureStoreAdapter.d.ts +1 -1
- package/dist/storage/SecureStoreAdapter.test.d.ts +2 -0
- package/dist/storage/SecureStoreAdapter.test.d.ts.map +1 -0
- package/dist/storage/SecureStoreAdapter.test.js +114 -0
- package/dist/storage/SecureStoreAdapter.test.js.map +1 -0
- package/dist/storage/defaultStorage.d.ts +1 -1
- package/dist/storage/defaultStorage.js +4 -4
- package/dist/storage/defaultStorage.test.d.ts +2 -0
- package/dist/storage/defaultStorage.test.d.ts.map +1 -0
- package/dist/storage/defaultStorage.test.js +159 -0
- package/dist/storage/defaultStorage.test.js.map +1 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/types.js +1 -1
- package/dist/theme/defaults.d.ts +14 -3
- package/dist/theme/defaults.d.ts.map +1 -1
- package/dist/theme/defaults.js +58 -43
- package/dist/theme/defaults.js.map +1 -1
- package/dist/theme/index.d.ts +3 -2
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +4 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/resolver.d.ts +16 -0
- package/dist/theme/resolver.d.ts.map +1 -0
- package/dist/theme/resolver.js +375 -0
- package/dist/theme/resolver.js.map +1 -0
- package/dist/theme/resolver.test.d.ts +2 -0
- package/dist/theme/resolver.test.d.ts.map +1 -0
- package/dist/theme/resolver.test.js +344 -0
- package/dist/theme/resolver.test.js.map +1 -0
- package/dist/theme/types.d.ts +378 -5
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/types/config.d.ts +4 -4
- package/dist/types/index.d.ts +2 -2
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/uuid.d.ts.map +1 -1
- package/dist/utils/uuid.js +4 -5
- package/dist/utils/uuid.js.map +1 -1
- package/dist/utils/uuid.test.d.ts +2 -0
- package/dist/utils/uuid.test.d.ts.map +1 -0
- package/dist/utils/uuid.test.js +78 -0
- package/dist/utils/uuid.test.js.map +1 -0
- package/package.json +21 -13
- package/src/@types/expo-file-system-legacy.d.ts +3 -3
- package/src/__mocks__/async-storage.ts +46 -0
- package/src/__mocks__/expo-document-picker.ts +41 -0
- package/src/__mocks__/expo-file-system.ts +62 -0
- package/src/__mocks__/expo-image-picker.ts +48 -0
- package/src/__mocks__/expo-secure-store.ts +29 -0
- package/src/__mocks__/react-native.ts +46 -0
- package/src/api/client.test.ts +515 -0
- package/src/api/client.ts +45 -64
- package/src/api/errors.test.ts +193 -0
- package/src/api/errors.ts +7 -11
- package/src/api/index.ts +6 -10
- package/src/api/retry.test.ts +251 -0
- package/src/api/retry.ts +3 -6
- package/src/attachments/FeedbackSheet.tsx +100 -80
- package/src/attachments/index.ts +2 -2
- package/src/components/AttachmentGrid.tsx +54 -45
- package/src/components/AttachmentPicker.tsx +43 -54
- package/src/components/AttachmentPreview.tsx +51 -47
- package/src/components/CategorySelector.tsx +29 -35
- package/src/components/FeedbackForm.tsx +23 -35
- package/src/components/FeedbackSheet.tsx +89 -68
- package/src/components/ThemedButton.tsx +49 -47
- package/src/components/ThemedText.tsx +7 -10
- package/src/components/ThemedTextInput.tsx +23 -13
- package/src/components/UploadStatusOverlay.tsx +66 -89
- package/src/components/index.ts +18 -21
- package/src/context/HarkenContext.tsx +29 -28
- package/src/context/index.ts +2 -2
- package/src/domain/index.ts +2 -5
- package/src/domain/upload-queue.ts +5 -5
- package/src/hooks/index.ts +5 -5
- package/src/hooks/useAnonymousId.test.ts +189 -0
- package/src/hooks/useAnonymousId.ts +3 -3
- package/src/hooks/useAttachmentPicker.ts +12 -12
- package/src/hooks/useAttachmentStatus.ts +12 -16
- package/src/hooks/useAttachmentUpload.test.ts +632 -0
- package/src/hooks/useAttachmentUpload.ts +45 -54
- package/src/hooks/useFeedback.test.ts +376 -0
- package/src/hooks/useFeedback.ts +12 -14
- package/src/hooks/useHarkenContext.ts +4 -4
- package/src/hooks/useHarkenTheme.ts +30 -6
- package/src/index.ts +28 -52
- package/src/services/index.ts +3 -9
- package/src/services/uploadQueueService.test.ts +489 -0
- package/src/services/uploadQueueService.ts +40 -56
- package/src/services/uploadQueueStorage.test.ts +243 -0
- package/src/services/uploadQueueStorage.ts +7 -9
- package/src/storage/IdentityStore.test.ts +173 -0
- package/src/storage/IdentityStore.ts +4 -5
- package/src/storage/SecureStoreAdapter.test.ts +147 -0
- package/src/storage/SecureStoreAdapter.ts +1 -1
- package/src/storage/defaultStorage.test.ts +159 -0
- package/src/storage/defaultStorage.ts +6 -6
- package/src/storage/index.ts +5 -5
- package/src/storage/types.ts +1 -1
- package/src/theme/defaults.ts +75 -46
- package/src/theme/index.ts +15 -2
- package/src/theme/resolver.test.ts +411 -0
- package/src/theme/resolver.ts +446 -0
- package/src/theme/types.ts +453 -15
- package/src/types/config.ts +4 -4
- package/src/types/index.ts +2 -2
- package/src/utils/index.ts +1 -1
- package/src/utils/uuid.test.ts +85 -0
- package/src/utils/uuid.ts +4 -7
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const SecureStoreAdapter_1 = require("./SecureStoreAdapter");
|
|
5
|
+
(0, vitest_1.describe)("createSecureStoreAdapter", () => {
|
|
6
|
+
(0, vitest_1.describe)("when SecureStore is available", () => {
|
|
7
|
+
(0, vitest_1.it)("maps getItem to getItemAsync", async () => {
|
|
8
|
+
const mockSecureStore = {
|
|
9
|
+
getItemAsync: vitest_1.vi.fn().mockResolvedValue("stored-value"),
|
|
10
|
+
setItemAsync: vitest_1.vi.fn(),
|
|
11
|
+
deleteItemAsync: vitest_1.vi.fn(),
|
|
12
|
+
};
|
|
13
|
+
const adapter = (0, SecureStoreAdapter_1.createSecureStoreAdapter)(mockSecureStore);
|
|
14
|
+
const result = await adapter.getItem("test-key");
|
|
15
|
+
(0, vitest_1.expect)(mockSecureStore.getItemAsync).toHaveBeenCalledWith("test-key");
|
|
16
|
+
(0, vitest_1.expect)(result).toBe("stored-value");
|
|
17
|
+
});
|
|
18
|
+
(0, vitest_1.it)("maps setItem to setItemAsync", async () => {
|
|
19
|
+
const mockSecureStore = {
|
|
20
|
+
getItemAsync: vitest_1.vi.fn(),
|
|
21
|
+
setItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
22
|
+
deleteItemAsync: vitest_1.vi.fn(),
|
|
23
|
+
};
|
|
24
|
+
const adapter = (0, SecureStoreAdapter_1.createSecureStoreAdapter)(mockSecureStore);
|
|
25
|
+
await adapter.setItem("test-key", "test-value");
|
|
26
|
+
(0, vitest_1.expect)(mockSecureStore.setItemAsync).toHaveBeenCalledWith("test-key", "test-value");
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.it)("maps deleteItem to deleteItemAsync", async () => {
|
|
29
|
+
const mockSecureStore = {
|
|
30
|
+
getItemAsync: vitest_1.vi.fn(),
|
|
31
|
+
setItemAsync: vitest_1.vi.fn(),
|
|
32
|
+
deleteItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
33
|
+
};
|
|
34
|
+
const adapter = (0, SecureStoreAdapter_1.createSecureStoreAdapter)(mockSecureStore);
|
|
35
|
+
await adapter.deleteItem("test-key");
|
|
36
|
+
(0, vitest_1.expect)(mockSecureStore.deleteItemAsync).toHaveBeenCalledWith("test-key");
|
|
37
|
+
});
|
|
38
|
+
(0, vitest_1.it)("returns null when key not found", async () => {
|
|
39
|
+
const mockSecureStore = {
|
|
40
|
+
getItemAsync: vitest_1.vi.fn().mockResolvedValue(null),
|
|
41
|
+
setItemAsync: vitest_1.vi.fn(),
|
|
42
|
+
deleteItemAsync: vitest_1.vi.fn(),
|
|
43
|
+
};
|
|
44
|
+
const adapter = (0, SecureStoreAdapter_1.createSecureStoreAdapter)(mockSecureStore);
|
|
45
|
+
const result = await adapter.getItem("nonexistent");
|
|
46
|
+
(0, vitest_1.expect)(result).toBeNull();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
(0, vitest_1.describe)("error handling", () => {
|
|
50
|
+
(0, vitest_1.it)("propagates getItemAsync errors", async () => {
|
|
51
|
+
const mockSecureStore = {
|
|
52
|
+
getItemAsync: vitest_1.vi.fn().mockRejectedValue(new Error("Storage error")),
|
|
53
|
+
setItemAsync: vitest_1.vi.fn(),
|
|
54
|
+
deleteItemAsync: vitest_1.vi.fn(),
|
|
55
|
+
};
|
|
56
|
+
const adapter = (0, SecureStoreAdapter_1.createSecureStoreAdapter)(mockSecureStore);
|
|
57
|
+
await (0, vitest_1.expect)(adapter.getItem("test-key")).rejects.toThrow("Storage error");
|
|
58
|
+
});
|
|
59
|
+
(0, vitest_1.it)("propagates setItemAsync errors", async () => {
|
|
60
|
+
const mockSecureStore = {
|
|
61
|
+
getItemAsync: vitest_1.vi.fn(),
|
|
62
|
+
setItemAsync: vitest_1.vi.fn().mockRejectedValue(new Error("Write error")),
|
|
63
|
+
deleteItemAsync: vitest_1.vi.fn(),
|
|
64
|
+
};
|
|
65
|
+
const adapter = (0, SecureStoreAdapter_1.createSecureStoreAdapter)(mockSecureStore);
|
|
66
|
+
await (0, vitest_1.expect)(adapter.setItem("key", "value")).rejects.toThrow("Write error");
|
|
67
|
+
});
|
|
68
|
+
(0, vitest_1.it)("propagates deleteItemAsync errors", async () => {
|
|
69
|
+
const mockSecureStore = {
|
|
70
|
+
getItemAsync: vitest_1.vi.fn(),
|
|
71
|
+
setItemAsync: vitest_1.vi.fn(),
|
|
72
|
+
deleteItemAsync: vitest_1.vi.fn().mockRejectedValue(new Error("Delete error")),
|
|
73
|
+
};
|
|
74
|
+
const adapter = (0, SecureStoreAdapter_1.createSecureStoreAdapter)(mockSecureStore);
|
|
75
|
+
await (0, vitest_1.expect)(adapter.deleteItem("key")).rejects.toThrow("Delete error");
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
(0, vitest_1.describe)("createMemoryStorage", () => {
|
|
80
|
+
(0, vitest_1.it)("stores and retrieves values", async () => {
|
|
81
|
+
const storage = (0, SecureStoreAdapter_1.createMemoryStorage)();
|
|
82
|
+
await storage.setItem("key1", "value1");
|
|
83
|
+
const result = await storage.getItem("key1");
|
|
84
|
+
(0, vitest_1.expect)(result).toBe("value1");
|
|
85
|
+
});
|
|
86
|
+
(0, vitest_1.it)("returns null for non-existent keys", async () => {
|
|
87
|
+
const storage = (0, SecureStoreAdapter_1.createMemoryStorage)();
|
|
88
|
+
const result = await storage.getItem("nonexistent");
|
|
89
|
+
(0, vitest_1.expect)(result).toBeNull();
|
|
90
|
+
});
|
|
91
|
+
(0, vitest_1.it)("deletes values", async () => {
|
|
92
|
+
const storage = (0, SecureStoreAdapter_1.createMemoryStorage)();
|
|
93
|
+
await storage.setItem("key", "value");
|
|
94
|
+
await storage.deleteItem("key");
|
|
95
|
+
const result = await storage.getItem("key");
|
|
96
|
+
(0, vitest_1.expect)(result).toBeNull();
|
|
97
|
+
});
|
|
98
|
+
(0, vitest_1.it)("overwrites existing values", async () => {
|
|
99
|
+
const storage = (0, SecureStoreAdapter_1.createMemoryStorage)();
|
|
100
|
+
await storage.setItem("key", "first");
|
|
101
|
+
await storage.setItem("key", "second");
|
|
102
|
+
const result = await storage.getItem("key");
|
|
103
|
+
(0, vitest_1.expect)(result).toBe("second");
|
|
104
|
+
});
|
|
105
|
+
(0, vitest_1.it)("isolates storage between instances", async () => {
|
|
106
|
+
const storage1 = (0, SecureStoreAdapter_1.createMemoryStorage)();
|
|
107
|
+
const storage2 = (0, SecureStoreAdapter_1.createMemoryStorage)();
|
|
108
|
+
await storage1.setItem("key", "value1");
|
|
109
|
+
await storage2.setItem("key", "value2");
|
|
110
|
+
(0, vitest_1.expect)(await storage1.getItem("key")).toBe("value1");
|
|
111
|
+
(0, vitest_1.expect)(await storage2.getItem("key")).toBe("value2");
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=SecureStoreAdapter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecureStoreAdapter.test.js","sourceRoot":"","sources":["../../src/storage/SecureStoreAdapter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,7 +62,7 @@ async function getDefaultStorage() {
|
|
|
62
62
|
hasAttemptedLoad = true;
|
|
63
63
|
try {
|
|
64
64
|
// Dynamically import expo-secure-store
|
|
65
|
-
const SecureStore = await Promise.resolve().then(() => __importStar(require(
|
|
65
|
+
const SecureStore = await Promise.resolve().then(() => __importStar(require("expo-secure-store")));
|
|
66
66
|
defaultStorageInstance = {
|
|
67
67
|
async getItem(key) {
|
|
68
68
|
return SecureStore.getItemAsync(key);
|
|
@@ -78,9 +78,9 @@ async function getDefaultStorage() {
|
|
|
78
78
|
}
|
|
79
79
|
catch {
|
|
80
80
|
// expo-secure-store not available, fall back to memory storage
|
|
81
|
-
console.warn(
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
console.warn("[Harken] expo-secure-store not available. Using in-memory storage. " +
|
|
82
|
+
"Anonymous IDs will not persist across app restarts. " +
|
|
83
|
+
"Install expo-secure-store for persistent storage.");
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
// Fall back to memory storage
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultStorage.test.d.ts","sourceRoot":"","sources":["../../src/storage/defaultStorage.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const vitest_1 = require("vitest");
|
|
37
|
+
// We need to test the module in isolation, so we use dynamic imports
|
|
38
|
+
// and reset the module state between tests
|
|
39
|
+
(0, vitest_1.describe)("defaultStorage", () => {
|
|
40
|
+
(0, vitest_1.beforeEach)(() => {
|
|
41
|
+
vitest_1.vi.resetModules();
|
|
42
|
+
});
|
|
43
|
+
(0, vitest_1.afterEach)(() => {
|
|
44
|
+
vitest_1.vi.restoreAllMocks();
|
|
45
|
+
});
|
|
46
|
+
(0, vitest_1.describe)("getDefaultStorage", () => {
|
|
47
|
+
(0, vitest_1.it)("uses SecureStore when available", async () => {
|
|
48
|
+
// Mock expo-secure-store to be available
|
|
49
|
+
vitest_1.vi.doMock("expo-secure-store", () => ({
|
|
50
|
+
getItemAsync: vitest_1.vi.fn().mockResolvedValue("secure-value"),
|
|
51
|
+
setItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
52
|
+
deleteItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
53
|
+
}));
|
|
54
|
+
const { getDefaultStorage } = await Promise.resolve().then(() => __importStar(require("./defaultStorage")));
|
|
55
|
+
const storage = await getDefaultStorage();
|
|
56
|
+
// The storage should use SecureStore
|
|
57
|
+
const result = await storage.getItem("test-key");
|
|
58
|
+
// Since we mocked getItemAsync to return "secure-value"
|
|
59
|
+
(0, vitest_1.expect)(result).toBe("secure-value");
|
|
60
|
+
});
|
|
61
|
+
(0, vitest_1.it)("falls back to memory storage when SecureStore unavailable", async () => {
|
|
62
|
+
// Mock expo-secure-store to throw (simulating it not being installed)
|
|
63
|
+
vitest_1.vi.doMock("expo-secure-store", () => {
|
|
64
|
+
throw new Error("Cannot find module 'expo-secure-store'");
|
|
65
|
+
});
|
|
66
|
+
// Suppress console.warn for this test
|
|
67
|
+
const warnSpy = vitest_1.vi.spyOn(console, "warn").mockImplementation(() => { });
|
|
68
|
+
const { getDefaultStorage } = await Promise.resolve().then(() => __importStar(require("./defaultStorage")));
|
|
69
|
+
const storage = await getDefaultStorage();
|
|
70
|
+
// Should fall back to memory storage and warn
|
|
71
|
+
(0, vitest_1.expect)(warnSpy).toHaveBeenCalledWith(vitest_1.expect.stringContaining("expo-secure-store not available"));
|
|
72
|
+
// Memory storage should work
|
|
73
|
+
await storage.setItem("key", "value");
|
|
74
|
+
const result = await storage.getItem("key");
|
|
75
|
+
(0, vitest_1.expect)(result).toBe("value");
|
|
76
|
+
});
|
|
77
|
+
(0, vitest_1.it)("caches the storage instance", async () => {
|
|
78
|
+
vitest_1.vi.doMock("expo-secure-store", () => ({
|
|
79
|
+
getItemAsync: vitest_1.vi.fn().mockResolvedValue(null),
|
|
80
|
+
setItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
81
|
+
deleteItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
82
|
+
}));
|
|
83
|
+
const { getDefaultStorage } = await Promise.resolve().then(() => __importStar(require("./defaultStorage")));
|
|
84
|
+
const storage1 = await getDefaultStorage();
|
|
85
|
+
const storage2 = await getDefaultStorage();
|
|
86
|
+
// Should return the same instance
|
|
87
|
+
(0, vitest_1.expect)(storage1).toBe(storage2);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
(0, vitest_1.describe)("createDefaultStorage", () => {
|
|
91
|
+
(0, vitest_1.it)("returns a lazy wrapper that initializes on first use", async () => {
|
|
92
|
+
const mockGetItemAsync = vitest_1.vi.fn().mockResolvedValue("lazy-value");
|
|
93
|
+
vitest_1.vi.doMock("expo-secure-store", () => ({
|
|
94
|
+
getItemAsync: mockGetItemAsync,
|
|
95
|
+
setItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
96
|
+
deleteItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
97
|
+
}));
|
|
98
|
+
const { createDefaultStorage } = await Promise.resolve().then(() => __importStar(require("./defaultStorage")));
|
|
99
|
+
const storage = createDefaultStorage();
|
|
100
|
+
// SecureStore shouldn't be called yet (lazy)
|
|
101
|
+
(0, vitest_1.expect)(mockGetItemAsync).not.toHaveBeenCalled();
|
|
102
|
+
// First use triggers initialization
|
|
103
|
+
const result = await storage.getItem("test-key");
|
|
104
|
+
(0, vitest_1.expect)(mockGetItemAsync).toHaveBeenCalledWith("test-key");
|
|
105
|
+
(0, vitest_1.expect)(result).toBe("lazy-value");
|
|
106
|
+
});
|
|
107
|
+
(0, vitest_1.it)("caches initialization across method calls", async () => {
|
|
108
|
+
let initCount = 0;
|
|
109
|
+
vitest_1.vi.doMock("expo-secure-store", () => {
|
|
110
|
+
initCount++;
|
|
111
|
+
return {
|
|
112
|
+
getItemAsync: vitest_1.vi.fn().mockResolvedValue(null),
|
|
113
|
+
setItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
114
|
+
deleteItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
115
|
+
};
|
|
116
|
+
});
|
|
117
|
+
const { createDefaultStorage } = await Promise.resolve().then(() => __importStar(require("./defaultStorage")));
|
|
118
|
+
const storage = createDefaultStorage();
|
|
119
|
+
// Multiple operations should only initialize once
|
|
120
|
+
await storage.getItem("key1");
|
|
121
|
+
await storage.setItem("key2", "value");
|
|
122
|
+
await storage.deleteItem("key3");
|
|
123
|
+
// Module should only be imported once
|
|
124
|
+
(0, vitest_1.expect)(initCount).toBe(1);
|
|
125
|
+
});
|
|
126
|
+
(0, vitest_1.it)("handles concurrent initialization correctly", async () => {
|
|
127
|
+
vitest_1.vi.doMock("expo-secure-store", () => ({
|
|
128
|
+
getItemAsync: vitest_1.vi.fn().mockResolvedValue("concurrent-value"),
|
|
129
|
+
setItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
130
|
+
deleteItemAsync: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
131
|
+
}));
|
|
132
|
+
const { createDefaultStorage } = await Promise.resolve().then(() => __importStar(require("./defaultStorage")));
|
|
133
|
+
const storage = createDefaultStorage();
|
|
134
|
+
// Concurrent calls should all succeed
|
|
135
|
+
const [result1, result2, result3] = await Promise.all([
|
|
136
|
+
storage.getItem("key1"),
|
|
137
|
+
storage.getItem("key2"),
|
|
138
|
+
storage.getItem("key3"),
|
|
139
|
+
]);
|
|
140
|
+
(0, vitest_1.expect)(result1).toBe("concurrent-value");
|
|
141
|
+
(0, vitest_1.expect)(result2).toBe("concurrent-value");
|
|
142
|
+
(0, vitest_1.expect)(result3).toBe("concurrent-value");
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
(0, vitest_1.describe)("error handling", () => {
|
|
146
|
+
(0, vitest_1.it)("does not crash when SecureStore throws during operations", async () => {
|
|
147
|
+
vitest_1.vi.doMock("expo-secure-store", () => ({
|
|
148
|
+
getItemAsync: vitest_1.vi.fn().mockRejectedValue(new Error("SecureStore error")),
|
|
149
|
+
setItemAsync: vitest_1.vi.fn().mockRejectedValue(new Error("SecureStore error")),
|
|
150
|
+
deleteItemAsync: vitest_1.vi.fn().mockRejectedValue(new Error("SecureStore error")),
|
|
151
|
+
}));
|
|
152
|
+
const { createDefaultStorage } = await Promise.resolve().then(() => __importStar(require("./defaultStorage")));
|
|
153
|
+
const storage = createDefaultStorage();
|
|
154
|
+
// Errors from SecureStore should propagate (not swallowed)
|
|
155
|
+
await (0, vitest_1.expect)(storage.getItem("key")).rejects.toThrow("SecureStore error");
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=defaultStorage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultStorage.test.js","sourceRoot":"","sources":["../../src/storage/defaultStorage.test.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export type { SecureStorage } from
|
|
2
|
-
export { STORAGE_KEYS } from
|
|
3
|
-
export { createSecureStoreAdapter, createMemoryStorage } from
|
|
4
|
-
export { createDefaultStorage } from
|
|
5
|
-
export { IdentityStore } from
|
|
1
|
+
export type { SecureStorage } from "./types";
|
|
2
|
+
export { STORAGE_KEYS } from "./types";
|
|
3
|
+
export { createSecureStoreAdapter, createMemoryStorage } from "./SecureStoreAdapter";
|
|
4
|
+
export { createDefaultStorage } from "./defaultStorage";
|
|
5
|
+
export { IdentityStore } from "./IdentityStore";
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/storage/types.js
CHANGED
package/dist/theme/defaults.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { HarkenColors, HarkenTypography, HarkenSpacing, HarkenRadii, HarkenTheme } from
|
|
1
|
+
import type { HarkenColors, HarkenTypography, HarkenSpacing, HarkenRadii, HarkenSizing, HarkenOpacity, HarkenTheme } from "./types";
|
|
2
2
|
/**
|
|
3
3
|
* Default light mode colors.
|
|
4
4
|
* Neutral, accessible palette with no hard-coded branding.
|
|
@@ -31,13 +31,24 @@ export declare const lightTheme: HarkenTheme;
|
|
|
31
31
|
* Complete default dark theme.
|
|
32
32
|
*/
|
|
33
33
|
export declare const darkTheme: HarkenTheme;
|
|
34
|
+
/** Extended theme type that includes optional sizing and opacity */
|
|
35
|
+
type ExtendedHarkenTheme = HarkenTheme & {
|
|
36
|
+
sizing?: Partial<HarkenSizing>;
|
|
37
|
+
opacity?: Partial<HarkenOpacity>;
|
|
38
|
+
};
|
|
34
39
|
/**
|
|
35
40
|
* Creates a theme by merging overrides with a base theme.
|
|
41
|
+
*
|
|
42
|
+
* Note: For full resolved theme with component aliases, use `resolveTheme` instead.
|
|
43
|
+
* This function creates a raw HarkenTheme suitable for passing to resolveTheme.
|
|
36
44
|
*/
|
|
37
|
-
export declare function createTheme(baseTheme:
|
|
45
|
+
export declare function createTheme(baseTheme: ExtendedHarkenTheme, overrides?: {
|
|
38
46
|
colors?: Partial<HarkenColors>;
|
|
39
47
|
typography?: Partial<HarkenTypography>;
|
|
40
48
|
spacing?: Partial<HarkenSpacing>;
|
|
41
49
|
radii?: Partial<HarkenRadii>;
|
|
42
|
-
|
|
50
|
+
sizing?: Partial<HarkenSizing>;
|
|
51
|
+
opacity?: Partial<HarkenOpacity>;
|
|
52
|
+
}): ExtendedHarkenTheme;
|
|
53
|
+
export {};
|
|
43
54
|
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/theme/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/theme/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,YAqBzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,YAqBxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,gBAiB/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,aAO5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,WAO1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,WAKxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,WAKvB,CAAC;AAEF,oEAAoE;AACpE,KAAK,mBAAmB,GAAG,WAAW,GAAG;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAClC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,mBAAmB,EAC9B,SAAS,CAAC,EAAE;IACV,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAClC,GACA,mBAAmB,CAyBrB"}
|
package/dist/theme/defaults.js
CHANGED
|
@@ -7,68 +7,70 @@ exports.createTheme = createTheme;
|
|
|
7
7
|
* Neutral, accessible palette with no hard-coded branding.
|
|
8
8
|
*/
|
|
9
9
|
exports.lightColors = {
|
|
10
|
-
primary:
|
|
11
|
-
primaryPressed:
|
|
12
|
-
background:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
10
|
+
primary: "#2563EB", // Blue 600
|
|
11
|
+
primaryPressed: "#1D4ED8", // Blue 700
|
|
12
|
+
background: "#FFFFFF",
|
|
13
|
+
surface: "#F9FAFB", // Gray 50 - container/modal surface
|
|
14
|
+
backgroundSecondary: "#F9FAFB", // Gray 50 - alias for surface (backwards compat)
|
|
15
|
+
text: "#111827", // Gray 900
|
|
16
|
+
textSecondary: "#6B7280", // Gray 500
|
|
17
|
+
textPlaceholder: "#9CA3AF", // Gray 400
|
|
18
|
+
textOnPrimary: "#FFFFFF",
|
|
19
|
+
border: "#E5E7EB", // Gray 200
|
|
20
|
+
borderFocused: "#2563EB", // Blue 600
|
|
21
|
+
error: "#DC2626", // Red 600
|
|
22
|
+
success: "#16A34A", // Green 600
|
|
23
|
+
warning: "#D97706", // Amber 600
|
|
24
|
+
info: "#2563EB", // Blue 600
|
|
25
|
+
overlay: "rgba(0, 0, 0, 0.3)",
|
|
26
|
+
overlayDark: "rgba(0, 0, 0, 0.6)",
|
|
27
|
+
accent1: "#2563EB", // Blue 600 (camera)
|
|
28
|
+
accent2: "#16A34A", // Green 600 (library)
|
|
29
|
+
accent3: "#D97706", // Amber 600 (files)
|
|
29
30
|
};
|
|
30
31
|
/**
|
|
31
32
|
* Default dark mode colors.
|
|
32
33
|
* Inverted palette optimized for dark backgrounds.
|
|
33
34
|
*/
|
|
34
35
|
exports.darkColors = {
|
|
35
|
-
primary:
|
|
36
|
-
primaryPressed:
|
|
37
|
-
background:
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
36
|
+
primary: "#3B82F6", // Blue 500
|
|
37
|
+
primaryPressed: "#2563EB", // Blue 600
|
|
38
|
+
background: "#111827", // Gray 900
|
|
39
|
+
surface: "#1F2937", // Gray 800 - container/modal surface
|
|
40
|
+
backgroundSecondary: "#1F2937", // Gray 800 - alias for surface (backwards compat)
|
|
41
|
+
text: "#F9FAFB", // Gray 50
|
|
42
|
+
textSecondary: "#9CA3AF", // Gray 400
|
|
43
|
+
textPlaceholder: "#6B7280", // Gray 500
|
|
44
|
+
textOnPrimary: "#FFFFFF",
|
|
45
|
+
border: "#374151", // Gray 700
|
|
46
|
+
borderFocused: "#3B82F6", // Blue 500
|
|
47
|
+
error: "#EF4444", // Red 500
|
|
48
|
+
success: "#22C55E", // Green 500
|
|
49
|
+
warning: "#F59E0B", // Amber 500
|
|
50
|
+
info: "#3B82F6", // Blue 500
|
|
51
|
+
overlay: "rgba(0, 0, 0, 0.5)",
|
|
52
|
+
overlayDark: "rgba(0, 0, 0, 0.8)",
|
|
53
|
+
accent1: "#3B82F6", // Blue 500 (camera)
|
|
54
|
+
accent2: "#22C55E", // Green 500 (library)
|
|
55
|
+
accent3: "#F59E0B", // Amber 500 (files)
|
|
54
56
|
};
|
|
55
57
|
/**
|
|
56
58
|
* Default typography settings.
|
|
57
59
|
* Uses system font for maximum compatibility.
|
|
58
60
|
*/
|
|
59
61
|
exports.defaultTypography = {
|
|
60
|
-
fontFamily:
|
|
62
|
+
fontFamily: "System",
|
|
61
63
|
fontFamilyHeading: undefined, // Falls back to fontFamily
|
|
62
64
|
titleSize: 20,
|
|
63
65
|
titleLineHeight: 1.3,
|
|
64
|
-
titleWeight:
|
|
66
|
+
titleWeight: "600",
|
|
65
67
|
bodySize: 16,
|
|
66
68
|
bodyLineHeight: 1.5,
|
|
67
|
-
bodyWeight:
|
|
69
|
+
bodyWeight: "normal",
|
|
68
70
|
labelSize: 14,
|
|
69
|
-
labelWeight:
|
|
71
|
+
labelWeight: "500",
|
|
70
72
|
captionSize: 12,
|
|
71
|
-
captionWeight:
|
|
73
|
+
captionWeight: "normal",
|
|
72
74
|
};
|
|
73
75
|
/**
|
|
74
76
|
* Default spacing scale.
|
|
@@ -113,16 +115,29 @@ exports.darkTheme = {
|
|
|
113
115
|
};
|
|
114
116
|
/**
|
|
115
117
|
* Creates a theme by merging overrides with a base theme.
|
|
118
|
+
*
|
|
119
|
+
* Note: For full resolved theme with component aliases, use `resolveTheme` instead.
|
|
120
|
+
* This function creates a raw HarkenTheme suitable for passing to resolveTheme.
|
|
116
121
|
*/
|
|
117
122
|
function createTheme(baseTheme, overrides) {
|
|
118
123
|
if (!overrides) {
|
|
119
124
|
return baseTheme;
|
|
120
125
|
}
|
|
126
|
+
// Merge sizing if either base or overrides has it
|
|
127
|
+
const baseSizing = baseTheme.sizing;
|
|
128
|
+
const overrideSizing = overrides.sizing;
|
|
129
|
+
const mergedSizing = baseSizing || overrideSizing ? { ...baseSizing, ...overrideSizing } : undefined;
|
|
130
|
+
// Merge opacity if either base or overrides has it
|
|
131
|
+
const baseOpacity = baseTheme.opacity;
|
|
132
|
+
const overrideOpacity = overrides.opacity;
|
|
133
|
+
const mergedOpacity = baseOpacity || overrideOpacity ? { ...baseOpacity, ...overrideOpacity } : undefined;
|
|
121
134
|
return {
|
|
122
135
|
colors: { ...baseTheme.colors, ...overrides.colors },
|
|
123
136
|
typography: { ...baseTheme.typography, ...overrides.typography },
|
|
124
137
|
spacing: { ...baseTheme.spacing, ...overrides.spacing },
|
|
125
138
|
radii: { ...baseTheme.radii, ...overrides.radii },
|
|
139
|
+
...(mergedSizing && { sizing: mergedSizing }),
|
|
140
|
+
...(mergedOpacity && { opacity: mergedOpacity }),
|
|
126
141
|
};
|
|
127
142
|
}
|
|
128
143
|
//# sourceMappingURL=defaults.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/theme/defaults.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/theme/defaults.ts"],"names":[],"mappings":"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"}
|
package/dist/theme/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export type { HarkenColors, HarkenTypography, HarkenSpacing, HarkenRadii, HarkenTheme, PartialHarkenTheme, TextWeight, ThemeMode, } from
|
|
2
|
-
export { lightColors, darkColors, defaultTypography, defaultSpacing, defaultRadii, lightTheme, darkTheme, createTheme, } from
|
|
1
|
+
export type { HarkenColors, HarkenTypography, HarkenSpacing, HarkenRadii, HarkenSizing, HarkenOpacity, HarkenTheme, PartialHarkenTheme, TextWeight, ThemeMode, ResolvedHarkenColors, ResolvedHarkenSpacing, ResolvedHarkenRadii, ResolvedHarkenSizing, ResolvedHarkenOpacity, ResolvedHarkenTheme, HarkenComponentTokens, } from "./types";
|
|
2
|
+
export { lightColors, darkColors, defaultTypography, defaultSpacing, defaultRadii, lightTheme, darkTheme, createTheme, } from "./defaults";
|
|
3
|
+
export { resolveTheme } from "./resolver";
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,SAAS,EAET,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/theme/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createTheme = exports.darkTheme = exports.lightTheme = exports.defaultRadii = exports.defaultSpacing = exports.defaultTypography = exports.darkColors = exports.lightColors = void 0;
|
|
3
|
+
exports.resolveTheme = exports.createTheme = exports.darkTheme = exports.lightTheme = exports.defaultRadii = exports.defaultSpacing = exports.defaultTypography = exports.darkColors = exports.lightColors = void 0;
|
|
4
4
|
// Default theme exports
|
|
5
5
|
var defaults_1 = require("./defaults");
|
|
6
6
|
Object.defineProperty(exports, "lightColors", { enumerable: true, get: function () { return defaults_1.lightColors; } });
|
|
@@ -11,4 +11,7 @@ Object.defineProperty(exports, "defaultRadii", { enumerable: true, get: function
|
|
|
11
11
|
Object.defineProperty(exports, "lightTheme", { enumerable: true, get: function () { return defaults_1.lightTheme; } });
|
|
12
12
|
Object.defineProperty(exports, "darkTheme", { enumerable: true, get: function () { return defaults_1.darkTheme; } });
|
|
13
13
|
Object.defineProperty(exports, "createTheme", { enumerable: true, get: function () { return defaults_1.createTheme; } });
|
|
14
|
+
// Theme resolver
|
|
15
|
+
var resolver_1 = require("./resolver");
|
|
16
|
+
Object.defineProperty(exports, "resolveTheme", { enumerable: true, get: function () { return resolver_1.resolveTheme; } });
|
|
14
17
|
//# sourceMappingURL=index.js.map
|
package/dist/theme/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":";;;AAsBA,wBAAwB;AACxB,uCASoB;AARlB,uGAAA,WAAW,OAAA;AACX,sGAAA,UAAU,OAAA;AACV,6GAAA,iBAAiB,OAAA;AACjB,0GAAA,cAAc,OAAA;AACd,wGAAA,YAAY,OAAA;AACZ,sGAAA,UAAU,OAAA;AACV,qGAAA,SAAS,OAAA;AACT,uGAAA,WAAW,OAAA;AAGb,iBAAiB;AACjB,uCAA0C;AAAjC,wGAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { HarkenTheme, PartialHarkenTheme, ResolvedHarkenTheme } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves a theme by merging user overrides with a base theme and applying
|
|
4
|
+
* all fallback rules. Returns a fully-resolved theme where all values are
|
|
5
|
+
* guaranteed to exist.
|
|
6
|
+
*
|
|
7
|
+
* This is the single source of truth for fallback logic. Components should
|
|
8
|
+
* never do their own `??` checks - they receive a resolved theme with all
|
|
9
|
+
* values populated.
|
|
10
|
+
*
|
|
11
|
+
* @param baseTheme - The base theme (light or dark)
|
|
12
|
+
* @param overrides - User-provided partial overrides
|
|
13
|
+
* @returns A fully resolved theme with all component tokens populated
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveTheme(baseTheme: HarkenTheme, overrides?: PartialHarkenTheme): ResolvedHarkenTheme;
|
|
16
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/theme/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOV,WAAW,EACX,kBAAkB,EAMlB,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAwYjB;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,WAAW,EACtB,SAAS,CAAC,EAAE,kBAAkB,GAC7B,mBAAmB,CAqBrB"}
|