@molecule/app-solid 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/LICENSE +115 -0
  2. package/README.md +2543 -0
  3. package/dist/context.d.ts +82 -0
  4. package/dist/context.d.ts.map +1 -0
  5. package/dist/context.js +141 -0
  6. package/dist/context.js.map +1 -0
  7. package/dist/index.d.ts +61 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +61 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/primitives/async-state.d.ts +46 -0
  12. package/dist/primitives/async-state.d.ts.map +1 -0
  13. package/dist/primitives/async-state.js +83 -0
  14. package/dist/primitives/async-state.js.map +1 -0
  15. package/dist/primitives/auth.d.ts +85 -0
  16. package/dist/primitives/auth.d.ts.map +1 -0
  17. package/dist/primitives/auth.js +147 -0
  18. package/dist/primitives/auth.js.map +1 -0
  19. package/dist/primitives/capacitor-app.d.ts +46 -0
  20. package/dist/primitives/capacitor-app.d.ts.map +1 -0
  21. package/dist/primitives/capacitor-app.js +57 -0
  22. package/dist/primitives/capacitor-app.js.map +1 -0
  23. package/dist/primitives/change-password.d.ts +36 -0
  24. package/dist/primitives/change-password.d.ts.map +1 -0
  25. package/dist/primitives/change-password.js +32 -0
  26. package/dist/primitives/change-password.js.map +1 -0
  27. package/dist/primitives/device.d.ts +48 -0
  28. package/dist/primitives/device.d.ts.map +1 -0
  29. package/dist/primitives/device.js +47 -0
  30. package/dist/primitives/device.js.map +1 -0
  31. package/dist/primitives/forms.d.ts +193 -0
  32. package/dist/primitives/forms.d.ts.map +1 -0
  33. package/dist/primitives/forms.js +309 -0
  34. package/dist/primitives/forms.js.map +1 -0
  35. package/dist/primitives/http.d.ts +176 -0
  36. package/dist/primitives/http.d.ts.map +1 -0
  37. package/dist/primitives/http.js +254 -0
  38. package/dist/primitives/http.js.map +1 -0
  39. package/dist/primitives/i18n.d.ts +146 -0
  40. package/dist/primitives/i18n.d.ts.map +1 -0
  41. package/dist/primitives/i18n.js +223 -0
  42. package/dist/primitives/i18n.js.map +1 -0
  43. package/dist/primitives/index.d.ts +27 -0
  44. package/dist/primitives/index.d.ts.map +1 -0
  45. package/dist/primitives/index.js +27 -0
  46. package/dist/primitives/index.js.map +1 -0
  47. package/dist/primitives/logger.d.ts +143 -0
  48. package/dist/primitives/logger.d.ts.map +1 -0
  49. package/dist/primitives/logger.js +165 -0
  50. package/dist/primitives/logger.js.map +1 -0
  51. package/dist/primitives/login.d.ts +37 -0
  52. package/dist/primitives/login.d.ts.map +1 -0
  53. package/dist/primitives/login.js +32 -0
  54. package/dist/primitives/login.js.map +1 -0
  55. package/dist/primitives/oauth.d.ts +102 -0
  56. package/dist/primitives/oauth.d.ts.map +1 -0
  57. package/dist/primitives/oauth.js +232 -0
  58. package/dist/primitives/oauth.js.map +1 -0
  59. package/dist/primitives/password-reset.d.ts +46 -0
  60. package/dist/primitives/password-reset.d.ts.map +1 -0
  61. package/dist/primitives/password-reset.js +49 -0
  62. package/dist/primitives/password-reset.js.map +1 -0
  63. package/dist/primitives/platform.d.ts +48 -0
  64. package/dist/primitives/platform.d.ts.map +1 -0
  65. package/dist/primitives/platform.js +47 -0
  66. package/dist/primitives/platform.js.map +1 -0
  67. package/dist/primitives/promise.d.ts +46 -0
  68. package/dist/primitives/promise.d.ts.map +1 -0
  69. package/dist/primitives/promise.js +104 -0
  70. package/dist/primitives/promise.js.map +1 -0
  71. package/dist/primitives/push.d.ts +52 -0
  72. package/dist/primitives/push.d.ts.map +1 -0
  73. package/dist/primitives/push.js +72 -0
  74. package/dist/primitives/push.js.map +1 -0
  75. package/dist/primitives/router.d.ts +170 -0
  76. package/dist/primitives/router.d.ts.map +1 -0
  77. package/dist/primitives/router.js +251 -0
  78. package/dist/primitives/router.js.map +1 -0
  79. package/dist/primitives/signup.d.ts +37 -0
  80. package/dist/primitives/signup.d.ts.map +1 -0
  81. package/dist/primitives/signup.js +32 -0
  82. package/dist/primitives/signup.js.map +1 -0
  83. package/dist/primitives/state.d.ts +132 -0
  84. package/dist/primitives/state.d.ts.map +1 -0
  85. package/dist/primitives/state.js +167 -0
  86. package/dist/primitives/state.js.map +1 -0
  87. package/dist/primitives/storage.d.ts +132 -0
  88. package/dist/primitives/storage.d.ts.map +1 -0
  89. package/dist/primitives/storage.js +275 -0
  90. package/dist/primitives/storage.js.map +1 -0
  91. package/dist/primitives/theme.d.ts +106 -0
  92. package/dist/primitives/theme.d.ts.map +1 -0
  93. package/dist/primitives/theme.js +187 -0
  94. package/dist/primitives/theme.js.map +1 -0
  95. package/dist/primitives/version.d.ts +50 -0
  96. package/dist/primitives/version.d.ts.map +1 -0
  97. package/dist/primitives/version.js +62 -0
  98. package/dist/primitives/version.js.map +1 -0
  99. package/dist/provider.d.ts +36 -0
  100. package/dist/provider.d.ts.map +1 -0
  101. package/dist/provider.jsx +71 -0
  102. package/dist/provider.jsx.map +1 -0
  103. package/dist/types.d.ts +82 -0
  104. package/dist/types.d.ts.map +1 -0
  105. package/dist/types.js +7 -0
  106. package/dist/types.js.map +1 -0
  107. package/package.json +58 -0
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Solid.js primitives for state management.
3
+ *
4
+ * @module
5
+ */
6
+ import { type Accessor } from 'solid-js';
7
+ import type { StateProvider, Store, StoreConfig } from '@molecule/app-state';
8
+ /**
9
+ * Create a reactive store using Solid signals.
10
+ *
11
+ * @param config - Store configuration
12
+ * @returns Store instance
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * import { createStore } from '@molecule/app-solid'
17
+ *
18
+ * interface CounterState {
19
+ * count: number
20
+ * }
21
+ *
22
+ * const counterStore = createStore<CounterState>({
23
+ * initial: { count: 0 },
24
+ * })
25
+ *
26
+ * function Counter() {
27
+ * const count = useStore(counterStore, (s) => s.count)
28
+ *
29
+ * return (
30
+ * <button onClick={() => counterStore.setState({ count: count() + 1 })}>
31
+ * Count: {count()}
32
+ * </button>
33
+ * )
34
+ * }
35
+ * ```
36
+ */
37
+ export declare function createStore<T extends object>(config: StoreConfig<T>): Store<T>;
38
+ /**
39
+ * Use a store with optional selector, returning an accessor.
40
+ *
41
+ * @param store - Store to subscribe to
42
+ * @param selector - Optional selector function
43
+ * @returns Accessor for selected state
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * function UserName() {
48
+ * const name = useStore(userStore, (s) => s.name)
49
+ * return <span>{name()}</span>
50
+ * }
51
+ * ```
52
+ */
53
+ export declare function useStore<T extends object, S = T>(store: Store<T>, selector?: (state: T) => S): Accessor<S>;
54
+ /**
55
+ * Create a simple signal-based store without provider.
56
+ *
57
+ * @param initial - Initial state
58
+ *
59
+ * @example
60
+ * ```tsx
61
+ * const [count, setCount] = createSignalStore(0)
62
+ *
63
+ * function Counter() {
64
+ * return (
65
+ * <button onClick={() => setCount((c) => c + 1)}>
66
+ * Count: {count()}
67
+ * </button>
68
+ * )
69
+ * }
70
+ * ```
71
+ * @returns The created instance.
72
+ */
73
+ export declare function createSignalStore<T>(initial: T): [Accessor<T>, (value: T | ((prev: T) => T)) => void];
74
+ /**
75
+ * Storage adapter interface for persisted stores.
76
+ */
77
+ interface StorageAdapter {
78
+ getItem(key: string): string | null;
79
+ setItem(key: string, value: string): void;
80
+ removeItem?(key: string): void;
81
+ }
82
+ /**
83
+ * Create a persisted signal store.
84
+ *
85
+ * @param key - Storage key
86
+ * @param initial - Initial value
87
+ * @param storage - Storage adapter (required - use localStorage, sessionStorage, or `@molecule/app-storage`)
88
+ * @returns Tuple of accessor and setter
89
+ *
90
+ * @example
91
+ * ```tsx
92
+ * // Use with localStorage
93
+ * const [theme, setTheme] = createPersistedStore('theme', 'light', localStorage)
94
+ *
95
+ * // Use with a custom storage provider
96
+ * import { getProvider } from '@molecule/app-storage'
97
+ * const storageProvider = getProvider()
98
+ * const [user, setUser] = createPersistedStore('user', null, {
99
+ * getItem: (key) => storageProvider.get(key),
100
+ * setItem: (key, value) => storageProvider.set(key, value),
101
+ * })
102
+ * ```
103
+ */
104
+ export declare function createPersistedStore<T>(key: string, initial: T, storage: StorageAdapter): [Accessor<T>, (value: T | ((prev: T) => T)) => void];
105
+ /**
106
+ * Create state helpers from context.
107
+ *
108
+ * @returns State helper functions
109
+ */
110
+ /**
111
+ * Creates a state helpers.
112
+ * @returns The created result.
113
+ */
114
+ export declare function createStateHelpers(): {
115
+ createStore: <T extends object>(config: StoreConfig<T>) => Store<T>;
116
+ };
117
+ /**
118
+ * Create state helpers from a specific provider.
119
+ *
120
+ * @param provider - State provider
121
+ * @returns State helper functions
122
+ */
123
+ /**
124
+ * Creates a state helpers from provider.
125
+ * @param provider - The provider implementation.
126
+ * @returns The created result.
127
+ */
128
+ export declare function createStateHelpersFromProvider(provider: StateProvider): {
129
+ createStore: <T extends object>(config: StoreConfig<T>) => Store<T>;
130
+ };
131
+ export {};
132
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/primitives/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,UAAU,CAAA;AAE/E,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAI5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAG9E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,CAAC,EAC9C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GACzB,QAAQ,CAAC,CAAC,CAAC,CAab;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,OAAO,EAAE,CAAC,GACT,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAGtD;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,UAAU,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,cAAc,GACtB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAwBtD;AAED;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,WAAW,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAA;CACpE,CAMA;AAED;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,aAAa,GAAG;IACvE,WAAW,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAA;CACpE,CAIA"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Solid.js primitives for state management.
3
+ *
4
+ * @module
5
+ */
6
+ import { createEffect, createSignal, onCleanup } from 'solid-js';
7
+ import { getStateProvider } from '../context.js';
8
+ /**
9
+ * Create a reactive store using Solid signals.
10
+ *
11
+ * @param config - Store configuration
12
+ * @returns Store instance
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * import { createStore } from '@molecule/app-solid'
17
+ *
18
+ * interface CounterState {
19
+ * count: number
20
+ * }
21
+ *
22
+ * const counterStore = createStore<CounterState>({
23
+ * initial: { count: 0 },
24
+ * })
25
+ *
26
+ * function Counter() {
27
+ * const count = useStore(counterStore, (s) => s.count)
28
+ *
29
+ * return (
30
+ * <button onClick={() => counterStore.setState({ count: count() + 1 })}>
31
+ * Count: {count()}
32
+ * </button>
33
+ * )
34
+ * }
35
+ * ```
36
+ */
37
+ export function createStore(config) {
38
+ const provider = getStateProvider();
39
+ return provider.createStore(config);
40
+ }
41
+ /**
42
+ * Use a store with optional selector, returning an accessor.
43
+ *
44
+ * @param store - Store to subscribe to
45
+ * @param selector - Optional selector function
46
+ * @returns Accessor for selected state
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * function UserName() {
51
+ * const name = useStore(userStore, (s) => s.name)
52
+ * return <span>{name()}</span>
53
+ * }
54
+ * ```
55
+ */
56
+ export function useStore(store, selector) {
57
+ const select = selector ?? ((s) => s);
58
+ const [state, setState] = createSignal(select(store.getState()));
59
+ createEffect(() => {
60
+ const unsubscribe = store.subscribe((newState) => {
61
+ setState(() => select(newState));
62
+ });
63
+ onCleanup(unsubscribe);
64
+ });
65
+ return state;
66
+ }
67
+ /**
68
+ * Create a simple signal-based store without provider.
69
+ *
70
+ * @param initial - Initial state
71
+ *
72
+ * @example
73
+ * ```tsx
74
+ * const [count, setCount] = createSignalStore(0)
75
+ *
76
+ * function Counter() {
77
+ * return (
78
+ * <button onClick={() => setCount((c) => c + 1)}>
79
+ * Count: {count()}
80
+ * </button>
81
+ * )
82
+ * }
83
+ * ```
84
+ * @returns The created instance.
85
+ */
86
+ export function createSignalStore(initial) {
87
+ const [state, setState] = createSignal(initial);
88
+ return [state, setState];
89
+ }
90
+ /**
91
+ * Create a persisted signal store.
92
+ *
93
+ * @param key - Storage key
94
+ * @param initial - Initial value
95
+ * @param storage - Storage adapter (required - use localStorage, sessionStorage, or `@molecule/app-storage`)
96
+ * @returns Tuple of accessor and setter
97
+ *
98
+ * @example
99
+ * ```tsx
100
+ * // Use with localStorage
101
+ * const [theme, setTheme] = createPersistedStore('theme', 'light', localStorage)
102
+ *
103
+ * // Use with a custom storage provider
104
+ * import { getProvider } from '@molecule/app-storage'
105
+ * const storageProvider = getProvider()
106
+ * const [user, setUser] = createPersistedStore('user', null, {
107
+ * getItem: (key) => storageProvider.get(key),
108
+ * setItem: (key, value) => storageProvider.set(key, value),
109
+ * })
110
+ * ```
111
+ */
112
+ export function createPersistedStore(key, initial, storage) {
113
+ // Try to load from storage
114
+ let initialValue = initial;
115
+ try {
116
+ const stored = storage.getItem(key);
117
+ if (stored) {
118
+ initialValue = JSON.parse(stored);
119
+ }
120
+ }
121
+ catch (_error) {
122
+ // Safe to ignore: corrupt/stale storage data; initial value is the correct fallback
123
+ }
124
+ const [state, setState] = createSignal(initialValue);
125
+ // Persist on change
126
+ createEffect(() => {
127
+ try {
128
+ storage.setItem(key, JSON.stringify(state()));
129
+ }
130
+ catch (_error) {
131
+ // Safe to ignore: persistence is best-effort; in-memory signal still works correctly
132
+ }
133
+ });
134
+ return [state, setState];
135
+ }
136
+ /**
137
+ * Create state helpers from context.
138
+ *
139
+ * @returns State helper functions
140
+ */
141
+ /**
142
+ * Creates a state helpers.
143
+ * @returns The created result.
144
+ */
145
+ export function createStateHelpers() {
146
+ const provider = getStateProvider();
147
+ return {
148
+ createStore: (config) => provider.createStore(config),
149
+ };
150
+ }
151
+ /**
152
+ * Create state helpers from a specific provider.
153
+ *
154
+ * @param provider - State provider
155
+ * @returns State helper functions
156
+ */
157
+ /**
158
+ * Creates a state helpers from provider.
159
+ * @param provider - The provider implementation.
160
+ * @returns The created result.
161
+ */
162
+ export function createStateHelpersFromProvider(provider) {
163
+ return {
164
+ createStore: (config) => provider.createStore(config),
165
+ };
166
+ }
167
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/primitives/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAiB,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAI/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,WAAW,CAAmB,MAAsB;IAClE,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAA;IACnC,OAAO,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;AACrC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,QAAQ,CACtB,KAAe,EACf,QAA0B;IAE1B,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAI,EAAE,EAAE,CAAC,CAAiB,CAAC,CAAA;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IAEnE,YAAY,CAAC,GAAG,EAAE;QAChB,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/C,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,WAAW,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAU;IAEV,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAI,OAAO,CAAC,CAAA;IAClD,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AAC1B,CAAC;AAWD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAW,EACX,OAAU,EACV,OAAuB;IAEvB,2BAA2B;IAC3B,IAAI,YAAY,GAAG,OAAO,CAAA;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,MAAM,EAAE,CAAC;YACX,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,oFAAoF;IACtF,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAI,YAAY,CAAC,CAAA;IAEvD,oBAAoB;IACpB,YAAY,CAAC,GAAG,EAAE;QAChB,IAAI,CAAC;YACH,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAC/C,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,qFAAqF;QACvF,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AAC1B,CAAC;AAED;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAGhC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAA;IAEnC,OAAO;QACL,WAAW,EAAE,CAAmB,MAAsB,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;KACxF,CAAA;AACH,CAAC;AAED;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,QAAuB;IAGpE,OAAO;QACL,WAAW,EAAE,CAAmB,MAAsB,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;KACxF,CAAA;AACH,CAAC"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Solid.js primitives for storage.
3
+ *
4
+ * @module
5
+ */
6
+ import { type Accessor } from 'solid-js';
7
+ import type { StorageProvider } from '@molecule/app-storage';
8
+ /**
9
+ * Create a storage value primitive.
10
+ *
11
+ * @param key - Storage key
12
+ * @param defaultValue - Default value if not found
13
+ * @returns Storage value accessor and actions
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * import { createStorageValue } from '@molecule/app-solid'
18
+ *
19
+ * function ThemeSelector() {
20
+ * const { value, set, loading } = createStorageValue<string>('theme', 'light')
21
+ *
22
+ * return (
23
+ * <Show when={!loading()} fallback={<Loading />}>
24
+ * <select
25
+ * value={value()}
26
+ * onChange={(e) => set(e.target.value)}
27
+ * >
28
+ * <option value="light">Light</option>
29
+ * <option value="dark">Dark</option>
30
+ * </select>
31
+ * </Show>
32
+ * )
33
+ * }
34
+ * ```
35
+ */
36
+ export declare function createStorageValue<T>(key: string, defaultValue?: T): {
37
+ value: () => T | undefined;
38
+ loading: () => boolean;
39
+ error: () => Error | null;
40
+ set: (value: T) => Promise<void>;
41
+ remove: () => Promise<void>;
42
+ refresh: () => Promise<T | undefined>;
43
+ };
44
+ /**
45
+ * Create storage primitives.
46
+ *
47
+ * @returns Storage methods
48
+ *
49
+ * @example
50
+ * ```tsx
51
+ * function SettingsManager() {
52
+ * const storage = createStorage()
53
+ *
54
+ * const saveSettings = async (settings: Settings) => {
55
+ * await storage.set('settings', settings)
56
+ * }
57
+ *
58
+ * const loadSettings = async () => {
59
+ * return await storage.get<Settings>('settings')
60
+ * }
61
+ * }
62
+ * ```
63
+ */
64
+ export declare function createStorage(): {
65
+ get: <T>(key: string) => Promise<T | null>;
66
+ set: <T>(key: string, value: T) => Promise<void>;
67
+ remove: (key: string) => Promise<void>;
68
+ clear: () => Promise<void>;
69
+ keys: () => Promise<string[]>;
70
+ };
71
+ /**
72
+ * Create a persisted signal that syncs with storage.
73
+ *
74
+ * @param key - Storage key
75
+ * @param defaultValue - Default value
76
+ * @returns Tuple of accessor and setter
77
+ *
78
+ * @example
79
+ * ```tsx
80
+ * function Counter() {
81
+ * const [count, setCount] = usePersistedSignal('counter', 0)
82
+ *
83
+ * return (
84
+ * <button onClick={() => setCount((c) => (c ?? 0) + 1)}>
85
+ * Count: {count() ?? 0}
86
+ * </button>
87
+ * )
88
+ * }
89
+ * ```
90
+ */
91
+ export declare function usePersistedSignal<T>(key: string, defaultValue: T): [Accessor<T | undefined>, (value: T | ((prev: T | undefined) => T)) => void];
92
+ /**
93
+ * Create storage helpers from context.
94
+ *
95
+ * @returns Storage helper functions
96
+ */
97
+ export declare function createStorageHelpers(): {
98
+ get: <T>(key: string) => Promise<T | null>;
99
+ set: <T>(key: string, value: T) => Promise<void>;
100
+ remove: (key: string) => Promise<void>;
101
+ clear: () => Promise<void>;
102
+ keys: () => Promise<string[]>;
103
+ };
104
+ /**
105
+ * Create storage primitives from a specific provider.
106
+ *
107
+ * @param storage - Storage provider
108
+ * @returns Storage methods
109
+ */
110
+ export declare function createStorageFromProvider(storage: StorageProvider): {
111
+ get: <T>(key: string) => Promise<T | null>;
112
+ set: <T>(key: string, value: T) => Promise<void>;
113
+ remove: (key: string) => Promise<void>;
114
+ clear: () => Promise<void>;
115
+ keys: () => Promise<string[]>;
116
+ };
117
+ /**
118
+ * Create storage value primitive from a specific provider.
119
+ *
120
+ * @param storage - Storage provider
121
+ * @param key - Storage key
122
+ * @param defaultValue - Default value
123
+ * @returns Storage value accessor and actions
124
+ */
125
+ export declare function createStorageValueFromProvider<T>(storage: StorageProvider, key: string, defaultValue?: T): {
126
+ value: () => T | undefined;
127
+ loading: () => boolean;
128
+ error: () => Error | null;
129
+ set: (value: T) => Promise<void>;
130
+ remove: () => Promise<void>;
131
+ };
132
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/primitives/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAA8B,MAAM,UAAU,CAAA;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAK5D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,CAAC,GACf;IACD,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IAC1B,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,KAAK,EAAE,MAAM,KAAK,GAAG,IAAI,CAAA;IACzB,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;CACtC,CAgFA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,IAAI;IAC/B,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAC1C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CAC9B,CAUA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,GACd,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAqC9E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI;IACtC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAC1C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CAC9B,CAUA;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG;IACnE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAC1C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CAC9B,CAQA;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,EAC9C,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,CAAC,GACf;IACD,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IAC1B,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,KAAK,EAAE,MAAM,KAAK,GAAG,IAAI,CAAA;IACzB,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B,CAuCA"}