@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.
- package/LICENSE +115 -0
- package/README.md +2543 -0
- package/dist/context.d.ts +82 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +141 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/primitives/async-state.d.ts +46 -0
- package/dist/primitives/async-state.d.ts.map +1 -0
- package/dist/primitives/async-state.js +83 -0
- package/dist/primitives/async-state.js.map +1 -0
- package/dist/primitives/auth.d.ts +85 -0
- package/dist/primitives/auth.d.ts.map +1 -0
- package/dist/primitives/auth.js +147 -0
- package/dist/primitives/auth.js.map +1 -0
- package/dist/primitives/capacitor-app.d.ts +46 -0
- package/dist/primitives/capacitor-app.d.ts.map +1 -0
- package/dist/primitives/capacitor-app.js +57 -0
- package/dist/primitives/capacitor-app.js.map +1 -0
- package/dist/primitives/change-password.d.ts +36 -0
- package/dist/primitives/change-password.d.ts.map +1 -0
- package/dist/primitives/change-password.js +32 -0
- package/dist/primitives/change-password.js.map +1 -0
- package/dist/primitives/device.d.ts +48 -0
- package/dist/primitives/device.d.ts.map +1 -0
- package/dist/primitives/device.js +47 -0
- package/dist/primitives/device.js.map +1 -0
- package/dist/primitives/forms.d.ts +193 -0
- package/dist/primitives/forms.d.ts.map +1 -0
- package/dist/primitives/forms.js +309 -0
- package/dist/primitives/forms.js.map +1 -0
- package/dist/primitives/http.d.ts +176 -0
- package/dist/primitives/http.d.ts.map +1 -0
- package/dist/primitives/http.js +254 -0
- package/dist/primitives/http.js.map +1 -0
- package/dist/primitives/i18n.d.ts +146 -0
- package/dist/primitives/i18n.d.ts.map +1 -0
- package/dist/primitives/i18n.js +223 -0
- package/dist/primitives/i18n.js.map +1 -0
- package/dist/primitives/index.d.ts +27 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +27 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/logger.d.ts +143 -0
- package/dist/primitives/logger.d.ts.map +1 -0
- package/dist/primitives/logger.js +165 -0
- package/dist/primitives/logger.js.map +1 -0
- package/dist/primitives/login.d.ts +37 -0
- package/dist/primitives/login.d.ts.map +1 -0
- package/dist/primitives/login.js +32 -0
- package/dist/primitives/login.js.map +1 -0
- package/dist/primitives/oauth.d.ts +102 -0
- package/dist/primitives/oauth.d.ts.map +1 -0
- package/dist/primitives/oauth.js +232 -0
- package/dist/primitives/oauth.js.map +1 -0
- package/dist/primitives/password-reset.d.ts +46 -0
- package/dist/primitives/password-reset.d.ts.map +1 -0
- package/dist/primitives/password-reset.js +49 -0
- package/dist/primitives/password-reset.js.map +1 -0
- package/dist/primitives/platform.d.ts +48 -0
- package/dist/primitives/platform.d.ts.map +1 -0
- package/dist/primitives/platform.js +47 -0
- package/dist/primitives/platform.js.map +1 -0
- package/dist/primitives/promise.d.ts +46 -0
- package/dist/primitives/promise.d.ts.map +1 -0
- package/dist/primitives/promise.js +104 -0
- package/dist/primitives/promise.js.map +1 -0
- package/dist/primitives/push.d.ts +52 -0
- package/dist/primitives/push.d.ts.map +1 -0
- package/dist/primitives/push.js +72 -0
- package/dist/primitives/push.js.map +1 -0
- package/dist/primitives/router.d.ts +170 -0
- package/dist/primitives/router.d.ts.map +1 -0
- package/dist/primitives/router.js +251 -0
- package/dist/primitives/router.js.map +1 -0
- package/dist/primitives/signup.d.ts +37 -0
- package/dist/primitives/signup.d.ts.map +1 -0
- package/dist/primitives/signup.js +32 -0
- package/dist/primitives/signup.js.map +1 -0
- package/dist/primitives/state.d.ts +132 -0
- package/dist/primitives/state.d.ts.map +1 -0
- package/dist/primitives/state.js +167 -0
- package/dist/primitives/state.js.map +1 -0
- package/dist/primitives/storage.d.ts +132 -0
- package/dist/primitives/storage.d.ts.map +1 -0
- package/dist/primitives/storage.js +275 -0
- package/dist/primitives/storage.js.map +1 -0
- package/dist/primitives/theme.d.ts +106 -0
- package/dist/primitives/theme.d.ts.map +1 -0
- package/dist/primitives/theme.js +187 -0
- package/dist/primitives/theme.js.map +1 -0
- package/dist/primitives/version.d.ts +50 -0
- package/dist/primitives/version.d.ts.map +1 -0
- package/dist/primitives/version.js +62 -0
- package/dist/primitives/version.js.map +1 -0
- package/dist/provider.d.ts +36 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.jsx +71 -0
- package/dist/provider.jsx.map +1 -0
- package/dist/types.d.ts +82 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitives for storage.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { createEffect, createSignal } from 'solid-js';
|
|
7
|
+
import { getStorageProvider } from '../context.js';
|
|
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 function createStorageValue(key, defaultValue) {
|
|
37
|
+
const storage = getStorageProvider();
|
|
38
|
+
const [state, setState] = createSignal({
|
|
39
|
+
value: defaultValue,
|
|
40
|
+
loading: true,
|
|
41
|
+
error: null,
|
|
42
|
+
});
|
|
43
|
+
// Load initial value
|
|
44
|
+
createEffect(() => {
|
|
45
|
+
storage
|
|
46
|
+
.get(key)
|
|
47
|
+
.then((value) => {
|
|
48
|
+
setState({
|
|
49
|
+
value: value ?? defaultValue,
|
|
50
|
+
loading: false,
|
|
51
|
+
error: null,
|
|
52
|
+
});
|
|
53
|
+
})
|
|
54
|
+
.catch((err) => {
|
|
55
|
+
setState({
|
|
56
|
+
value: defaultValue,
|
|
57
|
+
loading: false,
|
|
58
|
+
error: err instanceof Error ? err : new Error(String(err)),
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
const set = async (value) => {
|
|
63
|
+
try {
|
|
64
|
+
await storage.set(key, value);
|
|
65
|
+
setState((prev) => ({ ...prev, value, error: null }));
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
69
|
+
setState((prev) => ({ ...prev, error }));
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const remove = async () => {
|
|
74
|
+
try {
|
|
75
|
+
await storage.remove(key);
|
|
76
|
+
setState((prev) => ({ ...prev, value: defaultValue, error: null }));
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
80
|
+
setState((prev) => ({ ...prev, error }));
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const refresh = async () => {
|
|
85
|
+
setState((prev) => ({ ...prev, loading: true }));
|
|
86
|
+
try {
|
|
87
|
+
const value = await storage.get(key);
|
|
88
|
+
setState({
|
|
89
|
+
value: value ?? defaultValue,
|
|
90
|
+
loading: false,
|
|
91
|
+
error: null,
|
|
92
|
+
});
|
|
93
|
+
return value ?? defaultValue;
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
97
|
+
setState({
|
|
98
|
+
value: defaultValue,
|
|
99
|
+
loading: false,
|
|
100
|
+
error,
|
|
101
|
+
});
|
|
102
|
+
return defaultValue;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
return {
|
|
106
|
+
value: () => state().value,
|
|
107
|
+
loading: () => state().loading,
|
|
108
|
+
error: () => state().error,
|
|
109
|
+
set,
|
|
110
|
+
remove,
|
|
111
|
+
refresh,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Create storage primitives.
|
|
116
|
+
*
|
|
117
|
+
* @returns Storage methods
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```tsx
|
|
121
|
+
* function SettingsManager() {
|
|
122
|
+
* const storage = createStorage()
|
|
123
|
+
*
|
|
124
|
+
* const saveSettings = async (settings: Settings) => {
|
|
125
|
+
* await storage.set('settings', settings)
|
|
126
|
+
* }
|
|
127
|
+
*
|
|
128
|
+
* const loadSettings = async () => {
|
|
129
|
+
* return await storage.get<Settings>('settings')
|
|
130
|
+
* }
|
|
131
|
+
* }
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export function createStorage() {
|
|
135
|
+
const storage = getStorageProvider();
|
|
136
|
+
return {
|
|
137
|
+
get: (key) => storage.get(key),
|
|
138
|
+
set: (key, value) => storage.set(key, value),
|
|
139
|
+
remove: (key) => storage.remove(key),
|
|
140
|
+
clear: () => storage.clear(),
|
|
141
|
+
keys: () => storage.keys(),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Create a persisted signal that syncs with storage.
|
|
146
|
+
*
|
|
147
|
+
* @param key - Storage key
|
|
148
|
+
* @param defaultValue - Default value
|
|
149
|
+
* @returns Tuple of accessor and setter
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```tsx
|
|
153
|
+
* function Counter() {
|
|
154
|
+
* const [count, setCount] = usePersistedSignal('counter', 0)
|
|
155
|
+
*
|
|
156
|
+
* return (
|
|
157
|
+
* <button onClick={() => setCount((c) => (c ?? 0) + 1)}>
|
|
158
|
+
* Count: {count() ?? 0}
|
|
159
|
+
* </button>
|
|
160
|
+
* )
|
|
161
|
+
* }
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
export function usePersistedSignal(key, defaultValue) {
|
|
165
|
+
const storage = getStorageProvider();
|
|
166
|
+
const [value, setValue] = createSignal(defaultValue);
|
|
167
|
+
// Load initial value
|
|
168
|
+
createEffect(() => {
|
|
169
|
+
storage.get(key).then((stored) => {
|
|
170
|
+
if (stored != null) {
|
|
171
|
+
setValue(() => stored);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
// Persist on change (skip initial)
|
|
176
|
+
let initialized = false;
|
|
177
|
+
createEffect(() => {
|
|
178
|
+
const current = value();
|
|
179
|
+
if (initialized && current !== undefined) {
|
|
180
|
+
storage.set(key, current);
|
|
181
|
+
}
|
|
182
|
+
initialized = true;
|
|
183
|
+
});
|
|
184
|
+
const setAndPersist = (newValue) => {
|
|
185
|
+
if (typeof newValue === 'function') {
|
|
186
|
+
setValue((prev) => {
|
|
187
|
+
const next = newValue(prev);
|
|
188
|
+
storage.set(key, next);
|
|
189
|
+
return next;
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
setValue(() => newValue);
|
|
194
|
+
storage.set(key, newValue);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
return [value, setAndPersist];
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Create storage helpers from context.
|
|
201
|
+
*
|
|
202
|
+
* @returns Storage helper functions
|
|
203
|
+
*/
|
|
204
|
+
export function createStorageHelpers() {
|
|
205
|
+
const storage = getStorageProvider();
|
|
206
|
+
return {
|
|
207
|
+
get: (key) => storage.get(key),
|
|
208
|
+
set: (key, value) => storage.set(key, value),
|
|
209
|
+
remove: (key) => storage.remove(key),
|
|
210
|
+
clear: () => storage.clear(),
|
|
211
|
+
keys: () => storage.keys(),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Create storage primitives from a specific provider.
|
|
216
|
+
*
|
|
217
|
+
* @param storage - Storage provider
|
|
218
|
+
* @returns Storage methods
|
|
219
|
+
*/
|
|
220
|
+
export function createStorageFromProvider(storage) {
|
|
221
|
+
return {
|
|
222
|
+
get: (key) => storage.get(key),
|
|
223
|
+
set: (key, value) => storage.set(key, value),
|
|
224
|
+
remove: (key) => storage.remove(key),
|
|
225
|
+
clear: () => storage.clear(),
|
|
226
|
+
keys: () => storage.keys(),
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Create storage value primitive from a specific provider.
|
|
231
|
+
*
|
|
232
|
+
* @param storage - Storage provider
|
|
233
|
+
* @param key - Storage key
|
|
234
|
+
* @param defaultValue - Default value
|
|
235
|
+
* @returns Storage value accessor and actions
|
|
236
|
+
*/
|
|
237
|
+
export function createStorageValueFromProvider(storage, key, defaultValue) {
|
|
238
|
+
const [state, setState] = createSignal({
|
|
239
|
+
value: defaultValue,
|
|
240
|
+
loading: true,
|
|
241
|
+
error: null,
|
|
242
|
+
});
|
|
243
|
+
createEffect(() => {
|
|
244
|
+
storage
|
|
245
|
+
.get(key)
|
|
246
|
+
.then((value) => {
|
|
247
|
+
setState({
|
|
248
|
+
value: value ?? defaultValue,
|
|
249
|
+
loading: false,
|
|
250
|
+
error: null,
|
|
251
|
+
});
|
|
252
|
+
})
|
|
253
|
+
.catch((err) => {
|
|
254
|
+
setState({
|
|
255
|
+
value: defaultValue,
|
|
256
|
+
loading: false,
|
|
257
|
+
error: err instanceof Error ? err : new Error(String(err)),
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
return {
|
|
262
|
+
value: () => state().value,
|
|
263
|
+
loading: () => state().loading,
|
|
264
|
+
error: () => state().error,
|
|
265
|
+
set: async (value) => {
|
|
266
|
+
await storage.set(key, value);
|
|
267
|
+
setState((prev) => ({ ...prev, value, error: null }));
|
|
268
|
+
},
|
|
269
|
+
remove: async () => {
|
|
270
|
+
await storage.remove(key);
|
|
271
|
+
setState((prev) => ({ ...prev, value: defaultValue, error: null }));
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/primitives/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitives for theming.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { type Accessor } from 'solid-js';
|
|
7
|
+
import type { Theme, ThemeColors, ThemeProvider } from '@molecule/app-theme';
|
|
8
|
+
import type { ThemePrimitives } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Create theme primitives for theme state and actions.
|
|
11
|
+
*
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* import { createTheme } from '@molecule/app-solid'
|
|
16
|
+
*
|
|
17
|
+
* function ThemeToggle() {
|
|
18
|
+
* const { mode, toggleTheme } = createTheme()
|
|
19
|
+
*
|
|
20
|
+
* return (
|
|
21
|
+
* <button onClick={toggleTheme}>
|
|
22
|
+
* Current: {mode()} - Click to toggle
|
|
23
|
+
* </button>
|
|
24
|
+
* )
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
* @returns The created instance.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createTheme(): ThemePrimitives;
|
|
30
|
+
/**
|
|
31
|
+
* Create a mode accessor.
|
|
32
|
+
*
|
|
33
|
+
* @returns Accessor for current mode
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```tsx
|
|
37
|
+
* function ModeIndicator() {
|
|
38
|
+
* const mode = useMode()
|
|
39
|
+
* return <div class={mode() === 'dark' ? 'dark-mode' : 'light-mode'}>...</div>
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function useMode(): Accessor<'light' | 'dark'>;
|
|
44
|
+
/**
|
|
45
|
+
* Create a theme name accessor.
|
|
46
|
+
*
|
|
47
|
+
* @returns Accessor for current theme name
|
|
48
|
+
*/
|
|
49
|
+
export declare function useThemeName(): Accessor<string>;
|
|
50
|
+
/**
|
|
51
|
+
* Create theme helpers from context.
|
|
52
|
+
*
|
|
53
|
+
* @returns Theme helper functions
|
|
54
|
+
*/
|
|
55
|
+
/**
|
|
56
|
+
* Creates a theme helpers.
|
|
57
|
+
* @returns The created result.
|
|
58
|
+
*/
|
|
59
|
+
export declare function createThemeHelpers(): {
|
|
60
|
+
getTheme: () => Theme;
|
|
61
|
+
setTheme: (name: string) => void;
|
|
62
|
+
getMode: () => 'light' | 'dark';
|
|
63
|
+
toggleMode: () => void;
|
|
64
|
+
getAvailableThemes: () => Theme[];
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Create theme primitives from a specific provider.
|
|
68
|
+
*
|
|
69
|
+
* @param provider - Theme provider
|
|
70
|
+
* @returns Theme primitives
|
|
71
|
+
*/
|
|
72
|
+
export declare function createThemeFromProvider(provider: ThemeProvider): ThemePrimitives;
|
|
73
|
+
/**
|
|
74
|
+
* Create a colors accessor derived from a theme accessor.
|
|
75
|
+
*
|
|
76
|
+
* @param theme - Theme accessor (e.g. from createTheme().theme)
|
|
77
|
+
* @returns Accessor for the current theme colors
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```tsx
|
|
81
|
+
* function ColorSwatch() {
|
|
82
|
+
* const { theme } = createTheme()
|
|
83
|
+
* const colors = createThemeColors(theme)
|
|
84
|
+
*
|
|
85
|
+
* return (
|
|
86
|
+
* <div style={{ background: colors().background, color: colors().text }}>
|
|
87
|
+
* Primary: {colors().primary}
|
|
88
|
+
* </div>
|
|
89
|
+
* )
|
|
90
|
+
* }
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export declare function createThemeColors(theme: Accessor<Theme>): Accessor<ThemeColors>;
|
|
94
|
+
/**
|
|
95
|
+
* Apply theme CSS variables to document.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```tsx
|
|
99
|
+
* function App() {
|
|
100
|
+
* applyThemeToDocument()
|
|
101
|
+
* return <MyApp />
|
|
102
|
+
* }
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export declare function applyThemeToDocument(): void;
|
|
106
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/primitives/theme.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,UAAU,CAAA;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAG5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,IAAI,eAAe,CAgC7C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,IAAI,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,CAGpD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,CAG/C;AAED;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,QAAQ,EAAE,MAAM,KAAK,CAAA;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,OAAO,EAAE,MAAM,OAAO,GAAG,MAAM,CAAA;IAC/B,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,kBAAkB,EAAE,MAAM,KAAK,EAAE,CAAA;CAClC,CAUA;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,GAAG,eAAe,CAkBhF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAE/E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAoC3C"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitives for theming.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { createEffect, createSignal, onCleanup } from 'solid-js';
|
|
7
|
+
import { getThemeProvider } from '../context.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create theme primitives for theme state and actions.
|
|
10
|
+
*
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* import { createTheme } from '@molecule/app-solid'
|
|
15
|
+
*
|
|
16
|
+
* function ThemeToggle() {
|
|
17
|
+
* const { mode, toggleTheme } = createTheme()
|
|
18
|
+
*
|
|
19
|
+
* return (
|
|
20
|
+
* <button onClick={toggleTheme}>
|
|
21
|
+
* Current: {mode()} - Click to toggle
|
|
22
|
+
* </button>
|
|
23
|
+
* )
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
* @returns The created instance.
|
|
27
|
+
*/
|
|
28
|
+
export function createTheme() {
|
|
29
|
+
const provider = getThemeProvider();
|
|
30
|
+
const [theme, setThemeSignal] = createSignal(provider.getTheme());
|
|
31
|
+
// Subscribe to theme changes
|
|
32
|
+
createEffect(() => {
|
|
33
|
+
const unsubscribe = provider.subscribe((newTheme) => {
|
|
34
|
+
setThemeSignal(newTheme);
|
|
35
|
+
});
|
|
36
|
+
onCleanup(unsubscribe);
|
|
37
|
+
});
|
|
38
|
+
const themeName = () => theme().name;
|
|
39
|
+
const mode = () => theme().mode;
|
|
40
|
+
const setTheme = (name) => {
|
|
41
|
+
provider.setTheme(name);
|
|
42
|
+
};
|
|
43
|
+
const toggleTheme = () => {
|
|
44
|
+
provider.toggleMode();
|
|
45
|
+
};
|
|
46
|
+
return {
|
|
47
|
+
theme,
|
|
48
|
+
themeName,
|
|
49
|
+
mode,
|
|
50
|
+
setTheme,
|
|
51
|
+
toggleTheme,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a mode accessor.
|
|
56
|
+
*
|
|
57
|
+
* @returns Accessor for current mode
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* function ModeIndicator() {
|
|
62
|
+
* const mode = useMode()
|
|
63
|
+
* return <div class={mode() === 'dark' ? 'dark-mode' : 'light-mode'}>...</div>
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export function useMode() {
|
|
68
|
+
const { mode } = createTheme();
|
|
69
|
+
return mode;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a theme name accessor.
|
|
73
|
+
*
|
|
74
|
+
* @returns Accessor for current theme name
|
|
75
|
+
*/
|
|
76
|
+
export function useThemeName() {
|
|
77
|
+
const { themeName } = createTheme();
|
|
78
|
+
return themeName;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create theme helpers from context.
|
|
82
|
+
*
|
|
83
|
+
* @returns Theme helper functions
|
|
84
|
+
*/
|
|
85
|
+
/**
|
|
86
|
+
* Creates a theme helpers.
|
|
87
|
+
* @returns The created result.
|
|
88
|
+
*/
|
|
89
|
+
export function createThemeHelpers() {
|
|
90
|
+
const provider = getThemeProvider();
|
|
91
|
+
return {
|
|
92
|
+
getTheme: () => provider.getTheme(),
|
|
93
|
+
setTheme: (name) => provider.setTheme(name),
|
|
94
|
+
getMode: () => provider.getTheme().mode,
|
|
95
|
+
toggleMode: () => provider.toggleMode(),
|
|
96
|
+
getAvailableThemes: () => provider.getThemes?.() ?? [],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create theme primitives from a specific provider.
|
|
101
|
+
*
|
|
102
|
+
* @param provider - Theme provider
|
|
103
|
+
* @returns Theme primitives
|
|
104
|
+
*/
|
|
105
|
+
export function createThemeFromProvider(provider) {
|
|
106
|
+
const [theme, setThemeSignal] = createSignal(provider.getTheme());
|
|
107
|
+
createEffect(() => {
|
|
108
|
+
const unsubscribe = provider.subscribe((newTheme) => {
|
|
109
|
+
setThemeSignal(newTheme);
|
|
110
|
+
});
|
|
111
|
+
onCleanup(unsubscribe);
|
|
112
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
theme,
|
|
115
|
+
themeName: () => theme().name,
|
|
116
|
+
mode: () => theme().mode,
|
|
117
|
+
setTheme: (name) => provider.setTheme(name),
|
|
118
|
+
toggleTheme: () => provider.toggleMode(),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create a colors accessor derived from a theme accessor.
|
|
123
|
+
*
|
|
124
|
+
* @param theme - Theme accessor (e.g. from createTheme().theme)
|
|
125
|
+
* @returns Accessor for the current theme colors
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```tsx
|
|
129
|
+
* function ColorSwatch() {
|
|
130
|
+
* const { theme } = createTheme()
|
|
131
|
+
* const colors = createThemeColors(theme)
|
|
132
|
+
*
|
|
133
|
+
* return (
|
|
134
|
+
* <div style={{ background: colors().background, color: colors().text }}>
|
|
135
|
+
* Primary: {colors().primary}
|
|
136
|
+
* </div>
|
|
137
|
+
* )
|
|
138
|
+
* }
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
export function createThemeColors(theme) {
|
|
142
|
+
return () => theme().colors;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Apply theme CSS variables to document.
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```tsx
|
|
149
|
+
* function App() {
|
|
150
|
+
* applyThemeToDocument()
|
|
151
|
+
* return <MyApp />
|
|
152
|
+
* }
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
export function applyThemeToDocument() {
|
|
156
|
+
const { theme } = createTheme();
|
|
157
|
+
createEffect(() => {
|
|
158
|
+
const currentTheme = theme();
|
|
159
|
+
const root = document.documentElement;
|
|
160
|
+
// Apply colors
|
|
161
|
+
if (currentTheme.colors) {
|
|
162
|
+
Object.entries(currentTheme.colors).forEach(([key, value]) => {
|
|
163
|
+
root.style.setProperty(`--color-${key}`, value);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
// Apply spacing
|
|
167
|
+
if (currentTheme.spacing) {
|
|
168
|
+
Object.entries(currentTheme.spacing).forEach(([key, value]) => {
|
|
169
|
+
root.style.setProperty(`--spacing-${key}`, value);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
// Apply typography
|
|
173
|
+
if (currentTheme.typography) {
|
|
174
|
+
Object.entries(currentTheme.typography).forEach(([key, value]) => {
|
|
175
|
+
if (typeof value === 'object') {
|
|
176
|
+
Object.entries(value).forEach(([prop, val]) => {
|
|
177
|
+
root.style.setProperty(`--typography-${key}-${prop}`, val);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
// Set mode class
|
|
183
|
+
root.classList.remove('light', 'dark');
|
|
184
|
+
root.classList.add(currentTheme.mode);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/primitives/theme.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;AAGhD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAA;IAEnC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,YAAY,CAAQ,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IAExE,6BAA6B;IAC7B,YAAY,CAAC,GAAG,EAAE;QAChB,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAe,EAAE,EAAE;YACzD,cAAc,CAAC,QAAQ,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,WAAW,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,GAAqB,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAA;IACtD,MAAM,IAAI,GAA+B,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAA;IAE3D,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;QACtC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,QAAQ,CAAC,UAAU,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,OAAO;QACL,KAAK;QACL,SAAS;QACT,IAAI;QACJ,QAAQ;QACR,WAAW;KACZ,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,OAAO;IACrB,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,CAAA;IAC9B,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,CAAA;IACnC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAOhC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAA;IAEnC,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACnC,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnD,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI;QACvC,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE;QACvC,kBAAkB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE;KACvD,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAuB;IAC7D,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,YAAY,CAAQ,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IAExE,YAAY,CAAC,GAAG,EAAE;QAChB,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAe,EAAE,EAAE;YACzD,cAAc,CAAC,QAAQ,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,WAAW,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,KAAK;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI;QAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI;QACxB,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnD,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE;KACzC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAsB;IACtD,OAAO,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,CAAA;AAC7B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAA;IAE/B,YAAY,CAAC,GAAG,EAAE;QAChB,MAAM,YAAY,GAAG,KAAK,EAAE,CAAA;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAA;QAErC,eAAe;QACf,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC3D,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,EAAE,KAAe,CAAC,CAAA;YAC3D,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,gBAAgB;QAChB,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC5D,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,GAAG,EAAE,EAAE,KAAe,CAAC,CAAA;YAC7D,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,mBAAmB;QACnB,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;wBAC5C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,IAAI,EAAE,EAAE,GAAa,CAAC,CAAA;oBACtE,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACtC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitives for version and update management.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { type Accessor } from 'solid-js';
|
|
7
|
+
import type { UpdateCheckOptions, VersionState } from '@molecule/app-version';
|
|
8
|
+
/**
|
|
9
|
+
* Version primitives return type.
|
|
10
|
+
*/
|
|
11
|
+
export interface VersionPrimitives {
|
|
12
|
+
state: Accessor<VersionState>;
|
|
13
|
+
isUpdateAvailable: Accessor<boolean>;
|
|
14
|
+
isChecking: Accessor<boolean>;
|
|
15
|
+
isServiceWorkerWaiting: Accessor<boolean>;
|
|
16
|
+
newVersion: Accessor<string | undefined>;
|
|
17
|
+
checkForUpdates: () => Promise<boolean>;
|
|
18
|
+
applyUpdate: (options?: {
|
|
19
|
+
force?: boolean;
|
|
20
|
+
}) => void;
|
|
21
|
+
dismissUpdate: () => void;
|
|
22
|
+
startPeriodicChecks: (options?: UpdateCheckOptions) => void;
|
|
23
|
+
stopPeriodicChecks: () => void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create version primitives for tracking app updates.
|
|
27
|
+
*
|
|
28
|
+
* @returns Version primitives object
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* import { createVersion } from '@molecule/app-solid'
|
|
33
|
+
*
|
|
34
|
+
* function UpdateBanner() {
|
|
35
|
+
* const { isUpdateAvailable, newVersion, applyUpdate, dismissUpdate } = createVersion()
|
|
36
|
+
*
|
|
37
|
+
* return (
|
|
38
|
+
* <Show when={isUpdateAvailable()}>
|
|
39
|
+
* <div>
|
|
40
|
+
* <span>Version {newVersion()} is available!</span>
|
|
41
|
+
* <button onClick={() => applyUpdate()}>Update</button>
|
|
42
|
+
* <button onClick={() => dismissUpdate()}>Dismiss</button>
|
|
43
|
+
* </div>
|
|
44
|
+
* </Show>
|
|
45
|
+
* )
|
|
46
|
+
* }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function createVersion(): VersionPrimitives;
|
|
50
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/primitives/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAA2B,MAAM,UAAU,CAAA;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAG7E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAA;IAC7B,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IACpC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC7B,sBAAsB,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IACzC,UAAU,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACxC,eAAe,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACvC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACpD,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC3D,kBAAkB,EAAE,MAAM,IAAI,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,IAAI,iBAAiB,CAoCjD"}
|