@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,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitives for HTTP requests.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { createResource, createSignal } from 'solid-js';
|
|
7
|
+
import { getHttpClient } from '../context.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create HTTP primitives for making requests.
|
|
10
|
+
*
|
|
11
|
+
* @returns HTTP methods and utilities
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* import { createHttp } from '@molecule/app-solid'
|
|
16
|
+
*
|
|
17
|
+
* function UserList() {
|
|
18
|
+
* const { get } = createHttp()
|
|
19
|
+
* const [users] = createResource(() => get<User[]>('/api/users'))
|
|
20
|
+
*
|
|
21
|
+
* return (
|
|
22
|
+
* <Show when={!users.loading} fallback={<Spinner />}>
|
|
23
|
+
* <For each={users()}>
|
|
24
|
+
* {(user) => <UserCard user={user} />}
|
|
25
|
+
* </For>
|
|
26
|
+
* </Show>
|
|
27
|
+
* )
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Creates a http.
|
|
33
|
+
* @returns The created result.
|
|
34
|
+
*/
|
|
35
|
+
export function createHttp() {
|
|
36
|
+
const client = getHttpClient();
|
|
37
|
+
return {
|
|
38
|
+
get: (url, config) => client.get(url, config),
|
|
39
|
+
post: (url, data, config) => client.post(url, data, config),
|
|
40
|
+
put: (url, data, config) => client.put(url, data, config),
|
|
41
|
+
patch: (url, data, config) => client.patch(url, data, config),
|
|
42
|
+
delete: (url, config) => client.delete(url, config),
|
|
43
|
+
request: (config) => client.request(config),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Create a resource for fetching data.
|
|
48
|
+
*
|
|
49
|
+
* @param url - URL string or accessor returning a URL string.
|
|
50
|
+
* @param config - Optional request configuration.
|
|
51
|
+
* @returns Solid resource
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```tsx
|
|
55
|
+
* function UserProfile(props: { userId: string }) {
|
|
56
|
+
* const user = useFetch<User>(() => `/api/users/${props.userId}`)
|
|
57
|
+
*
|
|
58
|
+
* return (
|
|
59
|
+
* <Show when={!user.loading} fallback={<Loading />}>
|
|
60
|
+
* <h1>{user()?.name}</h1>
|
|
61
|
+
* </Show>
|
|
62
|
+
* )
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export function useFetch(url, config) {
|
|
67
|
+
const client = getHttpClient();
|
|
68
|
+
const getUrl = typeof url === 'function' ? url : () => url;
|
|
69
|
+
const [data] = createResource(getUrl, async (resolvedUrl) => {
|
|
70
|
+
const response = await client.get(resolvedUrl, config);
|
|
71
|
+
return response.data;
|
|
72
|
+
});
|
|
73
|
+
return data;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Create a mutation function.
|
|
77
|
+
*
|
|
78
|
+
* @returns Mutation function and state
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```tsx
|
|
82
|
+
* function CreateUserForm() {
|
|
83
|
+
* const { mutate, isLoading, error } = useMutation<User>()
|
|
84
|
+
*
|
|
85
|
+
* const handleSubmit = async (data: CreateUserData) => {
|
|
86
|
+
* const user = await mutate('/api/users', data)
|
|
87
|
+
* console.log('Created:', user)
|
|
88
|
+
* }
|
|
89
|
+
*
|
|
90
|
+
* return (
|
|
91
|
+
* <form onSubmit={handleSubmit}>
|
|
92
|
+
* <Show when={error()}>
|
|
93
|
+
* <ErrorMessage error={error()} />
|
|
94
|
+
* </Show>
|
|
95
|
+
* <button type="submit" disabled={isLoading()}>
|
|
96
|
+
* Create
|
|
97
|
+
* </button>
|
|
98
|
+
* </form>
|
|
99
|
+
* )
|
|
100
|
+
* }
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
/**
|
|
104
|
+
* Hook for mutation.
|
|
105
|
+
* @returns The result.
|
|
106
|
+
*/
|
|
107
|
+
export function useMutation() {
|
|
108
|
+
const client = getHttpClient();
|
|
109
|
+
const [isLoading, setIsLoading] = createSignal(false);
|
|
110
|
+
const [error, setError] = createSignal(null);
|
|
111
|
+
const [data, setData] = createSignal(null);
|
|
112
|
+
const mutate = async (url, payload, method = 'POST') => {
|
|
113
|
+
setIsLoading(true);
|
|
114
|
+
setError(null);
|
|
115
|
+
try {
|
|
116
|
+
let response;
|
|
117
|
+
switch (method) {
|
|
118
|
+
case 'POST':
|
|
119
|
+
response = await client.post(url, payload);
|
|
120
|
+
break;
|
|
121
|
+
case 'PUT':
|
|
122
|
+
response = await client.put(url, payload);
|
|
123
|
+
break;
|
|
124
|
+
case 'PATCH':
|
|
125
|
+
response = await client.patch(url, payload);
|
|
126
|
+
break;
|
|
127
|
+
case 'DELETE':
|
|
128
|
+
response = await client.delete(url);
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
setData(() => response.data);
|
|
132
|
+
return response.data;
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
136
|
+
setError(error);
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
setIsLoading(false);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
return {
|
|
144
|
+
mutate,
|
|
145
|
+
isLoading,
|
|
146
|
+
error,
|
|
147
|
+
data,
|
|
148
|
+
reset: () => {
|
|
149
|
+
setIsLoading(false);
|
|
150
|
+
setError(null);
|
|
151
|
+
setData(null);
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Create a lazy query that only executes when called.
|
|
157
|
+
*
|
|
158
|
+
* @returns Query function and state
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```tsx
|
|
162
|
+
* function SearchResults() {
|
|
163
|
+
* const { execute, data, isLoading } = useLazyQuery<SearchResult[]>()
|
|
164
|
+
*
|
|
165
|
+
* const handleSearch = (query: string) => {
|
|
166
|
+
* execute(`/api/search?q=${encodeURIComponent(query)}`)
|
|
167
|
+
* }
|
|
168
|
+
*
|
|
169
|
+
* return (
|
|
170
|
+
* <div>
|
|
171
|
+
* <SearchInput onSearch={handleSearch} />
|
|
172
|
+
* <Show when={!isLoading()} fallback={<Loading />}>
|
|
173
|
+
* <ResultsList results={data() ?? []} />
|
|
174
|
+
* </Show>
|
|
175
|
+
* </div>
|
|
176
|
+
* )
|
|
177
|
+
* }
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
180
|
+
/**
|
|
181
|
+
* Hook for lazy query.
|
|
182
|
+
* @returns The result.
|
|
183
|
+
*/
|
|
184
|
+
export function useLazyQuery() {
|
|
185
|
+
const client = getHttpClient();
|
|
186
|
+
const [state, setState] = createSignal({
|
|
187
|
+
data: null,
|
|
188
|
+
loading: false,
|
|
189
|
+
error: null,
|
|
190
|
+
});
|
|
191
|
+
const execute = async (url, config) => {
|
|
192
|
+
setState({ data: null, loading: true, error: null });
|
|
193
|
+
try {
|
|
194
|
+
const response = await client.get(url, config);
|
|
195
|
+
setState({ data: response.data, loading: false, error: null });
|
|
196
|
+
return response.data;
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
200
|
+
setState({ data: null, loading: false, error });
|
|
201
|
+
throw error;
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
return {
|
|
205
|
+
execute,
|
|
206
|
+
data: () => state().data,
|
|
207
|
+
isLoading: () => state().loading,
|
|
208
|
+
error: () => state().error,
|
|
209
|
+
reset: () => setState({ data: null, loading: false, error: null }),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Create HTTP helpers from context.
|
|
214
|
+
*
|
|
215
|
+
* @returns HTTP helper functions
|
|
216
|
+
*/
|
|
217
|
+
/**
|
|
218
|
+
* Creates a http helpers.
|
|
219
|
+
* @returns The created result.
|
|
220
|
+
*/
|
|
221
|
+
export function createHttpHelpers() {
|
|
222
|
+
const client = getHttpClient();
|
|
223
|
+
return {
|
|
224
|
+
get: (url, config) => client.get(url, config),
|
|
225
|
+
post: (url, data, config) => client.post(url, data, config),
|
|
226
|
+
put: (url, data, config) => client.put(url, data, config),
|
|
227
|
+
patch: (url, data, config) => client.patch(url, data, config),
|
|
228
|
+
delete: (url, config) => client.delete(url, config),
|
|
229
|
+
setAuthToken: (token) => client.setAuthToken(token),
|
|
230
|
+
getAuthToken: () => client.getAuthToken(),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Create HTTP primitives from a specific client.
|
|
235
|
+
*
|
|
236
|
+
* @param client - HTTP client
|
|
237
|
+
* @returns HTTP methods
|
|
238
|
+
*/
|
|
239
|
+
/**
|
|
240
|
+
* Creates a http from client.
|
|
241
|
+
* @param client - The client instance.
|
|
242
|
+
* @returns The created result.
|
|
243
|
+
*/
|
|
244
|
+
export function createHttpFromClient(client) {
|
|
245
|
+
return {
|
|
246
|
+
get: (url, config) => client.get(url, config),
|
|
247
|
+
post: (url, data, config) => client.post(url, data, config),
|
|
248
|
+
put: (url, data, config) => client.put(url, data, config),
|
|
249
|
+
patch: (url, data, config) => client.patch(url, data, config),
|
|
250
|
+
delete: (url, config) => client.delete(url, config),
|
|
251
|
+
request: (config) => client.request(config),
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/primitives/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitives for internationalization.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { type Accessor } from 'solid-js';
|
|
7
|
+
import type { I18nProvider, InterpolationValues, LocaleConfig, TranslateFunction, TranslateOptions } from '@molecule/app-i18n';
|
|
8
|
+
/**
|
|
9
|
+
* Create i18n primitives for translations.
|
|
10
|
+
*
|
|
11
|
+
* @returns I18n primitives object
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* import { createI18n } from '@molecule/app-solid'
|
|
16
|
+
*
|
|
17
|
+
* function Greeting() {
|
|
18
|
+
* const { t, locale, setLocale } = createI18n()
|
|
19
|
+
*
|
|
20
|
+
* return (
|
|
21
|
+
* <div>
|
|
22
|
+
* <h1>{t('greeting.hello')}</h1>
|
|
23
|
+
* <select
|
|
24
|
+
* value={locale()}
|
|
25
|
+
* onChange={(e) => setLocale(e.target.value)}
|
|
26
|
+
* >
|
|
27
|
+
* <option value="en">English</option>
|
|
28
|
+
* <option value="es">Español</option>
|
|
29
|
+
* </select>
|
|
30
|
+
* </div>
|
|
31
|
+
* )
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* Creates a i18n.
|
|
37
|
+
* @returns The created result.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createI18n(): {
|
|
40
|
+
t: TranslateFunction;
|
|
41
|
+
locale: Accessor<string>;
|
|
42
|
+
setLocale: (newLocale: string) => Promise<void>;
|
|
43
|
+
isReady: Accessor<boolean>;
|
|
44
|
+
getLocales: () => LocaleConfig[];
|
|
45
|
+
hasKey: (key: string) => boolean;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Get translate function.
|
|
49
|
+
*
|
|
50
|
+
* @returns Translate function
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* function Button() {
|
|
55
|
+
* const t = useTranslate()
|
|
56
|
+
* return <button>{t('buttons.submit')}</button>
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function useTranslate(): TranslateFunction;
|
|
61
|
+
/**
|
|
62
|
+
* Get current locale as accessor.
|
|
63
|
+
*
|
|
64
|
+
* @returns Accessor for current locale
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```tsx
|
|
68
|
+
* function LocaleIndicator() {
|
|
69
|
+
* const locale = useLocale()
|
|
70
|
+
* return <span>Current: {locale()}</span>
|
|
71
|
+
* }
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function useLocale(): Accessor<string>;
|
|
75
|
+
/**
|
|
76
|
+
* Create a reactive translation.
|
|
77
|
+
*
|
|
78
|
+
* @param key - Translation key
|
|
79
|
+
* @param values - Interpolation values for the translation.
|
|
80
|
+
* @param options - Translation options
|
|
81
|
+
* @returns Accessor for translated string
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```tsx
|
|
85
|
+
* function WelcomeMessage() {
|
|
86
|
+
* const message = useTranslation('welcome.message', { name: 'User' })
|
|
87
|
+
* return <p>{message()}</p>
|
|
88
|
+
* }
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export declare function useTranslation(key: string, values?: InterpolationValues, options?: TranslateOptions): Accessor<string>;
|
|
92
|
+
/**
|
|
93
|
+
* Create a reactive plural translation.
|
|
94
|
+
*
|
|
95
|
+
* @param key - Translation key
|
|
96
|
+
* @param count - Count accessor for pluralization
|
|
97
|
+
* @param values - Interpolation values for the translation.
|
|
98
|
+
* @returns Accessor for translated string
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```tsx
|
|
102
|
+
* function ItemCount() {
|
|
103
|
+
* const [count, setCount] = createSignal(5)
|
|
104
|
+
* const text = usePlural('items.count', count)
|
|
105
|
+
* return <span>{text()}</span>
|
|
106
|
+
* }
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare function usePlural(key: string, count: Accessor<number>, values?: InterpolationValues): Accessor<string>;
|
|
110
|
+
/**
|
|
111
|
+
* Create i18n helpers from context.
|
|
112
|
+
*
|
|
113
|
+
* @returns I18n helper functions
|
|
114
|
+
*/
|
|
115
|
+
/**
|
|
116
|
+
* Creates a i18n helpers.
|
|
117
|
+
* @returns The created result.
|
|
118
|
+
*/
|
|
119
|
+
export declare function createI18nHelpers(): {
|
|
120
|
+
t: TranslateFunction;
|
|
121
|
+
getLocale: () => string;
|
|
122
|
+
setLocale: (locale: string) => Promise<void>;
|
|
123
|
+
getLocales: () => LocaleConfig[];
|
|
124
|
+
hasKey: (key: string) => boolean;
|
|
125
|
+
isReady: () => boolean;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Create i18n primitives from a specific provider.
|
|
129
|
+
*
|
|
130
|
+
* @param provider - I18n provider
|
|
131
|
+
* @returns I18n primitives
|
|
132
|
+
*/
|
|
133
|
+
/**
|
|
134
|
+
* Creates a i18n from provider.
|
|
135
|
+
* @param provider - The provider implementation.
|
|
136
|
+
* @returns The created result.
|
|
137
|
+
*/
|
|
138
|
+
export declare function createI18nFromProvider(provider: I18nProvider): {
|
|
139
|
+
t: TranslateFunction;
|
|
140
|
+
locale: Accessor<string>;
|
|
141
|
+
setLocale: (newLocale: string) => Promise<void>;
|
|
142
|
+
isReady: Accessor<boolean>;
|
|
143
|
+
getLocales: () => LocaleConfig[];
|
|
144
|
+
hasKey: (key: string) => boolean;
|
|
145
|
+
};
|
|
146
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/primitives/i18n.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAqD,MAAM,UAAU,CAAA;AAE3F,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,oBAAoB,CAAA;AAI3B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;;GAGG;AACH,wBAAgB,UAAU,IAAI;IAC5B,CAAC,EAAE,iBAAiB,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC1B,UAAU,EAAE,MAAM,YAAY,EAAE,CAAA;IAChC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;CACjC,CAiDA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,IAAI,iBAAiB,CAGhD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,CAG5C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,gBAAgB,GACzB,QAAQ,CAAC,MAAM,CAAC,CAQlB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EACvB,MAAM,CAAC,EAAE,mBAAmB,GAC3B,QAAQ,CAAC,MAAM,CAAC,CAOlB;AAED;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI;IACnC,CAAC,EAAE,iBAAiB,CAAA;IACpB,SAAS,EAAE,MAAM,MAAM,CAAA;IACvB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,UAAU,EAAE,MAAM,YAAY,EAAE,CAAA;IAChC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IAChC,OAAO,EAAE,MAAM,OAAO,CAAA;CACvB,CAWA;AAED;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,GAAG;IAC9D,CAAC,EAAE,iBAAiB,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC1B,UAAU,EAAE,MAAM,YAAY,EAAE,CAAA;IAChC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;CACjC,CA0CA"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitives for internationalization.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { createEffect, createMemo, createSignal, onCleanup } from 'solid-js';
|
|
7
|
+
import { getI18nProvider } from '../context.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create i18n primitives for translations.
|
|
10
|
+
*
|
|
11
|
+
* @returns I18n primitives object
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* import { createI18n } from '@molecule/app-solid'
|
|
16
|
+
*
|
|
17
|
+
* function Greeting() {
|
|
18
|
+
* const { t, locale, setLocale } = createI18n()
|
|
19
|
+
*
|
|
20
|
+
* return (
|
|
21
|
+
* <div>
|
|
22
|
+
* <h1>{t('greeting.hello')}</h1>
|
|
23
|
+
* <select
|
|
24
|
+
* value={locale()}
|
|
25
|
+
* onChange={(e) => setLocale(e.target.value)}
|
|
26
|
+
* >
|
|
27
|
+
* <option value="en">English</option>
|
|
28
|
+
* <option value="es">Español</option>
|
|
29
|
+
* </select>
|
|
30
|
+
* </div>
|
|
31
|
+
* )
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* Creates a i18n.
|
|
37
|
+
* @returns The created result.
|
|
38
|
+
*/
|
|
39
|
+
export function createI18n() {
|
|
40
|
+
const provider = getI18nProvider();
|
|
41
|
+
const [locale, setLocaleSignal] = createSignal(provider.getLocale());
|
|
42
|
+
const [isReady, setIsReady] = createSignal(provider.isReady?.() ?? true);
|
|
43
|
+
const [translationVersion, setTranslationVersion] = createSignal(0);
|
|
44
|
+
// Subscribe to locale changes
|
|
45
|
+
createEffect(() => {
|
|
46
|
+
const unsubscribe = provider.onLocaleChange((newLocale) => {
|
|
47
|
+
setLocaleSignal(newLocale);
|
|
48
|
+
setTranslationVersion((v) => v + 1);
|
|
49
|
+
});
|
|
50
|
+
onCleanup(unsubscribe);
|
|
51
|
+
});
|
|
52
|
+
// Subscribe to ready state
|
|
53
|
+
createEffect(() => {
|
|
54
|
+
const unsubscribe = provider.onReady?.(() => {
|
|
55
|
+
setIsReady(true);
|
|
56
|
+
});
|
|
57
|
+
onCleanup(() => unsubscribe?.());
|
|
58
|
+
});
|
|
59
|
+
const t = (key, values, options) => {
|
|
60
|
+
// Re-run when locale or translations change
|
|
61
|
+
locale();
|
|
62
|
+
translationVersion();
|
|
63
|
+
return provider.t(key, values, options);
|
|
64
|
+
};
|
|
65
|
+
const setLocale = async (newLocale) => {
|
|
66
|
+
await provider.setLocale(newLocale);
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
t,
|
|
70
|
+
locale,
|
|
71
|
+
setLocale,
|
|
72
|
+
isReady,
|
|
73
|
+
getLocales: () => provider.getLocales(),
|
|
74
|
+
hasKey: (key) => provider.hasKey?.(key) ?? provider.exists(key),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get translate function.
|
|
79
|
+
*
|
|
80
|
+
* @returns Translate function
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```tsx
|
|
84
|
+
* function Button() {
|
|
85
|
+
* const t = useTranslate()
|
|
86
|
+
* return <button>{t('buttons.submit')}</button>
|
|
87
|
+
* }
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export function useTranslate() {
|
|
91
|
+
const { t } = createI18n();
|
|
92
|
+
return t;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get current locale as accessor.
|
|
96
|
+
*
|
|
97
|
+
* @returns Accessor for current locale
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```tsx
|
|
101
|
+
* function LocaleIndicator() {
|
|
102
|
+
* const locale = useLocale()
|
|
103
|
+
* return <span>Current: {locale()}</span>
|
|
104
|
+
* }
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export function useLocale() {
|
|
108
|
+
const { locale } = createI18n();
|
|
109
|
+
return locale;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Create a reactive translation.
|
|
113
|
+
*
|
|
114
|
+
* @param key - Translation key
|
|
115
|
+
* @param values - Interpolation values for the translation.
|
|
116
|
+
* @param options - Translation options
|
|
117
|
+
* @returns Accessor for translated string
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```tsx
|
|
121
|
+
* function WelcomeMessage() {
|
|
122
|
+
* const message = useTranslation('welcome.message', { name: 'User' })
|
|
123
|
+
* return <p>{message()}</p>
|
|
124
|
+
* }
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
export function useTranslation(key, values, options) {
|
|
128
|
+
const { t, locale } = createI18n();
|
|
129
|
+
return createMemo(() => {
|
|
130
|
+
// Re-run when locale changes
|
|
131
|
+
locale();
|
|
132
|
+
return t(key, values, options);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Create a reactive plural translation.
|
|
137
|
+
*
|
|
138
|
+
* @param key - Translation key
|
|
139
|
+
* @param count - Count accessor for pluralization
|
|
140
|
+
* @param values - Interpolation values for the translation.
|
|
141
|
+
* @returns Accessor for translated string
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```tsx
|
|
145
|
+
* function ItemCount() {
|
|
146
|
+
* const [count, setCount] = createSignal(5)
|
|
147
|
+
* const text = usePlural('items.count', count)
|
|
148
|
+
* return <span>{text()}</span>
|
|
149
|
+
* }
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export function usePlural(key, count, values) {
|
|
153
|
+
const { t, locale } = createI18n();
|
|
154
|
+
return createMemo(() => {
|
|
155
|
+
locale();
|
|
156
|
+
return t(key, values, { count: count() });
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Create i18n helpers from context.
|
|
161
|
+
*
|
|
162
|
+
* @returns I18n helper functions
|
|
163
|
+
*/
|
|
164
|
+
/**
|
|
165
|
+
* Creates a i18n helpers.
|
|
166
|
+
* @returns The created result.
|
|
167
|
+
*/
|
|
168
|
+
export function createI18nHelpers() {
|
|
169
|
+
const provider = getI18nProvider();
|
|
170
|
+
return {
|
|
171
|
+
t: provider.t.bind(provider),
|
|
172
|
+
getLocale: () => provider.getLocale(),
|
|
173
|
+
setLocale: (locale) => provider.setLocale(locale),
|
|
174
|
+
getLocales: () => provider.getLocales(),
|
|
175
|
+
hasKey: (key) => provider.hasKey?.(key) ?? provider.exists(key),
|
|
176
|
+
isReady: () => provider.isReady?.() ?? true,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Create i18n primitives from a specific provider.
|
|
181
|
+
*
|
|
182
|
+
* @param provider - I18n provider
|
|
183
|
+
* @returns I18n primitives
|
|
184
|
+
*/
|
|
185
|
+
/**
|
|
186
|
+
* Creates a i18n from provider.
|
|
187
|
+
* @param provider - The provider implementation.
|
|
188
|
+
* @returns The created result.
|
|
189
|
+
*/
|
|
190
|
+
export function createI18nFromProvider(provider) {
|
|
191
|
+
const [locale, setLocaleSignal] = createSignal(provider.getLocale());
|
|
192
|
+
const [isReady, setIsReady] = createSignal(provider.isReady?.() ?? true);
|
|
193
|
+
const [translationVersion, setTranslationVersion] = createSignal(0);
|
|
194
|
+
createEffect(() => {
|
|
195
|
+
const unsubscribe = provider.onLocaleChange((newLocale) => {
|
|
196
|
+
setLocaleSignal(newLocale);
|
|
197
|
+
setTranslationVersion((v) => v + 1);
|
|
198
|
+
});
|
|
199
|
+
onCleanup(unsubscribe);
|
|
200
|
+
});
|
|
201
|
+
createEffect(() => {
|
|
202
|
+
const unsubscribe = provider.onReady?.(() => {
|
|
203
|
+
setIsReady(true);
|
|
204
|
+
});
|
|
205
|
+
onCleanup(() => unsubscribe?.());
|
|
206
|
+
});
|
|
207
|
+
const t = (key, values, options) => {
|
|
208
|
+
locale();
|
|
209
|
+
translationVersion();
|
|
210
|
+
return provider.t(key, values, options);
|
|
211
|
+
};
|
|
212
|
+
return {
|
|
213
|
+
t,
|
|
214
|
+
locale,
|
|
215
|
+
setLocale: async (newLocale) => {
|
|
216
|
+
await provider.setLocale(newLocale);
|
|
217
|
+
},
|
|
218
|
+
isReady,
|
|
219
|
+
getLocales: () => provider.getLocales(),
|
|
220
|
+
hasKey: (key) => provider.hasKey?.(key) ?? provider.exists(key),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/primitives/i18n.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitives for molecule.dev framework bindings.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
export * from './async-state.js';
|
|
7
|
+
export * from './auth.js';
|
|
8
|
+
export * from './capacitor-app.js';
|
|
9
|
+
export * from './change-password.js';
|
|
10
|
+
export * from './device.js';
|
|
11
|
+
export * from './forms.js';
|
|
12
|
+
export * from './http.js';
|
|
13
|
+
export * from './i18n.js';
|
|
14
|
+
export * from './logger.js';
|
|
15
|
+
export * from './login.js';
|
|
16
|
+
export * from './oauth.js';
|
|
17
|
+
export * from './password-reset.js';
|
|
18
|
+
export * from './platform.js';
|
|
19
|
+
export * from './promise.js';
|
|
20
|
+
export * from './push.js';
|
|
21
|
+
export * from './router.js';
|
|
22
|
+
export * from './signup.js';
|
|
23
|
+
export * from './state.js';
|
|
24
|
+
export * from './storage.js';
|
|
25
|
+
export * from './theme.js';
|
|
26
|
+
export * from './version.js';
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/primitives/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
|