@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.
Files changed (278) hide show
  1. package/README.md +44 -7
  2. package/app.plugin.cjs +12 -17
  3. package/dist/__mocks__/async-storage.d.ts +16 -0
  4. package/dist/__mocks__/async-storage.d.ts.map +1 -0
  5. package/dist/__mocks__/async-storage.js +39 -0
  6. package/dist/__mocks__/async-storage.js.map +1 -0
  7. package/dist/__mocks__/expo-document-picker.d.ts +26 -0
  8. package/dist/__mocks__/expo-document-picker.d.ts.map +1 -0
  9. package/dist/__mocks__/expo-document-picker.js +25 -0
  10. package/dist/__mocks__/expo-document-picker.js.map +1 -0
  11. package/dist/__mocks__/expo-file-system.d.ts +42 -0
  12. package/dist/__mocks__/expo-file-system.d.ts.map +1 -0
  13. package/dist/__mocks__/expo-file-system.js +37 -0
  14. package/dist/__mocks__/expo-file-system.js.map +1 -0
  15. package/dist/__mocks__/expo-image-picker.d.ts +30 -0
  16. package/dist/__mocks__/expo-image-picker.d.ts.map +1 -0
  17. package/dist/__mocks__/expo-image-picker.js +30 -0
  18. package/dist/__mocks__/expo-image-picker.js.map +1 -0
  19. package/dist/__mocks__/expo-secure-store.d.ts +15 -0
  20. package/dist/__mocks__/expo-secure-store.d.ts.map +1 -0
  21. package/dist/__mocks__/expo-secure-store.js +30 -0
  22. package/dist/__mocks__/expo-secure-store.js.map +1 -0
  23. package/dist/__mocks__/react-native.d.ts +73 -0
  24. package/dist/__mocks__/react-native.d.ts.map +1 -0
  25. package/dist/__mocks__/react-native.js +45 -0
  26. package/dist/__mocks__/react-native.js.map +1 -0
  27. package/dist/api/client.d.ts +8 -8
  28. package/dist/api/client.d.ts.map +1 -1
  29. package/dist/api/client.js +17 -19
  30. package/dist/api/client.js.map +1 -1
  31. package/dist/api/client.test.d.ts +2 -0
  32. package/dist/api/client.test.d.ts.map +1 -0
  33. package/dist/api/client.test.js +417 -0
  34. package/dist/api/client.test.js.map +1 -0
  35. package/dist/api/errors.d.ts +3 -3
  36. package/dist/api/errors.d.ts.map +1 -1
  37. package/dist/api/errors.js +3 -3
  38. package/dist/api/errors.js.map +1 -1
  39. package/dist/api/errors.test.d.ts +2 -0
  40. package/dist/api/errors.test.d.ts.map +1 -0
  41. package/dist/api/errors.test.js +155 -0
  42. package/dist/api/errors.test.js.map +1 -0
  43. package/dist/api/index.d.ts +6 -6
  44. package/dist/api/index.d.ts.map +1 -1
  45. package/dist/api/index.js.map +1 -1
  46. package/dist/api/retry.d.ts +1 -1
  47. package/dist/api/retry.d.ts.map +1 -1
  48. package/dist/api/retry.js.map +1 -1
  49. package/dist/api/retry.test.d.ts +2 -0
  50. package/dist/api/retry.test.d.ts.map +1 -0
  51. package/dist/api/retry.test.js +193 -0
  52. package/dist/api/retry.test.js.map +1 -0
  53. package/dist/attachments/FeedbackSheet.d.ts +36 -13
  54. package/dist/attachments/FeedbackSheet.d.ts.map +1 -1
  55. package/dist/attachments/FeedbackSheet.js +50 -30
  56. package/dist/attachments/FeedbackSheet.js.map +1 -1
  57. package/dist/attachments/index.d.ts +2 -2
  58. package/dist/components/AttachmentGrid.d.ts +12 -4
  59. package/dist/components/AttachmentGrid.d.ts.map +1 -1
  60. package/dist/components/AttachmentGrid.js +44 -34
  61. package/dist/components/AttachmentGrid.js.map +1 -1
  62. package/dist/components/AttachmentPicker.d.ts +3 -3
  63. package/dist/components/AttachmentPicker.d.ts.map +1 -1
  64. package/dist/components/AttachmentPicker.js +34 -36
  65. package/dist/components/AttachmentPicker.js.map +1 -1
  66. package/dist/components/AttachmentPreview.d.ts +10 -4
  67. package/dist/components/AttachmentPreview.d.ts.map +1 -1
  68. package/dist/components/AttachmentPreview.js +48 -34
  69. package/dist/components/AttachmentPreview.js.map +1 -1
  70. package/dist/components/CategorySelector.d.ts +3 -3
  71. package/dist/components/CategorySelector.d.ts.map +1 -1
  72. package/dist/components/CategorySelector.js +21 -27
  73. package/dist/components/CategorySelector.js.map +1 -1
  74. package/dist/components/FeedbackForm.d.ts +3 -3
  75. package/dist/components/FeedbackForm.d.ts.map +1 -1
  76. package/dist/components/FeedbackForm.js +7 -8
  77. package/dist/components/FeedbackForm.js.map +1 -1
  78. package/dist/components/FeedbackSheet.d.ts +34 -11
  79. package/dist/components/FeedbackSheet.d.ts.map +1 -1
  80. package/dist/components/FeedbackSheet.js +46 -28
  81. package/dist/components/FeedbackSheet.js.map +1 -1
  82. package/dist/components/ThemedButton.d.ts +16 -5
  83. package/dist/components/ThemedButton.d.ts.map +1 -1
  84. package/dist/components/ThemedButton.js +38 -29
  85. package/dist/components/ThemedButton.js.map +1 -1
  86. package/dist/components/ThemedText.d.ts +3 -3
  87. package/dist/components/ThemedText.d.ts.map +1 -1
  88. package/dist/components/ThemedText.js +1 -1
  89. package/dist/components/ThemedText.js.map +1 -1
  90. package/dist/components/ThemedTextInput.d.ts +11 -2
  91. package/dist/components/ThemedTextInput.d.ts.map +1 -1
  92. package/dist/components/ThemedTextInput.js +19 -9
  93. package/dist/components/ThemedTextInput.js.map +1 -1
  94. package/dist/components/UploadStatusOverlay.d.ts +11 -3
  95. package/dist/components/UploadStatusOverlay.d.ts.map +1 -1
  96. package/dist/components/UploadStatusOverlay.js +59 -76
  97. package/dist/components/UploadStatusOverlay.js.map +1 -1
  98. package/dist/components/index.d.ts +18 -18
  99. package/dist/components/index.d.ts.map +1 -1
  100. package/dist/components/index.js.map +1 -1
  101. package/dist/context/HarkenContext.d.ts +20 -15
  102. package/dist/context/HarkenContext.d.ts.map +1 -1
  103. package/dist/context/HarkenContext.js +20 -17
  104. package/dist/context/HarkenContext.js.map +1 -1
  105. package/dist/context/index.d.ts +2 -2
  106. package/dist/domain/index.d.ts +2 -2
  107. package/dist/domain/index.d.ts.map +1 -1
  108. package/dist/domain/index.js.map +1 -1
  109. package/dist/hooks/index.d.ts +5 -5
  110. package/dist/hooks/useAnonymousId.js +1 -1
  111. package/dist/hooks/useAnonymousId.test.d.ts +2 -0
  112. package/dist/hooks/useAnonymousId.test.d.ts.map +1 -0
  113. package/dist/hooks/useAnonymousId.test.js +154 -0
  114. package/dist/hooks/useAnonymousId.test.js.map +1 -0
  115. package/dist/hooks/useAttachmentPicker.d.ts +3 -3
  116. package/dist/hooks/useAttachmentPicker.js +7 -7
  117. package/dist/hooks/useAttachmentStatus.d.ts +1 -1
  118. package/dist/hooks/useAttachmentStatus.d.ts.map +1 -1
  119. package/dist/hooks/useAttachmentStatus.js.map +1 -1
  120. package/dist/hooks/useAttachmentUpload.d.ts +2 -2
  121. package/dist/hooks/useAttachmentUpload.d.ts.map +1 -1
  122. package/dist/hooks/useAttachmentUpload.js +5 -5
  123. package/dist/hooks/useAttachmentUpload.js.map +1 -1
  124. package/dist/hooks/useAttachmentUpload.test.d.ts +2 -0
  125. package/dist/hooks/useAttachmentUpload.test.d.ts.map +1 -0
  126. package/dist/hooks/useAttachmentUpload.test.js +542 -0
  127. package/dist/hooks/useAttachmentUpload.test.js.map +1 -0
  128. package/dist/hooks/useFeedback.d.ts +4 -4
  129. package/dist/hooks/useFeedback.d.ts.map +1 -1
  130. package/dist/hooks/useFeedback.js +3 -5
  131. package/dist/hooks/useFeedback.js.map +1 -1
  132. package/dist/hooks/useFeedback.test.d.ts +2 -0
  133. package/dist/hooks/useFeedback.test.d.ts.map +1 -0
  134. package/dist/hooks/useFeedback.test.js +299 -0
  135. package/dist/hooks/useFeedback.test.js.map +1 -0
  136. package/dist/hooks/useHarkenContext.d.ts +1 -1
  137. package/dist/hooks/useHarkenContext.js +1 -1
  138. package/dist/hooks/useHarkenTheme.d.ts +27 -3
  139. package/dist/hooks/useHarkenTheme.d.ts.map +1 -1
  140. package/dist/hooks/useHarkenTheme.js +26 -2
  141. package/dist/hooks/useHarkenTheme.js.map +1 -1
  142. package/dist/index.d.ts +28 -28
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js.map +1 -1
  145. package/dist/services/index.d.ts +3 -3
  146. package/dist/services/index.d.ts.map +1 -1
  147. package/dist/services/index.js.map +1 -1
  148. package/dist/services/uploadQueueService.d.ts +2 -2
  149. package/dist/services/uploadQueueService.d.ts.map +1 -1
  150. package/dist/services/uploadQueueService.js +16 -17
  151. package/dist/services/uploadQueueService.js.map +1 -1
  152. package/dist/services/uploadQueueService.test.d.ts +2 -0
  153. package/dist/services/uploadQueueService.test.d.ts.map +1 -0
  154. package/dist/services/uploadQueueService.test.js +426 -0
  155. package/dist/services/uploadQueueService.test.js.map +1 -0
  156. package/dist/services/uploadQueueStorage.d.ts +1 -1
  157. package/dist/services/uploadQueueStorage.d.ts.map +1 -1
  158. package/dist/services/uploadQueueStorage.js +4 -4
  159. package/dist/services/uploadQueueStorage.js.map +1 -1
  160. package/dist/services/uploadQueueStorage.test.d.ts +2 -0
  161. package/dist/services/uploadQueueStorage.test.d.ts.map +1 -0
  162. package/dist/services/uploadQueueStorage.test.js +200 -0
  163. package/dist/services/uploadQueueStorage.test.js.map +1 -0
  164. package/dist/storage/IdentityStore.d.ts +1 -1
  165. package/dist/storage/IdentityStore.d.ts.map +1 -1
  166. package/dist/storage/IdentityStore.js.map +1 -1
  167. package/dist/storage/IdentityStore.test.d.ts +2 -0
  168. package/dist/storage/IdentityStore.test.d.ts.map +1 -0
  169. package/dist/storage/IdentityStore.test.js +176 -0
  170. package/dist/storage/IdentityStore.test.js.map +1 -0
  171. package/dist/storage/SecureStoreAdapter.d.ts +1 -1
  172. package/dist/storage/SecureStoreAdapter.test.d.ts +2 -0
  173. package/dist/storage/SecureStoreAdapter.test.d.ts.map +1 -0
  174. package/dist/storage/SecureStoreAdapter.test.js +114 -0
  175. package/dist/storage/SecureStoreAdapter.test.js.map +1 -0
  176. package/dist/storage/defaultStorage.d.ts +1 -1
  177. package/dist/storage/defaultStorage.js +4 -4
  178. package/dist/storage/defaultStorage.test.d.ts +2 -0
  179. package/dist/storage/defaultStorage.test.d.ts.map +1 -0
  180. package/dist/storage/defaultStorage.test.js +159 -0
  181. package/dist/storage/defaultStorage.test.js.map +1 -0
  182. package/dist/storage/index.d.ts +5 -5
  183. package/dist/storage/types.js +1 -1
  184. package/dist/theme/defaults.d.ts +14 -3
  185. package/dist/theme/defaults.d.ts.map +1 -1
  186. package/dist/theme/defaults.js +58 -43
  187. package/dist/theme/defaults.js.map +1 -1
  188. package/dist/theme/index.d.ts +3 -2
  189. package/dist/theme/index.d.ts.map +1 -1
  190. package/dist/theme/index.js +4 -1
  191. package/dist/theme/index.js.map +1 -1
  192. package/dist/theme/resolver.d.ts +16 -0
  193. package/dist/theme/resolver.d.ts.map +1 -0
  194. package/dist/theme/resolver.js +375 -0
  195. package/dist/theme/resolver.js.map +1 -0
  196. package/dist/theme/resolver.test.d.ts +2 -0
  197. package/dist/theme/resolver.test.d.ts.map +1 -0
  198. package/dist/theme/resolver.test.js +344 -0
  199. package/dist/theme/resolver.test.js.map +1 -0
  200. package/dist/theme/types.d.ts +378 -5
  201. package/dist/theme/types.d.ts.map +1 -1
  202. package/dist/types/config.d.ts +4 -4
  203. package/dist/types/index.d.ts +2 -2
  204. package/dist/utils/index.d.ts +1 -1
  205. package/dist/utils/uuid.d.ts.map +1 -1
  206. package/dist/utils/uuid.js +4 -5
  207. package/dist/utils/uuid.js.map +1 -1
  208. package/dist/utils/uuid.test.d.ts +2 -0
  209. package/dist/utils/uuid.test.d.ts.map +1 -0
  210. package/dist/utils/uuid.test.js +78 -0
  211. package/dist/utils/uuid.test.js.map +1 -0
  212. package/package.json +21 -13
  213. package/src/@types/expo-file-system-legacy.d.ts +3 -3
  214. package/src/__mocks__/async-storage.ts +46 -0
  215. package/src/__mocks__/expo-document-picker.ts +41 -0
  216. package/src/__mocks__/expo-file-system.ts +62 -0
  217. package/src/__mocks__/expo-image-picker.ts +48 -0
  218. package/src/__mocks__/expo-secure-store.ts +29 -0
  219. package/src/__mocks__/react-native.ts +46 -0
  220. package/src/api/client.test.ts +515 -0
  221. package/src/api/client.ts +45 -64
  222. package/src/api/errors.test.ts +193 -0
  223. package/src/api/errors.ts +7 -11
  224. package/src/api/index.ts +6 -10
  225. package/src/api/retry.test.ts +251 -0
  226. package/src/api/retry.ts +3 -6
  227. package/src/attachments/FeedbackSheet.tsx +100 -80
  228. package/src/attachments/index.ts +2 -2
  229. package/src/components/AttachmentGrid.tsx +54 -45
  230. package/src/components/AttachmentPicker.tsx +43 -54
  231. package/src/components/AttachmentPreview.tsx +51 -47
  232. package/src/components/CategorySelector.tsx +29 -35
  233. package/src/components/FeedbackForm.tsx +23 -35
  234. package/src/components/FeedbackSheet.tsx +89 -68
  235. package/src/components/ThemedButton.tsx +49 -47
  236. package/src/components/ThemedText.tsx +7 -10
  237. package/src/components/ThemedTextInput.tsx +23 -13
  238. package/src/components/UploadStatusOverlay.tsx +66 -89
  239. package/src/components/index.ts +18 -21
  240. package/src/context/HarkenContext.tsx +29 -28
  241. package/src/context/index.ts +2 -2
  242. package/src/domain/index.ts +2 -5
  243. package/src/domain/upload-queue.ts +5 -5
  244. package/src/hooks/index.ts +5 -5
  245. package/src/hooks/useAnonymousId.test.ts +189 -0
  246. package/src/hooks/useAnonymousId.ts +3 -3
  247. package/src/hooks/useAttachmentPicker.ts +12 -12
  248. package/src/hooks/useAttachmentStatus.ts +12 -16
  249. package/src/hooks/useAttachmentUpload.test.ts +632 -0
  250. package/src/hooks/useAttachmentUpload.ts +45 -54
  251. package/src/hooks/useFeedback.test.ts +376 -0
  252. package/src/hooks/useFeedback.ts +12 -14
  253. package/src/hooks/useHarkenContext.ts +4 -4
  254. package/src/hooks/useHarkenTheme.ts +30 -6
  255. package/src/index.ts +28 -52
  256. package/src/services/index.ts +3 -9
  257. package/src/services/uploadQueueService.test.ts +489 -0
  258. package/src/services/uploadQueueService.ts +40 -56
  259. package/src/services/uploadQueueStorage.test.ts +243 -0
  260. package/src/services/uploadQueueStorage.ts +7 -9
  261. package/src/storage/IdentityStore.test.ts +173 -0
  262. package/src/storage/IdentityStore.ts +4 -5
  263. package/src/storage/SecureStoreAdapter.test.ts +147 -0
  264. package/src/storage/SecureStoreAdapter.ts +1 -1
  265. package/src/storage/defaultStorage.test.ts +159 -0
  266. package/src/storage/defaultStorage.ts +6 -6
  267. package/src/storage/index.ts +5 -5
  268. package/src/storage/types.ts +1 -1
  269. package/src/theme/defaults.ts +75 -46
  270. package/src/theme/index.ts +15 -2
  271. package/src/theme/resolver.test.ts +411 -0
  272. package/src/theme/resolver.ts +446 -0
  273. package/src/theme/types.ts +453 -15
  274. package/src/types/config.ts +4 -4
  275. package/src/types/index.ts +2 -2
  276. package/src/utils/index.ts +1 -1
  277. package/src/utils/uuid.test.ts +85 -0
  278. 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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"}
@@ -1,4 +1,4 @@
1
- import type { SecureStorage } from './types';
1
+ import type { SecureStorage } from "./types";
2
2
  /**
3
3
  * Creates or returns the default storage implementation.
4
4
  *
@@ -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('expo-secure-store')));
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('[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.');
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=defaultStorage.test.d.ts.map
@@ -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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"}
@@ -1,6 +1,6 @@
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';
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
@@ -6,6 +6,6 @@ exports.STORAGE_KEYS = void 0;
6
6
  * @internal
7
7
  */
8
8
  exports.STORAGE_KEYS = {
9
- ANON_ID: 'harken_anon_id',
9
+ ANON_ID: "harken_anon_id",
10
10
  };
11
11
  //# sourceMappingURL=types.js.map
@@ -1,4 +1,4 @@
1
- import type { HarkenColors, HarkenTypography, HarkenSpacing, HarkenRadii, HarkenTheme } from './types';
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: HarkenTheme, overrides?: {
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
- }): HarkenTheme;
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,YAoBzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,YAoBxB,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;;GAEG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,WAAW,EACtB,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;CAC9B,GACA,WAAW,CAWb"}
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"}
@@ -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: '#2563EB', // Blue 600
11
- primaryPressed: '#1D4ED8', // Blue 700
12
- background: '#FFFFFF',
13
- backgroundSecondary: '#F9FAFB', // Gray 50
14
- text: '#111827', // Gray 900
15
- textSecondary: '#6B7280', // Gray 500
16
- textPlaceholder: '#9CA3AF', // Gray 400
17
- textOnPrimary: '#FFFFFF',
18
- border: '#E5E7EB', // Gray 200
19
- borderFocused: '#2563EB', // Blue 600
20
- error: '#DC2626', // Red 600
21
- success: '#16A34A', // Green 600
22
- warning: '#D97706', // Amber 600
23
- info: '#2563EB', // Blue 600
24
- overlay: 'rgba(0, 0, 0, 0.3)',
25
- overlayDark: 'rgba(0, 0, 0, 0.6)',
26
- accent1: '#2563EB', // Blue 600 (camera)
27
- accent2: '#16A34A', // Green 600 (library)
28
- accent3: '#D97706', // Amber 600 (files)
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: '#3B82F6', // Blue 500
36
- primaryPressed: '#2563EB', // Blue 600
37
- background: '#111827', // Gray 900
38
- backgroundSecondary: '#1F2937', // Gray 800
39
- text: '#F9FAFB', // Gray 50
40
- textSecondary: '#9CA3AF', // Gray 400
41
- textPlaceholder: '#6B7280', // Gray 500
42
- textOnPrimary: '#FFFFFF',
43
- border: '#374151', // Gray 700
44
- borderFocused: '#3B82F6', // Blue 500
45
- error: '#EF4444', // Red 500
46
- success: '#22C55E', // Green 500
47
- warning: '#F59E0B', // Amber 500
48
- info: '#3B82F6', // Blue 500
49
- overlay: 'rgba(0, 0, 0, 0.5)',
50
- overlayDark: 'rgba(0, 0, 0, 0.8)',
51
- accent1: '#3B82F6', // Blue 500 (camera)
52
- accent2: '#22C55E', // Green 500 (library)
53
- accent3: '#F59E0B', // Amber 500 (files)
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: 'System',
62
+ fontFamily: "System",
61
63
  fontFamilyHeading: undefined, // Falls back to fontFamily
62
64
  titleSize: 20,
63
65
  titleLineHeight: 1.3,
64
- titleWeight: '600',
66
+ titleWeight: "600",
65
67
  bodySize: 16,
66
68
  bodyLineHeight: 1.5,
67
- bodyWeight: 'normal',
69
+ bodyWeight: "normal",
68
70
  labelSize: 14,
69
- labelWeight: '500',
71
+ labelWeight: "500",
70
72
  captionSize: 12,
71
- captionWeight: 'normal',
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":"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"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/theme/defaults.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
- export type { HarkenColors, HarkenTypography, HarkenSpacing, HarkenRadii, HarkenTheme, PartialHarkenTheme, TextWeight, ThemeMode, } from './types';
2
- export { lightColors, darkColors, defaultTypography, defaultSpacing, defaultRadii, lightTheme, darkTheme, createTheme, } from './defaults';
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,GACV,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"}
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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":";;;AAYA,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"}
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"}