@sudobility/di_rn 0.1.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.
- package/README.md +184 -0
- package/dist/analytics/analytics.rn.d.ts +18 -0
- package/dist/analytics/analytics.rn.d.ts.map +1 -0
- package/dist/analytics/analytics.rn.js +83 -0
- package/dist/analytics/analytics.rn.js.map +1 -0
- package/dist/env/env.rn.d.ts +14 -0
- package/dist/env/env.rn.d.ts.map +1 -0
- package/dist/env/env.rn.js +51 -0
- package/dist/env/env.rn.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/logging.rn.d.ts +27 -0
- package/dist/logging/logging.rn.d.ts.map +1 -0
- package/dist/logging/logging.rn.js +78 -0
- package/dist/logging/logging.rn.js.map +1 -0
- package/dist/navigation/navigation.rn.d.ts +29 -0
- package/dist/navigation/navigation.rn.d.ts.map +1 -0
- package/dist/navigation/navigation.rn.js +155 -0
- package/dist/navigation/navigation.rn.js.map +1 -0
- package/dist/network/network-singleton.d.ts +8 -0
- package/dist/network/network-singleton.d.ts.map +1 -0
- package/dist/network/network-singleton.js +36 -0
- package/dist/network/network-singleton.js.map +1 -0
- package/dist/network/network.rn.d.ts +38 -0
- package/dist/network/network.rn.d.ts.map +1 -0
- package/dist/network/network.rn.js +153 -0
- package/dist/network/network.rn.js.map +1 -0
- package/dist/notification/notification.rn.d.ts +25 -0
- package/dist/notification/notification.rn.d.ts.map +1 -0
- package/dist/notification/notification.rn.js +136 -0
- package/dist/notification/notification.rn.js.map +1 -0
- package/dist/storage/storage-singleton.d.ts +25 -0
- package/dist/storage/storage-singleton.d.ts.map +1 -0
- package/dist/storage/storage-singleton.js +68 -0
- package/dist/storage/storage-singleton.js.map +1 -0
- package/dist/storage/storage.rn.d.ts +23 -0
- package/dist/storage/storage.rn.d.ts.map +1 -0
- package/dist/storage/storage.rn.js +80 -0
- package/dist/storage/storage.rn.js.map +1 -0
- package/dist/theme/theme.rn.d.ts +28 -0
- package/dist/theme/theme.rn.d.ts.map +1 -0
- package/dist/theme/theme.rn.js +92 -0
- package/dist/theme/theme.rn.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { RNStorage } from './storage.rn.js';
|
|
2
|
+
export class RNStorageService {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.storage = new RNStorage();
|
|
5
|
+
}
|
|
6
|
+
async getItem(key) {
|
|
7
|
+
return this.storage.getItem(key);
|
|
8
|
+
}
|
|
9
|
+
async setItem(key, value) {
|
|
10
|
+
return this.storage.setItem(key, value);
|
|
11
|
+
}
|
|
12
|
+
async removeItem(key) {
|
|
13
|
+
return this.storage.removeItem(key);
|
|
14
|
+
}
|
|
15
|
+
async clear() {
|
|
16
|
+
return this.storage.clear();
|
|
17
|
+
}
|
|
18
|
+
async getAllKeys() {
|
|
19
|
+
return this.storage.getAllKeys();
|
|
20
|
+
}
|
|
21
|
+
isAvailable() {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
getType() {
|
|
25
|
+
return 'asyncStorage';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class RNSerializedStorageService {
|
|
29
|
+
constructor() {
|
|
30
|
+
this.storage = new RNStorage();
|
|
31
|
+
}
|
|
32
|
+
async getObject(key) {
|
|
33
|
+
const value = await this.storage.getItem(key);
|
|
34
|
+
if (!value)
|
|
35
|
+
return null;
|
|
36
|
+
try {
|
|
37
|
+
return JSON.parse(value);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async setObject(key, value) {
|
|
44
|
+
await this.storage.setItem(key, JSON.stringify(value));
|
|
45
|
+
}
|
|
46
|
+
async removeObject(key) {
|
|
47
|
+
await this.storage.removeItem(key);
|
|
48
|
+
}
|
|
49
|
+
async hasObject(key) {
|
|
50
|
+
const value = await this.storage.getItem(key);
|
|
51
|
+
return value !== null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
let storageService = null;
|
|
55
|
+
export function getStorageService() {
|
|
56
|
+
if (!storageService) {
|
|
57
|
+
storageService = new RNStorageService();
|
|
58
|
+
}
|
|
59
|
+
return storageService;
|
|
60
|
+
}
|
|
61
|
+
export function initializeStorageService(service) {
|
|
62
|
+
storageService = service ?? new RNStorageService();
|
|
63
|
+
return storageService;
|
|
64
|
+
}
|
|
65
|
+
export function resetStorageService() {
|
|
66
|
+
storageService = null;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=storage-singleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-singleton.js","sourceRoot":"","sources":["../../src/storage/storage-singleton.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C,MAAM,OAAO,gBAAgB;IAG3B;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAa;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAW;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC;IAED,WAAW;QAET,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,cAA6B,CAAC;IACvC,CAAC;CACF;AAKD,MAAM,OAAO,0BAA0B;IAGrC;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,SAAS,CAAI,GAAW;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAI,GAAW,EAAE,KAAQ;QACtC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,KAAK,KAAK,IAAI,CAAC;IACxB,CAAC;CACF;AAGD,IAAI,cAAc,GAA4B,IAAI,CAAC;AAEnD,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,OAA0B;IAE1B,cAAc,GAAG,OAAO,IAAI,IAAI,gBAAgB,EAAE,CAAC;IACnD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PlatformStorage, AdvancedPlatformStorage } from '@sudobility/di';
|
|
2
|
+
import type { Optional } from '@sudobility/types';
|
|
3
|
+
export declare class RNStorage implements PlatformStorage {
|
|
4
|
+
setItem(key: string, value: string): Promise<void>;
|
|
5
|
+
getItem(key: string): Promise<Optional<string>>;
|
|
6
|
+
removeItem(key: string): Promise<void>;
|
|
7
|
+
clear(): Promise<void>;
|
|
8
|
+
getAllKeys(): Promise<string[]>;
|
|
9
|
+
}
|
|
10
|
+
export declare class AdvancedRNStorage implements AdvancedPlatformStorage {
|
|
11
|
+
private storage;
|
|
12
|
+
constructor();
|
|
13
|
+
setItem(key: string, value: string, ttl?: Optional<number>): Promise<void>;
|
|
14
|
+
getItem(key: string): Promise<Optional<string>>;
|
|
15
|
+
removeItem(key: string): Promise<void>;
|
|
16
|
+
clear(): Promise<void>;
|
|
17
|
+
getAllKeys(): Promise<string[]>;
|
|
18
|
+
hasItem(key: string): Promise<boolean>;
|
|
19
|
+
clearPattern(pattern?: Optional<string>): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export declare const rnStorage: RNStorage;
|
|
22
|
+
export declare const advancedRNStorage: AdvancedRNStorage;
|
|
23
|
+
//# sourceMappingURL=storage.rn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.rn.d.ts","sourceRoot":"","sources":["../../src/storage/storage.rn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAMlD,qBAAa,SAAU,YAAW,eAAe;IACzC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAK/C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAItC;AAcD,qBAAa,iBAAkB,YAAW,uBAAuB;IAC/D,OAAO,CAAC,OAAO,CAAY;;IAMrB,OAAO,CACX,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GACrB,OAAO,CAAC,IAAI,CAAC;IASV,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAuB/C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtC,YAAY,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAc9D;AAGD,eAAO,MAAM,SAAS,WAAkB,CAAC;AACzC,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
2
|
+
export class RNStorage {
|
|
3
|
+
async setItem(key, value) {
|
|
4
|
+
await AsyncStorage.setItem(key, value);
|
|
5
|
+
}
|
|
6
|
+
async getItem(key) {
|
|
7
|
+
const value = await AsyncStorage.getItem(key);
|
|
8
|
+
return value ?? null;
|
|
9
|
+
}
|
|
10
|
+
async removeItem(key) {
|
|
11
|
+
await AsyncStorage.removeItem(key);
|
|
12
|
+
}
|
|
13
|
+
async clear() {
|
|
14
|
+
await AsyncStorage.clear();
|
|
15
|
+
}
|
|
16
|
+
async getAllKeys() {
|
|
17
|
+
const keys = await AsyncStorage.getAllKeys();
|
|
18
|
+
return [...keys];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class AdvancedRNStorage {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.storage = new RNStorage();
|
|
24
|
+
}
|
|
25
|
+
async setItem(key, value, ttl) {
|
|
26
|
+
const storedValue = {
|
|
27
|
+
value,
|
|
28
|
+
timestamp: Date.now(),
|
|
29
|
+
ttl: ttl ?? undefined,
|
|
30
|
+
};
|
|
31
|
+
await this.storage.setItem(key, JSON.stringify(storedValue));
|
|
32
|
+
}
|
|
33
|
+
async getItem(key) {
|
|
34
|
+
const raw = await this.storage.getItem(key);
|
|
35
|
+
if (!raw)
|
|
36
|
+
return null;
|
|
37
|
+
try {
|
|
38
|
+
const stored = JSON.parse(raw);
|
|
39
|
+
if (stored.ttl !== undefined) {
|
|
40
|
+
const elapsed = Date.now() - stored.timestamp;
|
|
41
|
+
if (elapsed > stored.ttl) {
|
|
42
|
+
await this.removeItem(key);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return stored.value;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return raw;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async removeItem(key) {
|
|
53
|
+
await this.storage.removeItem(key);
|
|
54
|
+
}
|
|
55
|
+
async clear() {
|
|
56
|
+
await this.storage.clear();
|
|
57
|
+
}
|
|
58
|
+
async getAllKeys() {
|
|
59
|
+
return this.storage.getAllKeys();
|
|
60
|
+
}
|
|
61
|
+
async hasItem(key) {
|
|
62
|
+
const value = await this.getItem(key);
|
|
63
|
+
return value !== null;
|
|
64
|
+
}
|
|
65
|
+
async clearPattern(pattern) {
|
|
66
|
+
if (!pattern) {
|
|
67
|
+
await this.clear();
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const keys = await this.getAllKeys();
|
|
71
|
+
const regex = new RegExp(pattern);
|
|
72
|
+
const keysToRemove = keys.filter((key) => regex.test(key));
|
|
73
|
+
if (keysToRemove.length > 0) {
|
|
74
|
+
await AsyncStorage.multiRemove(keysToRemove);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export const rnStorage = new RNStorage();
|
|
79
|
+
export const advancedRNStorage = new AdvancedRNStorage();
|
|
80
|
+
//# sourceMappingURL=storage.rn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.rn.js","sourceRoot":"","sources":["../../src/storage/storage.rn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ColorSchemeName } from 'react-native';
|
|
2
|
+
import type { PlatformTheme } from '@sudobility/di';
|
|
3
|
+
export type ThemeMode = 'light' | 'dark' | 'system';
|
|
4
|
+
export type FontSize = 'small' | 'medium' | 'large';
|
|
5
|
+
export declare class RNThemeService implements PlatformTheme {
|
|
6
|
+
private currentTheme;
|
|
7
|
+
private currentFontSize;
|
|
8
|
+
private listeners;
|
|
9
|
+
private appearanceListener;
|
|
10
|
+
constructor();
|
|
11
|
+
private initializeAppearanceListener;
|
|
12
|
+
private notifyListeners;
|
|
13
|
+
applyTheme(theme: ThemeMode): void;
|
|
14
|
+
applyFontSize(fontSize: FontSize): void;
|
|
15
|
+
getCurrentTheme(): ThemeMode;
|
|
16
|
+
getResolvedTheme(): 'light' | 'dark';
|
|
17
|
+
getSystemTheme(): ColorSchemeName;
|
|
18
|
+
getCurrentFontSize(): FontSize;
|
|
19
|
+
getFontSizeMultiplier(): number;
|
|
20
|
+
watchSystemTheme(callback: (theme: ThemeMode) => void): () => void;
|
|
21
|
+
isDarkMode(): boolean;
|
|
22
|
+
dispose(): void;
|
|
23
|
+
}
|
|
24
|
+
export declare function getThemeService(): RNThemeService;
|
|
25
|
+
export declare function initializeThemeService(service?: RNThemeService): RNThemeService;
|
|
26
|
+
export declare function resetThemeService(): void;
|
|
27
|
+
export declare const rnThemeService: RNThemeService;
|
|
28
|
+
//# sourceMappingURL=theme.rn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.rn.d.ts","sourceRoot":"","sources":["../../src/theme/theme.rn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AACpD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAKpD,qBAAa,cAAe,YAAW,aAAa;IAClD,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,kBAAkB,CAEV;;IAMhB,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,eAAe;IAQvB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAQlC,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAOvC,eAAe,IAAI,SAAS;IAO5B,gBAAgB,IAAI,OAAO,GAAG,MAAM;IAWpC,cAAc,IAAI,eAAe;IAOjC,kBAAkB,IAAI,QAAQ;IAO9B,qBAAqB,IAAI,MAAM;IAc/B,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;IAYlE,UAAU,IAAI,OAAO;IAOrB,OAAO,IAAI,IAAI;CAOhB;AAKD,wBAAgB,eAAe,IAAI,cAAc,CAKhD;AAED,wBAAgB,sBAAsB,CACpC,OAAO,CAAC,EAAE,cAAc,GACvB,cAAc,CAMhB;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Appearance } from 'react-native';
|
|
2
|
+
export class RNThemeService {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.currentTheme = 'system';
|
|
5
|
+
this.currentFontSize = 'medium';
|
|
6
|
+
this.listeners = new Set();
|
|
7
|
+
this.appearanceListener = null;
|
|
8
|
+
this.initializeAppearanceListener();
|
|
9
|
+
}
|
|
10
|
+
initializeAppearanceListener() {
|
|
11
|
+
this.appearanceListener = Appearance.addChangeListener(() => {
|
|
12
|
+
if (this.currentTheme === 'system') {
|
|
13
|
+
this.notifyListeners();
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
notifyListeners() {
|
|
18
|
+
const resolvedTheme = this.getResolvedTheme();
|
|
19
|
+
this.listeners.forEach((listener) => listener(resolvedTheme));
|
|
20
|
+
}
|
|
21
|
+
applyTheme(theme) {
|
|
22
|
+
this.currentTheme = theme;
|
|
23
|
+
this.notifyListeners();
|
|
24
|
+
}
|
|
25
|
+
applyFontSize(fontSize) {
|
|
26
|
+
this.currentFontSize = fontSize;
|
|
27
|
+
}
|
|
28
|
+
getCurrentTheme() {
|
|
29
|
+
return this.currentTheme;
|
|
30
|
+
}
|
|
31
|
+
getResolvedTheme() {
|
|
32
|
+
if (this.currentTheme === 'system') {
|
|
33
|
+
const systemTheme = Appearance.getColorScheme();
|
|
34
|
+
return systemTheme === 'dark' ? 'dark' : 'light';
|
|
35
|
+
}
|
|
36
|
+
return this.currentTheme;
|
|
37
|
+
}
|
|
38
|
+
getSystemTheme() {
|
|
39
|
+
return Appearance.getColorScheme();
|
|
40
|
+
}
|
|
41
|
+
getCurrentFontSize() {
|
|
42
|
+
return this.currentFontSize;
|
|
43
|
+
}
|
|
44
|
+
getFontSizeMultiplier() {
|
|
45
|
+
switch (this.currentFontSize) {
|
|
46
|
+
case 'small':
|
|
47
|
+
return 0.85;
|
|
48
|
+
case 'large':
|
|
49
|
+
return 1.15;
|
|
50
|
+
default:
|
|
51
|
+
return 1.0;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
watchSystemTheme(callback) {
|
|
55
|
+
this.listeners.add(callback);
|
|
56
|
+
return () => {
|
|
57
|
+
this.listeners.delete(callback);
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
isDarkMode() {
|
|
61
|
+
return this.getResolvedTheme() === 'dark';
|
|
62
|
+
}
|
|
63
|
+
dispose() {
|
|
64
|
+
if (this.appearanceListener) {
|
|
65
|
+
this.appearanceListener.remove();
|
|
66
|
+
this.appearanceListener = null;
|
|
67
|
+
}
|
|
68
|
+
this.listeners.clear();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
let themeService = null;
|
|
72
|
+
export function getThemeService() {
|
|
73
|
+
if (!themeService) {
|
|
74
|
+
themeService = new RNThemeService();
|
|
75
|
+
}
|
|
76
|
+
return themeService;
|
|
77
|
+
}
|
|
78
|
+
export function initializeThemeService(service) {
|
|
79
|
+
if (themeService) {
|
|
80
|
+
themeService.dispose();
|
|
81
|
+
}
|
|
82
|
+
themeService = service ?? new RNThemeService();
|
|
83
|
+
return themeService;
|
|
84
|
+
}
|
|
85
|
+
export function resetThemeService() {
|
|
86
|
+
if (themeService) {
|
|
87
|
+
themeService.dispose();
|
|
88
|
+
themeService = null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export const rnThemeService = new RNThemeService();
|
|
92
|
+
//# sourceMappingURL=theme.rn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.rn.js","sourceRoot":"","sources":["../../src/theme/theme.rn.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sudobility/di_rn",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "React Native implementations of dependency injection services for Sudobility",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"build:watch": "tsc --watch",
|
|
17
|
+
"clean": "rm -rf dist",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:watch": "vitest",
|
|
20
|
+
"test:coverage": "vitest run --coverage",
|
|
21
|
+
"test:ci": "vitest run --coverage",
|
|
22
|
+
"prepublishOnly": "npm run clean && npm run test && npm run build",
|
|
23
|
+
"typecheck": "tsc --noEmit",
|
|
24
|
+
"lint": "eslint src --ext .ts,.tsx",
|
|
25
|
+
"lint:fix": "eslint src --ext .ts,.tsx --fix",
|
|
26
|
+
"format": "prettier --write src/**/*.{ts,tsx,js,jsx,json,md}"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist/**/*",
|
|
30
|
+
"README.md"
|
|
31
|
+
],
|
|
32
|
+
"keywords": [
|
|
33
|
+
"dependency-injection",
|
|
34
|
+
"di",
|
|
35
|
+
"react-native",
|
|
36
|
+
"web3"
|
|
37
|
+
],
|
|
38
|
+
"author": "Sudobility Inc",
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"@sudobility/di": "^1.4.23",
|
|
42
|
+
"@sudobility/types": "^1.9.18",
|
|
43
|
+
"react": ">=18.0.0",
|
|
44
|
+
"react-native": ">=0.73.0",
|
|
45
|
+
"@react-native-async-storage/async-storage": "^1.21.0",
|
|
46
|
+
"@react-native-community/netinfo": "^11.2.1",
|
|
47
|
+
"@react-navigation/native": "^6.1.9",
|
|
48
|
+
"@react-native-firebase/analytics": "^18.7.0",
|
|
49
|
+
"@notifee/react-native": "^7.8.0",
|
|
50
|
+
"react-native-config": "^1.5.1"
|
|
51
|
+
},
|
|
52
|
+
"repository": {
|
|
53
|
+
"type": "git",
|
|
54
|
+
"url": "https://github.com/johnqh/di_rn.git"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@eslint/js": "^9.38.0",
|
|
58
|
+
"@sudobility/di": "^1.4.23",
|
|
59
|
+
"@sudobility/types": "^1.9.18",
|
|
60
|
+
"@types/node": "^24.10.1",
|
|
61
|
+
"@types/react": "^18.2.0",
|
|
62
|
+
"@typescript-eslint/eslint-plugin": "^8.46.2",
|
|
63
|
+
"@typescript-eslint/parser": "^8.46.2",
|
|
64
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
65
|
+
"eslint": "^9.38.0",
|
|
66
|
+
"eslint-config-prettier": "^10.1.8",
|
|
67
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
68
|
+
"prettier": "^3.6.2",
|
|
69
|
+
"typescript": "^5.9.3",
|
|
70
|
+
"vitest": "^3.2.4"
|
|
71
|
+
},
|
|
72
|
+
"publishConfig": {
|
|
73
|
+
"access": "restricted"
|
|
74
|
+
}
|
|
75
|
+
}
|