@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,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":"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"}
@@ -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"}