@royaltics/ui 1.8.8 → 1.9.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 (48) hide show
  1. package/README.http_query.md +87 -332
  2. package/dist/core/http/http-actions.d.ts +9 -0
  3. package/dist/core/http/http-actions.d.ts.map +1 -0
  4. package/dist/core/http/http-actions.js +207 -0
  5. package/dist/core/http/http-actions.js.map +1 -0
  6. package/dist/core/http/http-store.d.ts +5 -41
  7. package/dist/core/http/http-store.d.ts.map +1 -1
  8. package/dist/core/http/http-store.js +4 -245
  9. package/dist/core/http/http-store.js.map +1 -1
  10. package/dist/core/http/http.client.d.ts +4 -0
  11. package/dist/core/http/http.client.d.ts.map +1 -0
  12. package/dist/core/http/http.client.js +118 -0
  13. package/dist/core/http/http.client.js.map +1 -0
  14. package/dist/core/http/http.refresh.d.ts +2 -0
  15. package/dist/core/http/http.refresh.d.ts.map +1 -0
  16. package/dist/core/http/http.refresh.js +75 -0
  17. package/dist/core/http/http.refresh.js.map +1 -0
  18. package/dist/core/http/http.types.d.ts +81 -0
  19. package/dist/core/http/http.types.d.ts.map +1 -0
  20. package/dist/core/http/http.types.js +2 -0
  21. package/dist/core/http/http.types.js.map +1 -0
  22. package/dist/core/http/http.utils.d.ts +6 -0
  23. package/dist/core/http/http.utils.d.ts.map +1 -0
  24. package/dist/core/http/http.utils.js +58 -0
  25. package/dist/core/http/http.utils.js.map +1 -0
  26. package/dist/core/http/useHttpsubscriptions.d.ts +16 -0
  27. package/dist/core/http/useHttpsubscriptions.d.ts.map +1 -0
  28. package/dist/core/http/useHttpsubscriptions.js +110 -0
  29. package/dist/core/http/useHttpsubscriptions.js.map +1 -0
  30. package/dist/forms/Autocomplete.stories.d.ts.map +1 -1
  31. package/dist/forms/Autocomplete.stories.js.map +1 -1
  32. package/dist/forms/SelectSearch.stories.d.ts.map +1 -1
  33. package/dist/forms/SelectSearch.stories.js +5 -8
  34. package/dist/forms/SelectSearch.stories.js.map +1 -1
  35. package/dist/hooks/index.d.ts +1 -1
  36. package/dist/hooks/index.d.ts.map +1 -1
  37. package/dist/hooks/index.js +1 -1
  38. package/dist/hooks/index.js.map +1 -1
  39. package/dist/hooks/useHttpState.d.ts +2 -38
  40. package/dist/hooks/useHttpState.d.ts.map +1 -1
  41. package/dist/hooks/useHttpState.js +27 -315
  42. package/dist/hooks/useHttpState.js.map +1 -1
  43. package/dist/hooks/useHttpStore.d.ts +19 -0
  44. package/dist/hooks/useHttpStore.d.ts.map +1 -0
  45. package/dist/hooks/useHttpStore.js +29 -0
  46. package/dist/hooks/useHttpStore.js.map +1 -0
  47. package/dist/providers/http-provider.d.ts +1 -1
  48. package/package.json +1 -1
@@ -1,331 +1,43 @@
1
- import { useState, useEffect, useCallback, useRef, useMemo } from "react";
2
- import { toast } from "react-toastify";
3
- import { useHttpStore, HttpFetch, uploadFileChunks } from "../core/http/http-store.js";
4
- const NOOP = (msg) => { toast.error(msg); };
1
+ import { useMemo, useCallback } from "react";
2
+ import { useHttpSubscriptions } from "../core/http/useHttpsubscriptions.js";
3
+ import { executeGet, executeGetInfinite, executeMutation, fetchNextPageAction, refetchAction, fileAction, fileChunksAction } from "../core/http/http-actions.js";
5
4
  const useHttpState = (_options) => {
6
- const queryManager = useHttpStore(state => state.queryManager);
7
- const online = useHttpStore(state => state.online);
8
- const debug = useHttpStore(state => state.debug);
9
- const [queryStates, setQueryStates] = useState({});
10
- const subscriptionsRef = useRef(new Map());
11
- const callbacksRef = useRef(new Map());
12
- const loadingOperationsRef = useRef(new Set());
13
- const queryFunctionsRef = useRef(new Map());
14
- const setOperationLoading = useCallback((method, key, loading) => {
15
- const keyString = `${method}-${generateReadableKey(key)}`;
16
- if (loading) {
17
- loadingOperationsRef.current.add(keyString);
18
- }
19
- else {
20
- loadingOperationsRef.current.delete(keyString);
21
- }
22
- setQueryStates(prev => ({ ...prev }));
23
- }, []);
24
- const generateQueryKey = (api, query, customKey) => {
25
- return customKey || (query ? [api, query] : [api]);
26
- };
27
- const generateReadableKey = useCallback((queryKey) => {
28
- return queryKey.map(item => {
29
- if (typeof item === 'string')
30
- return item;
31
- if (Array.isArray(item))
32
- return item.join('/');
33
- return JSON.stringify(item);
34
- }).join(',');
35
- }, []);
36
- const setupSubscription = useCallback((queryKey, isInfinite = false, onSuccess, onError) => {
37
- const keyString = generateReadableKey(queryKey);
38
- if (subscriptionsRef.current.has(keyString))
39
- return;
40
- callbacksRef.current.set(keyString, { onSuccess, onError });
41
- if (subscriptionsRef.current.has(keyString)) {
42
- return;
43
- }
44
- const unsubscribe = isInfinite
45
- ? queryManager.subscribeInfinite(queryKey, (entry) => {
46
- setQueryStates(prev => ({
47
- ...prev,
48
- [keyString]: {
49
- data: entry.data,
50
- pages: entry.pageResponses,
51
- isLoading: entry.status === 'pending' && entry.pageResponses.length === 0,
52
- error: entry.error,
53
- hasNextPage: entry.hasNextPage,
54
- isFetchingNextPage: false
55
- }
56
- }));
57
- const callbacks = callbacksRef.current.get(keyString);
58
- if (entry.status === 'success' && callbacks?.onSuccess) {
59
- const firstPage = entry.pageResponses[0];
60
- callbacks.onSuccess(entry.data, firstPage?.paginate);
61
- }
62
- else if (entry.status === 'error' && callbacks?.onError && entry.error) {
63
- callbacks.onError(entry.error.message, entry.error);
64
- }
65
- })
66
- : queryManager.subscribe(queryKey, (entry) => {
67
- setQueryStates(prev => ({
68
- ...prev,
69
- [keyString]: {
70
- data: entry.data?.data ?? null,
71
- isLoading: entry.status === 'pending',
72
- error: entry.error
73
- }
74
- }));
75
- const callbacks = callbacksRef.current.get(keyString);
76
- if (entry.status === 'success' && callbacks?.onSuccess && entry.data) {
77
- callbacks.onSuccess(entry.data.data, entry.data.paginate);
78
- }
79
- else if (entry.status === 'error' && callbacks?.onError && entry.error) {
80
- callbacks.onError(entry.error.message, entry.error);
81
- }
82
- });
83
- subscriptionsRef.current.set(keyString, unsubscribe);
84
- }, [queryManager, generateReadableKey]);
85
- const cleanupSubscription = useCallback((queryKey) => {
86
- const keyString = generateReadableKey(queryKey);
87
- const unsubscribe = subscriptionsRef.current.get(keyString);
88
- if (unsubscribe) {
89
- unsubscribe();
90
- subscriptionsRef.current.delete(keyString);
91
- callbacksRef.current.delete(keyString);
92
- queryFunctionsRef.current.delete(keyString);
93
- }
94
- setQueryStates(prev => {
95
- const newState = { ...prev };
96
- delete newState[keyString];
97
- return newState;
98
- });
99
- queryManager.resetQueries(queryKey);
100
- }, [generateReadableKey, queryManager]);
101
- useEffect(() => {
102
- return () => {
103
- subscriptionsRef.current.forEach(unsubscribe => unsubscribe());
104
- subscriptionsRef.current.clear();
105
- callbacksRef.current.clear();
106
- };
107
- }, []);
108
- const get = useCallback(async (api, opts) => {
109
- const { cacheOptions, onSuccess, onError, ...fetchOptions } = opts;
110
- if (cacheOptions?.enabled) {
111
- const queryKey = generateQueryKey(api, opts.query, cacheOptions.queryKey);
112
- setupSubscription(queryKey, false, onSuccess, onError);
113
- if (!online) {
114
- onError?.("OMIT_OFFLINE", new Error("Offline"));
115
- return;
116
- }
117
- const cachedData = queryManager.getQueryData(queryKey);
118
- if (cachedData !== null) {
119
- onSuccess?.(cachedData.data, cachedData.paginate);
120
- }
121
- try {
122
- const result = await queryManager.fetchQuery(queryKey, () => HttpFetch({ api, ...fetchOptions, method: 'GET' }), cacheOptions);
123
- if (cachedData === null && result) {
124
- onSuccess?.(result.data, result.paginate);
125
- }
126
- }
127
- catch (err) {
128
- const error = err;
129
- const _onError = onError || NOOP;
130
- _onError(error.message, error);
131
- return;
132
- }
133
- return;
134
- }
135
- const operationKey = generateQueryKey(api, opts.query);
136
- setOperationLoading('get', operationKey, true);
137
- try {
138
- const result = await HttpFetch({ api, ...fetchOptions, method: 'GET' });
139
- onSuccess?.(result.data, result.paginate);
140
- return result.data;
141
- }
142
- catch (err) {
143
- const error = err;
144
- const _onError = onError || NOOP;
145
- _onError(error.message, error);
146
- return;
147
- }
148
- finally {
149
- setOperationLoading('get', operationKey, false);
150
- }
151
- }, [queryManager, setupSubscription, online, setOperationLoading]);
152
- const getInfinite = useCallback(async (api, opts) => {
153
- const { cacheOptions, infiniteOptions, onSuccess, onError, ...fetchOptions } = opts;
154
- const cursorKey = infiniteOptions?.cursorKey || 'next';
155
- const queryKey = generateQueryKey(api, opts.query, cacheOptions?.queryKey);
156
- const keyString = generateReadableKey(queryKey);
157
- setupSubscription(queryKey, true, onSuccess, onError);
158
- if (!online) {
159
- onError?.("OMIT_OFFLINE", new Error("Offline"));
160
- return;
161
- }
162
- const cachedData = queryManager.getQueryData(queryKey);
163
- if (cachedData !== null) {
164
- const firstPage = cachedData.pages?.[0];
165
- onSuccess?.(cachedData.data, firstPage?.paginate);
166
- }
167
- const queryFn = (pageParam) => HttpFetch({
168
- api,
169
- ...fetchOptions,
170
- method: 'GET',
171
- query: { ...opts.query, [cursorKey]: pageParam }
172
- });
173
- queryFunctionsRef.current.set(keyString, { queryFn, cursorKey });
174
- try {
175
- const result = await queryManager.fetchInfiniteQuery(queryKey, queryFn, { ...cacheOptions, ...infiniteOptions });
176
- if (cachedData === null && result) {
177
- const firstPage = result.pageResponses?.[0];
178
- onSuccess?.(result.data, firstPage?.paginate);
179
- }
180
- }
181
- catch (err) {
182
- const error = err;
183
- const _onError = onError || NOOP;
184
- _onError(error.message, error);
185
- return;
186
- }
187
- }, [queryManager, setupSubscription, online, generateReadableKey]);
188
- const fetchNextPage = useCallback(async (queryKey) => {
189
- const keyString = generateReadableKey(queryKey);
190
- const state = queryStates[keyString];
191
- const stored = queryFunctionsRef.current.get(keyString);
192
- if (!stored) {
193
- if (debug)
194
- console.error('fetchNextPage: No queryFn found. Call getInfinite first.', keyString);
195
- return;
196
- }
197
- if (!state || state.isFetchingNextPage || !state.hasNextPage)
198
- return;
199
- setQueryStates(prev => ({
200
- ...prev,
201
- [keyString]: { ...prev[keyString], isFetchingNextPage: true }
202
- }));
203
- try {
204
- await queryManager.fetchNextPage(queryKey, stored.queryFn);
205
- }
206
- catch (err) {
207
- const error = err;
208
- if (debug)
209
- console.error('fetchNextPage error:', error.message);
210
- }
211
- finally {
212
- setQueryStates(prev => ({
213
- ...prev,
214
- [keyString]: { ...prev[keyString], isFetchingNextPage: false }
215
- }));
216
- }
217
- }, [queryStates, queryManager, generateReadableKey, debug]);
218
- const executeMutation = useCallback(async (api, opts, method) => {
219
- const { mutationOptions, onSuccess, onError, ...fetchOptions } = opts;
220
- if (mutationOptions?.mutation) {
221
- if (mutationOptions.optimisticData) {
222
- mutationOptions.invalidateKeys?.forEach(key => {
223
- queryManager.setQueryData(key, mutationOptions.optimisticData);
224
- });
225
- }
226
- try {
227
- const result = await HttpFetch({ api, ...fetchOptions, method });
228
- mutationOptions.invalidateKeys?.forEach(key => queryManager.invalidateQueries(key));
229
- onSuccess?.(result.data, result.paginate);
230
- return result.data;
231
- }
232
- catch (err) {
233
- const error = err;
234
- if (mutationOptions.optimisticData) {
235
- mutationOptions.invalidateKeys?.forEach(key => queryManager.invalidateQueries(key));
236
- }
237
- const _onError = onError || NOOP;
238
- _onError(error.message, error);
239
- return;
240
- }
241
- }
242
- const operationKey = generateQueryKey(api, opts.data);
243
- setOperationLoading(method.toLowerCase(), operationKey, true);
244
- try {
245
- const result = await HttpFetch({ api, ...fetchOptions, method });
246
- onSuccess?.(result.data, result.paginate);
247
- return result.data;
248
- }
249
- catch (err) {
250
- const error = err;
251
- const _onError = onError || NOOP;
252
- _onError(error.message, error);
253
- return;
254
- }
255
- finally {
256
- setOperationLoading(method.toLowerCase(), operationKey, false);
257
- }
258
- }, [queryManager, setOperationLoading]);
259
- const refetch = useCallback(async (queryKey, api, opts) => {
260
- const keyString = generateReadableKey(queryKey);
261
- if (!queryStates[keyString])
262
- return;
263
- setQueryStates(prev => ({
264
- ...prev,
265
- [keyString]: { ...prev[keyString], isLoading: true, error: null }
266
- }));
267
- try {
268
- await queryManager.fetchQuery(queryKey, () => HttpFetch({ api, ...opts, method: 'GET' }), opts.cacheOptions);
269
- }
270
- catch (err) {
271
- const error = err;
272
- const _onError = opts.onError || NOOP;
273
- _onError(error.message, error);
274
- return;
275
- }
276
- }, [queryStates, queryManager, generateReadableKey]);
277
- const isLoading = Object.values(queryStates).some(state => state.isLoading) || loadingOperationsRef.current.size > 0;
5
+ const core = useHttpSubscriptions();
6
+ const isLoading = Object.values(core.queryStates).some(state => state.isLoading) || core.loadingOperationsRef.current.size > 0;
278
7
  const paginates = useMemo(() => {
279
- return Object.keys(queryStates).reduce((acc, key) => {
8
+ return Object.keys(core.queryStates).reduce((acc, key) => {
280
9
  acc[key] = {
281
- hasNext: queryStates[key].hasNextPage,
282
- isFetching: queryStates[key].isFetchingNextPage,
10
+ hasNext: core.queryStates[key].hasNextPage,
11
+ isFetching: core.queryStates[key].isFetchingNextPage,
283
12
  };
284
13
  return acc;
285
14
  }, {});
286
- }, [queryStates]);
15
+ }, [core.queryStates]);
16
+ const get = useCallback((api, opts) => executeGet(core, api, opts), [core]);
17
+ const getInfinite = useCallback((api, opts) => executeGetInfinite(core, api, opts), [core]);
18
+ const fetchNextPage = useCallback((queryKey) => fetchNextPageAction(core, queryKey), [core]);
19
+ const refetch = useCallback((queryKey, api, opts) => refetchAction(core, queryKey, api, opts), [core]);
20
+ const post = useCallback((api, opts) => executeMutation(core, api, opts, 'POST'), [core]);
21
+ const patch = useCallback((api, opts) => executeMutation(core, api, opts, 'PATCH'), [core]);
22
+ const postPatch = useCallback((api, id, opts) => executeMutation(core, id ? [api, String(id)] : api, opts, id ? 'PATCH' : 'POST'), [core]);
23
+ const del = useCallback((api, opts) => executeMutation(core, api, opts, 'DELETE'), [core]);
24
+ const file = useCallback((api, opts) => fileAction(core, api, opts), [core]);
25
+ const fileChunks = useCallback((api, opts) => fileChunksAction(core, api, opts), [core]);
287
26
  return {
288
27
  isLoading,
289
- error: Object.values(queryStates).find(state => state.error)?.error || null,
28
+ error: Object.values(core.queryStates).find(state => state.error)?.error || null,
290
29
  paginates,
291
30
  refetch,
292
31
  fetchNextPage,
293
- cleanupQuery: cleanupSubscription,
32
+ cleanupQuery: core.cleanupSubscription,
294
33
  get,
295
34
  getInfinite,
296
- post: (api, opts) => executeMutation(api, opts, 'POST'),
297
- patch: (api, opts) => executeMutation(api, opts, 'PATCH'),
298
- postPatch: (api, id, opts) => executeMutation(id ? [api, String(id)] : api, opts, id ? 'PATCH' : 'POST'),
299
- del: (api, opts) => executeMutation(api, opts, 'DELETE'),
300
- file: async (api, opts) => {
301
- const _onError = opts.onError || NOOP;
302
- const operationKey = generateQueryKey(api, opts.data);
303
- setOperationLoading('post', operationKey, true);
304
- try {
305
- const result = await HttpFetch({ ...opts, api, method: opts.method || 'POST', content_type: 'file' });
306
- opts.onSuccess?.(result.data, result.paginate);
307
- return result.data;
308
- }
309
- catch (err) {
310
- const error = err;
311
- _onError(error.message, error);
312
- return;
313
- }
314
- finally {
315
- setOperationLoading('post', operationKey, false);
316
- }
317
- },
318
- fileChunks: async (api, opts) => {
319
- const _onError = opts.onError || NOOP;
320
- const operationKey = generateQueryKey(api, opts.data);
321
- setOperationLoading('post', operationKey, true);
322
- try {
323
- await uploadFileChunks(api, opts.data || {}, opts.headers, opts.withAuth, opts.chunkSize, 'POST', opts.onSuccess, _onError, opts.onProgress);
324
- }
325
- finally {
326
- setOperationLoading('post', operationKey, false);
327
- }
328
- }
35
+ post,
36
+ patch,
37
+ postPatch,
38
+ del,
39
+ file,
40
+ fileChunks
329
41
  };
330
42
  };
331
43
  export default useHttpState;
@@ -1 +1 @@
1
- {"version":3,"file":"useHttpState.js","sourceRoot":"","sources":["../../src/hooks/useHttpState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useHttpState.js","sourceRoot":"","sources":["../../src/hooks/useHttpState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { HttpStoreState, refreshConfig } from '../core/http/http-store.js';
2
+ export interface HttpOptions {
3
+ baseUrl?: string;
4
+ debug?: boolean;
5
+ headers?: Record<string, string>;
6
+ skipRejected?: boolean;
7
+ onHttpError?: (error: Error | Response) => void;
8
+ onNotAuth?: (currentUrl: string) => void;
9
+ refreshConfig?: refreshConfig;
10
+ queryConfig?: {
11
+ staleTime?: number;
12
+ gcTime?: number;
13
+ refetchOnWindowFocus?: boolean;
14
+ retry?: number;
15
+ };
16
+ }
17
+ export declare const initHttpOptions: (options: HttpOptions) => void;
18
+ export declare const useHttpStore: <T>(selector: (state: HttpStoreState) => T) => T;
19
+ //# sourceMappingURL=useHttpStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHttpStore.d.ts","sourceRoot":"","sources":["../../src/hooks/useHttpStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,cAAc,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGtF,MAAM,WAAW,WAAW;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACF;AAID,eAAO,MAAM,eAAe,GAAI,SAAS,WAAW,SAmCnD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,CAAC,EAAG,UAAU,CAAC,KAAK,EAAE,cAAc,KAAK,CAAC,MAAkC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { useStore } from 'zustand';
2
+ import { httpStore } from '../core/http/http-store.js';
3
+ import QueryManager from '../core/http/query-manager.js';
4
+ let __httpOptionsInitialized = false;
5
+ export const initHttpOptions = (options) => {
6
+ if (__httpOptionsInitialized)
7
+ return;
8
+ __httpOptionsInitialized = true;
9
+ const { baseUrl = '', debug = false, headers = {}, skipRejected = false, onHttpError, onNotAuth, refreshConfig: rConfig, queryConfig, } = options;
10
+ const queryManager = new QueryManager(queryConfig);
11
+ httpStore.getState().init({
12
+ baseUrl,
13
+ debug,
14
+ headers,
15
+ queryManager,
16
+ skipRejected,
17
+ onHttpError,
18
+ onNotAuth,
19
+ refreshConfig: rConfig,
20
+ });
21
+ if (typeof window !== 'undefined') {
22
+ const handleOnline = () => httpStore.getState().setOnline(true);
23
+ const handleOffline = () => httpStore.getState().setOnline(false);
24
+ window.addEventListener('online', handleOnline);
25
+ window.addEventListener('offline', handleOffline);
26
+ }
27
+ };
28
+ export const useHttpStore = (selector) => useStore(httpStore, selector);
29
+ //# sourceMappingURL=useHttpStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHttpStore.js","sourceRoot":"","sources":["../../src/hooks/useHttpStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAiC,MAAM,4BAA4B,CAAC;AACtF,OAAO,YAAY,MAAM,+BAA+B,CAAC;AAkBzD,IAAI,wBAAwB,GAAG,KAAK,CAAC;AAErC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAoB,EAAE,EAAE;IACvD,IAAI,wBAAwB;QAAE,OAAO;IACrC,wBAAwB,GAAG,IAAI,CAAC;IAEhC,MAAM,EACL,OAAO,GAAG,EAAE,EACZ,KAAK,GAAG,KAAK,EACb,OAAO,GAAG,EAAE,EACZ,YAAY,GAAG,KAAK,EACpB,WAAW,EACX,SAAS,EACT,aAAa,EAAE,OAAO,EACtB,WAAW,GACX,GAAG,OAAO,CAAC;IAEZ,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;IAEnD,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;QACzB,OAAO;QACP,KAAK;QACL,OAAO;QACP,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,SAAS;QACT,aAAa,EAAE,OAAO;KACtB,CAAC,CAAC;IAEH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAElE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACnD,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAK,QAAsC,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC"}
@@ -17,6 +17,6 @@ interface HttpProviderProps {
17
17
  };
18
18
  }
19
19
  export declare const HttpProvider: React.FC<HttpProviderProps>;
20
- export declare const useHttpContext: () => import("../core/http/http-store.js").HttpStoreState;
20
+ export declare const useHttpContext: () => import("../core/http/http.types.js").HttpStoreState;
21
21
  export {};
22
22
  //# sourceMappingURL=http-provider.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@royaltics/ui",
3
- "version": "1.8.8",
3
+ "version": "1.9.0",
4
4
  "private": false,
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",