@makroz/mobile 1.0.1

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 (232) hide show
  1. package/LICENSE +33 -0
  2. package/README.md +19 -0
  3. package/dist/auth/MkAuthContext.d.ts +72 -0
  4. package/dist/auth/MkAuthContext.d.ts.map +1 -0
  5. package/dist/auth/MkAuthContext.js +19 -0
  6. package/dist/auth/MkAuthContext.js.map +1 -0
  7. package/dist/auth/MkAuthForm.d.ts +31 -0
  8. package/dist/auth/MkAuthForm.d.ts.map +1 -0
  9. package/dist/auth/MkAuthForm.js +180 -0
  10. package/dist/auth/MkAuthForm.js.map +1 -0
  11. package/dist/auth/MkAuthProvider.d.ts +57 -0
  12. package/dist/auth/MkAuthProvider.d.ts.map +1 -0
  13. package/dist/auth/MkAuthProvider.js +282 -0
  14. package/dist/auth/MkAuthProvider.js.map +1 -0
  15. package/dist/auth/secureStorage.d.ts +63 -0
  16. package/dist/auth/secureStorage.d.ts.map +1 -0
  17. package/dist/auth/secureStorage.js +104 -0
  18. package/dist/auth/secureStorage.js.map +1 -0
  19. package/dist/auth/types.d.ts +65 -0
  20. package/dist/auth/types.d.ts.map +1 -0
  21. package/dist/auth/types.js +10 -0
  22. package/dist/auth/types.js.map +1 -0
  23. package/dist/auth/useMkAuth.d.ts +17 -0
  24. package/dist/auth/useMkAuth.d.ts.map +1 -0
  25. package/dist/auth/useMkAuth.js +24 -0
  26. package/dist/auth/useMkAuth.js.map +1 -0
  27. package/dist/components/MkAccordion.d.ts +19 -0
  28. package/dist/components/MkAccordion.d.ts.map +1 -0
  29. package/dist/components/MkAccordion.js +49 -0
  30. package/dist/components/MkAccordion.js.map +1 -0
  31. package/dist/components/MkAlert.d.ts +18 -0
  32. package/dist/components/MkAlert.d.ts.map +1 -0
  33. package/dist/components/MkAlert.js +35 -0
  34. package/dist/components/MkAlert.js.map +1 -0
  35. package/dist/components/MkAvatar.d.ts +12 -0
  36. package/dist/components/MkAvatar.d.ts.map +1 -0
  37. package/dist/components/MkAvatar.js +33 -0
  38. package/dist/components/MkAvatar.js.map +1 -0
  39. package/dist/components/MkBadge.d.ts +11 -0
  40. package/dist/components/MkBadge.d.ts.map +1 -0
  41. package/dist/components/MkBadge.js +22 -0
  42. package/dist/components/MkBadge.js.map +1 -0
  43. package/dist/components/MkButton.d.ts +13 -0
  44. package/dist/components/MkButton.d.ts.map +1 -0
  45. package/dist/components/MkButton.js +53 -0
  46. package/dist/components/MkButton.js.map +1 -0
  47. package/dist/components/MkCard.d.ts +15 -0
  48. package/dist/components/MkCard.d.ts.map +1 -0
  49. package/dist/components/MkCard.js +25 -0
  50. package/dist/components/MkCard.js.map +1 -0
  51. package/dist/components/MkCheck.d.ts +18 -0
  52. package/dist/components/MkCheck.d.ts.map +1 -0
  53. package/dist/components/MkCheck.js +33 -0
  54. package/dist/components/MkCheck.js.map +1 -0
  55. package/dist/components/MkDatePicker.d.ts +30 -0
  56. package/dist/components/MkDatePicker.d.ts.map +1 -0
  57. package/dist/components/MkDatePicker.js +87 -0
  58. package/dist/components/MkDatePicker.js.map +1 -0
  59. package/dist/components/MkDivider.d.ts +11 -0
  60. package/dist/components/MkDivider.d.ts.map +1 -0
  61. package/dist/components/MkDivider.js +28 -0
  62. package/dist/components/MkDivider.js.map +1 -0
  63. package/dist/components/MkDropDown.d.ts +37 -0
  64. package/dist/components/MkDropDown.d.ts.map +1 -0
  65. package/dist/components/MkDropDown.js +82 -0
  66. package/dist/components/MkDropDown.js.map +1 -0
  67. package/dist/components/MkEmptyState.d.ts +11 -0
  68. package/dist/components/MkEmptyState.d.ts.map +1 -0
  69. package/dist/components/MkEmptyState.js +16 -0
  70. package/dist/components/MkEmptyState.js.map +1 -0
  71. package/dist/components/MkFileUpload.d.ts +63 -0
  72. package/dist/components/MkFileUpload.d.ts.map +1 -0
  73. package/dist/components/MkFileUpload.js +80 -0
  74. package/dist/components/MkFileUpload.js.map +1 -0
  75. package/dist/components/MkIcons.d.ts +15 -0
  76. package/dist/components/MkIcons.d.ts.map +1 -0
  77. package/dist/components/MkIcons.js +35 -0
  78. package/dist/components/MkIcons.js.map +1 -0
  79. package/dist/components/MkInfiniteList.d.ts +22 -0
  80. package/dist/components/MkInfiniteList.d.ts.map +1 -0
  81. package/dist/components/MkInfiniteList.js +62 -0
  82. package/dist/components/MkInfiniteList.js.map +1 -0
  83. package/dist/components/MkInput.d.ts +16 -0
  84. package/dist/components/MkInput.d.ts.map +1 -0
  85. package/dist/components/MkInput.js +66 -0
  86. package/dist/components/MkInput.js.map +1 -0
  87. package/dist/components/MkLoading.d.ts +12 -0
  88. package/dist/components/MkLoading.d.ts.map +1 -0
  89. package/dist/components/MkLoading.js +20 -0
  90. package/dist/components/MkLoading.js.map +1 -0
  91. package/dist/components/MkModal.d.ts +20 -0
  92. package/dist/components/MkModal.d.ts.map +1 -0
  93. package/dist/components/MkModal.js +71 -0
  94. package/dist/components/MkModal.js.map +1 -0
  95. package/dist/components/MkProgressBar.d.ts +13 -0
  96. package/dist/components/MkProgressBar.d.ts.map +1 -0
  97. package/dist/components/MkProgressBar.js +27 -0
  98. package/dist/components/MkProgressBar.js.map +1 -0
  99. package/dist/components/MkRadio.d.ts +20 -0
  100. package/dist/components/MkRadio.d.ts.map +1 -0
  101. package/dist/components/MkRadio.js +35 -0
  102. package/dist/components/MkRadio.js.map +1 -0
  103. package/dist/components/MkSearchInput.d.ts +21 -0
  104. package/dist/components/MkSearchInput.d.ts.map +1 -0
  105. package/dist/components/MkSearchInput.js +44 -0
  106. package/dist/components/MkSearchInput.js.map +1 -0
  107. package/dist/components/MkSelect.d.ts +16 -0
  108. package/dist/components/MkSelect.d.ts.map +1 -0
  109. package/dist/components/MkSelect.js +75 -0
  110. package/dist/components/MkSelect.js.map +1 -0
  111. package/dist/components/MkSkeleton.d.ts +13 -0
  112. package/dist/components/MkSkeleton.d.ts.map +1 -0
  113. package/dist/components/MkSkeleton.js +32 -0
  114. package/dist/components/MkSkeleton.js.map +1 -0
  115. package/dist/components/MkSwitch.d.ts +13 -0
  116. package/dist/components/MkSwitch.d.ts.map +1 -0
  117. package/dist/components/MkSwitch.js +68 -0
  118. package/dist/components/MkSwitch.js.map +1 -0
  119. package/dist/components/MkTable.d.ts +39 -0
  120. package/dist/components/MkTable.d.ts.map +1 -0
  121. package/dist/components/MkTable.js +47 -0
  122. package/dist/components/MkTable.js.map +1 -0
  123. package/dist/components/MkTabs.d.ts +19 -0
  124. package/dist/components/MkTabs.d.ts.map +1 -0
  125. package/dist/components/MkTabs.js +38 -0
  126. package/dist/components/MkTabs.js.map +1 -0
  127. package/dist/components/MkTextArea.d.ts +17 -0
  128. package/dist/components/MkTextArea.d.ts.map +1 -0
  129. package/dist/components/MkTextArea.js +18 -0
  130. package/dist/components/MkTextArea.js.map +1 -0
  131. package/dist/components/MkToastRenderer.d.ts +3 -0
  132. package/dist/components/MkToastRenderer.d.ts.map +1 -0
  133. package/dist/components/MkToastRenderer.js +133 -0
  134. package/dist/components/MkToastRenderer.js.map +1 -0
  135. package/dist/components/MkTooltip.d.ts +15 -0
  136. package/dist/components/MkTooltip.d.ts.map +1 -0
  137. package/dist/components/MkTooltip.js +36 -0
  138. package/dist/components/MkTooltip.js.map +1 -0
  139. package/dist/components/MkWindowList.d.ts +47 -0
  140. package/dist/components/MkWindowList.d.ts.map +1 -0
  141. package/dist/components/MkWindowList.js +50 -0
  142. package/dist/components/MkWindowList.js.map +1 -0
  143. package/dist/components/index.d.ts +30 -0
  144. package/dist/components/index.d.ts.map +1 -0
  145. package/dist/components/index.js +33 -0
  146. package/dist/components/index.js.map +1 -0
  147. package/dist/context/MkApiContext.d.ts +15 -0
  148. package/dist/context/MkApiContext.d.ts.map +1 -0
  149. package/dist/context/MkApiContext.js +27 -0
  150. package/dist/context/MkApiContext.js.map +1 -0
  151. package/dist/context/MkAuthContext.d.ts +19 -0
  152. package/dist/context/MkAuthContext.d.ts.map +1 -0
  153. package/dist/context/MkAuthContext.js +86 -0
  154. package/dist/context/MkAuthContext.js.map +1 -0
  155. package/dist/context/MkConfirmContext.d.ts +8 -0
  156. package/dist/context/MkConfirmContext.d.ts.map +1 -0
  157. package/dist/context/MkConfirmContext.js +36 -0
  158. package/dist/context/MkConfirmContext.js.map +1 -0
  159. package/dist/context/MkToastContext.d.ts +19 -0
  160. package/dist/context/MkToastContext.d.ts.map +1 -0
  161. package/dist/context/MkToastContext.js +86 -0
  162. package/dist/context/MkToastContext.js.map +1 -0
  163. package/dist/hooks/filePicker.types.d.ts +13 -0
  164. package/dist/hooks/filePicker.types.d.ts.map +1 -0
  165. package/dist/hooks/filePicker.types.js +7 -0
  166. package/dist/hooks/filePicker.types.js.map +1 -0
  167. package/dist/hooks/useApi.d.ts +19 -0
  168. package/dist/hooks/useApi.d.ts.map +1 -0
  169. package/dist/hooks/useApi.js +78 -0
  170. package/dist/hooks/useApi.js.map +1 -0
  171. package/dist/hooks/useApi.test.d.ts +2 -0
  172. package/dist/hooks/useApi.test.d.ts.map +1 -0
  173. package/dist/hooks/useApi.test.js +10 -0
  174. package/dist/hooks/useApi.test.js.map +1 -0
  175. package/dist/hooks/useMkCrud.d.ts +39 -0
  176. package/dist/hooks/useMkCrud.d.ts.map +1 -0
  177. package/dist/hooks/useMkCrud.js +118 -0
  178. package/dist/hooks/useMkCrud.js.map +1 -0
  179. package/dist/hooks/useMkDebounce.d.ts +24 -0
  180. package/dist/hooks/useMkDebounce.d.ts.map +1 -0
  181. package/dist/hooks/useMkDebounce.js +36 -0
  182. package/dist/hooks/useMkDebounce.js.map +1 -0
  183. package/dist/hooks/useMkEffectDebug.d.ts +6 -0
  184. package/dist/hooks/useMkEffectDebug.d.ts.map +1 -0
  185. package/dist/hooks/useMkEffectDebug.js +23 -0
  186. package/dist/hooks/useMkEffectDebug.js.map +1 -0
  187. package/dist/hooks/useMkEvent.d.ts +42 -0
  188. package/dist/hooks/useMkEvent.d.ts.map +1 -0
  189. package/dist/hooks/useMkEvent.js +49 -0
  190. package/dist/hooks/useMkEvent.js.map +1 -0
  191. package/dist/hooks/useMkFilePickerCli.d.ts +59 -0
  192. package/dist/hooks/useMkFilePickerCli.d.ts.map +1 -0
  193. package/dist/hooks/useMkFilePickerCli.js +68 -0
  194. package/dist/hooks/useMkFilePickerCli.js.map +1 -0
  195. package/dist/hooks/useMkFilePickerExpo.d.ts +38 -0
  196. package/dist/hooks/useMkFilePickerExpo.d.ts.map +1 -0
  197. package/dist/hooks/useMkFilePickerExpo.js +68 -0
  198. package/dist/hooks/useMkFilePickerExpo.js.map +1 -0
  199. package/dist/hooks/useMkForm.d.ts +43 -0
  200. package/dist/hooks/useMkForm.d.ts.map +1 -0
  201. package/dist/hooks/useMkForm.js +115 -0
  202. package/dist/hooks/useMkForm.js.map +1 -0
  203. package/dist/hooks/useMkInfiniteList.d.ts +16 -0
  204. package/dist/hooks/useMkInfiniteList.d.ts.map +1 -0
  205. package/dist/hooks/useMkInfiniteList.js +58 -0
  206. package/dist/hooks/useMkInfiniteList.js.map +1 -0
  207. package/dist/hooks/useMkList.d.ts +61 -0
  208. package/dist/hooks/useMkList.d.ts.map +1 -0
  209. package/dist/hooks/useMkList.js +55 -0
  210. package/dist/hooks/useMkList.js.map +1 -0
  211. package/dist/hooks/useMkLocalStorage.d.ts +6 -0
  212. package/dist/hooks/useMkLocalStorage.d.ts.map +1 -0
  213. package/dist/hooks/useMkLocalStorage.js +28 -0
  214. package/dist/hooks/useMkLocalStorage.js.map +1 -0
  215. package/dist/hooks/useMkPrevious.d.ts +6 -0
  216. package/dist/hooks/useMkPrevious.d.ts.map +1 -0
  217. package/dist/hooks/useMkPrevious.js +13 -0
  218. package/dist/hooks/useMkPrevious.js.map +1 -0
  219. package/dist/hooks/useMkToggle.d.ts +6 -0
  220. package/dist/hooks/useMkToggle.d.ts.map +1 -0
  221. package/dist/hooks/useMkToggle.js +13 -0
  222. package/dist/hooks/useMkToggle.js.map +1 -0
  223. package/dist/index.d.ts +29 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +32 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/theme/MkThemeProvider.d.ts +14 -0
  228. package/dist/theme/MkThemeProvider.d.ts.map +1 -0
  229. package/dist/theme/MkThemeProvider.js +22 -0
  230. package/dist/theme/MkThemeProvider.js.map +1 -0
  231. package/eslint-plugin-mk/index.js +20 -0
  232. package/package.json +66 -0
@@ -0,0 +1,115 @@
1
+ import { useState, useCallback, useRef, useMemo } from 'react';
2
+ import { mkValidation } from '@mk/core';
3
+ export function useMkForm({ fields, initialData = {}, action = 'add', validateOnChange = false, }) {
4
+ // Compute defaults from field definitions + initialData
5
+ const defaults = useMemo(() => {
6
+ var _a;
7
+ const d = {};
8
+ for (const key in fields) {
9
+ d[key] = (_a = fields[key].defaultValue) !== null && _a !== void 0 ? _a : '';
10
+ }
11
+ return Object.assign(Object.assign({}, d), initialData);
12
+ }, []); // Only compute once on mount
13
+ const [formState, setFormState] = useState(defaults);
14
+ const [errors, setErrorsState] = useState({});
15
+ const initialRef = useRef(defaults);
16
+ // ──── Field setters ────
17
+ const setField = useCallback((name, value) => {
18
+ setFormState(prev => (Object.assign(Object.assign({}, prev), { [name]: value })));
19
+ // Clear error for this field on change
20
+ setErrorsState(prev => {
21
+ if (!prev[name])
22
+ return prev;
23
+ const next = Object.assign({}, prev);
24
+ delete next[name];
25
+ return next;
26
+ });
27
+ // Optionally validate on each change
28
+ if (validateOnChange) {
29
+ const field = fields[name];
30
+ if (field === null || field === void 0 ? void 0 : field.rules) {
31
+ setFormState(current => {
32
+ const updated = Object.assign(Object.assign({}, current), { [name]: value });
33
+ const error = mkValidation.check(value, field.rules, updated);
34
+ if (error) {
35
+ setErrorsState(prev => (Object.assign(Object.assign({}, prev), { [name]: error })));
36
+ }
37
+ return updated;
38
+ });
39
+ }
40
+ }
41
+ }, [fields, validateOnChange]);
42
+ const setFields = useCallback((partial) => {
43
+ setFormState(prev => (Object.assign(Object.assign({}, prev), partial)));
44
+ }, []);
45
+ // ──── Error management ────
46
+ const setError = useCallback((name, message) => {
47
+ setErrorsState(prev => (Object.assign(Object.assign({}, prev), { [name]: message })));
48
+ }, []);
49
+ const setErrors = useCallback((errs) => {
50
+ setErrorsState(errs);
51
+ }, []);
52
+ const clearErrors = useCallback(() => {
53
+ setErrorsState({});
54
+ }, []);
55
+ // ──── Validation ────
56
+ const validate = useCallback(() => {
57
+ const fieldRules = {};
58
+ for (const key in fields) {
59
+ if (fields[key].rules) {
60
+ fieldRules[key] = { rules: fields[key].rules };
61
+ }
62
+ }
63
+ const errs = mkValidation.checkFields(fieldRules, formState, action);
64
+ setErrorsState(errs);
65
+ return !mkValidation.hasErrors(errs);
66
+ }, [fields, formState, action]);
67
+ // ──── API data extraction ────
68
+ const getApiData = useCallback(() => {
69
+ const apiFields = {};
70
+ for (const key in fields) {
71
+ if (fields[key].api) {
72
+ apiFields[key] = { api: fields[key].api };
73
+ }
74
+ }
75
+ const extracted = mkValidation.getApiFields(formState, apiFields, action);
76
+ // Apply transforms
77
+ const result = {};
78
+ for (const key in extracted) {
79
+ const field = fields[key];
80
+ result[key] = (field === null || field === void 0 ? void 0 : field.transform)
81
+ ? field.transform(extracted[key], formState)
82
+ : extracted[key];
83
+ }
84
+ return result;
85
+ }, [fields, formState, action]);
86
+ // ──── Reset ────
87
+ const reset = useCallback((data) => {
88
+ const newState = data ? Object.assign(Object.assign({}, defaults), data) : defaults;
89
+ setFormState(newState);
90
+ initialRef.current = newState;
91
+ setErrorsState({});
92
+ }, [defaults]);
93
+ // ──── Computed ────
94
+ const isDirty = useMemo(() => {
95
+ return JSON.stringify(formState) !== JSON.stringify(initialRef.current);
96
+ }, [formState]);
97
+ const isValid = useMemo(() => {
98
+ return Object.keys(errors).length === 0;
99
+ }, [errors]);
100
+ return {
101
+ formState,
102
+ errors,
103
+ setField,
104
+ setFields,
105
+ setError,
106
+ setErrors,
107
+ clearErrors,
108
+ reset,
109
+ validate,
110
+ getApiData,
111
+ isDirty,
112
+ isValid,
113
+ };
114
+ }
115
+ //# sourceMappingURL=useMkForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkForm.js","sourceRoot":"","sources":["../../src/hooks/useMkForm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface InfiniteListOptions {
2
+ per_page?: number;
3
+ q?: string;
4
+ filter?: Record<string, any>;
5
+ sort?: string;
6
+ }
7
+ export declare function useMkInfiniteList(endpoint: string, options?: InfiniteListOptions): {
8
+ items: any[];
9
+ loading: boolean;
10
+ error: any;
11
+ isRefreshing: boolean;
12
+ hasMore: boolean;
13
+ loadMore: (isInitial?: boolean) => Promise<void>;
14
+ onRefresh: () => Promise<void>;
15
+ };
16
+ //# sourceMappingURL=useMkInfiniteList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkInfiniteList.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkInfiniteList.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB;;;;;;;;EA4DpF"}
@@ -0,0 +1,58 @@
1
+ import { useState, useCallback } from 'react';
2
+ import { useApi } from './useApi';
3
+ export function useMkInfiniteList(endpoint, options = {}) {
4
+ const api = useApi();
5
+ const [items, setItems] = useState([]);
6
+ const [hasMore, setHasMore] = useState(true);
7
+ const [page, setPage] = useState(1);
8
+ const [isRefreshing, setIsRefreshing] = useState(false);
9
+ const loadMore = useCallback(async (isInitial = false) => {
10
+ if (!hasMore && !isInitial)
11
+ return;
12
+ if (api.loading && !isInitial)
13
+ return;
14
+ const currentPage = isInitial ? 1 : page;
15
+ try {
16
+ const response = await api.get(endpoint, Object.assign(Object.assign({}, options), { page: currentPage, per_page: options.per_page || 15 }));
17
+ if (response.success) {
18
+ const newData = Array.isArray(response.data) ? response.data : [];
19
+ if (isInitial) {
20
+ setItems(newData);
21
+ setPage(2);
22
+ setHasMore(newData.length > 0);
23
+ }
24
+ else {
25
+ if (newData.length === 0) {
26
+ setHasMore(false);
27
+ }
28
+ else {
29
+ setItems((prev) => [...prev, ...newData]);
30
+ setPage(prev => prev + 1);
31
+ const extra = response.__extraData;
32
+ if (extra && typeof extra.last_page === 'number' && currentPage >= extra.last_page) {
33
+ setHasMore(false);
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ catch (e) {
40
+ console.error("MK-Mobile: Infinite List Error", e);
41
+ }
42
+ }, [endpoint, page, hasMore, api.loading, options]);
43
+ const onRefresh = useCallback(async () => {
44
+ setIsRefreshing(true);
45
+ await loadMore(true);
46
+ setIsRefreshing(false);
47
+ }, [loadMore]);
48
+ return {
49
+ items,
50
+ loading: api.loading,
51
+ error: api.error,
52
+ isRefreshing,
53
+ hasMore,
54
+ loadMore,
55
+ onRefresh
56
+ };
57
+ }
58
+ //# sourceMappingURL=useMkInfiniteList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkInfiniteList.js","sourceRoot":"","sources":["../../src/hooks/useMkInfiniteList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAW,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AASlC,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,UAA+B,EAAE;IACjF,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAQ,EAAE,CAAC,CAAC;IAC9C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,EAAE;QACrD,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;YAAE,OAAO;QACnC,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS;YAAE,OAAO;QAEtC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEzC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,kCAChC,OAAO,KACV,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,IAClC,CAAC;YAEH,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAc,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,IAAI,SAAS,EAAE,CAAC;oBACZ,QAAQ,CAAC,OAAgB,CAAC,CAAC;oBAC3B,OAAO,CAAC,CAAC,CAAC,CAAC;oBACX,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACJ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvB,UAAU,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC;yBAAM,CAAC;wBACJ,QAAQ,CAAC,CAAC,IAAW,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,GAAI,OAAiB,CAAC,CAAC,CAAC;wBAC5D,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;wBAE1B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAiD,CAAC;wBACzE,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;4BACjF,UAAU,CAAC,KAAK,CAAC,CAAC;wBACtB,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO;QACH,KAAK;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,YAAY;QACZ,OAAO;QACP,QAAQ;QACR,SAAS;KACZ,CAAC;AACN,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @module useMkList
3
+ * @description Paginated list manager for React Native — mirrors mk-web's useMkList API.
4
+ * Manages page, search, sort, and filters with auto-refresh on param changes.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * const { data, loading, params, setSearch, setPage, setSort, setFilter, refresh } = useMkList('/users');
9
+ *
10
+ * // Search
11
+ * setSearch('mario');
12
+ *
13
+ * // Change page
14
+ * setPage(2);
15
+ *
16
+ * // Sort
17
+ * setSort('-created_at');
18
+ *
19
+ * // Filter
20
+ * setFilter('status', 'active');
21
+ * ```
22
+ */
23
+ export interface MkListParams {
24
+ page?: number;
25
+ per_page?: number;
26
+ q?: string;
27
+ sort?: string;
28
+ filter?: Record<string, any>;
29
+ }
30
+ export interface MkListOptions {
31
+ /** Initial params. */
32
+ initialParams?: MkListParams;
33
+ /** Whether to auto-fetch on mount and param changes. Default true. */
34
+ autoFetch?: boolean;
35
+ /** Debounce delay in ms for search updates. Default 0 (no debounce). */
36
+ debounceMs?: number;
37
+ }
38
+ export declare function useMkList(endpoint: string, options?: MkListOptions): {
39
+ params: MkListParams;
40
+ setParams: import("react").Dispatch<import("react").SetStateAction<MkListParams>>;
41
+ setFilter: (field: string, value: any) => void;
42
+ setPage: (page: number) => void;
43
+ setSearch: (q: string) => void;
44
+ setSort: (sort: string) => void;
45
+ setPerPage: (per_page: number) => void;
46
+ resetFilters: () => void;
47
+ refresh: (extraParams?: MkListParams) => Promise<import("@mk/core").MkResponse<unknown>>;
48
+ /** Pagination meta from __extraData */
49
+ pagination: any;
50
+ status: import("@mk/core").ApiStatus;
51
+ data: any;
52
+ error: any;
53
+ waiting: number;
54
+ loading: boolean;
55
+ get: (endpoint: string, params?: any) => Promise<import("@mk/core").MkResponse<unknown>>;
56
+ post: (endpoint: string, body: any) => Promise<import("@mk/core").MkResponse<unknown>>;
57
+ put: (endpoint: string, body: any) => Promise<import("@mk/core").MkResponse<unknown>>;
58
+ delete: (endpoint: string) => Promise<import("@mk/core").MkResponse<unknown>>;
59
+ remove: (endpoint: string) => Promise<import("@mk/core").MkResponse<unknown>>;
60
+ };
61
+ //# sourceMappingURL=useMkList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkList.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC1B,sBAAsB;IACtB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;;;uBAiB7B,MAAM,SAAS,GAAG;oBAQrB,MAAM;mBAIP,MAAM;oBAIL,MAAM;2BAIC,MAAM;;4BA1B9B,YAAY;IA0D1B,uCAAuC;;;;;;;;;;;;EAG9C"}
@@ -0,0 +1,55 @@
1
+ import { useState, useCallback, useEffect, useRef } from 'react';
2
+ import { useApi } from './useApi';
3
+ export function useMkList(endpoint, options = {}) {
4
+ var _a;
5
+ const { initialParams = {}, autoFetch = true } = options;
6
+ const api = useApi();
7
+ const [params, setParams] = useState(Object.assign({ page: 1, per_page: 15 }, initialParams));
8
+ const mountedRef = useRef(false);
9
+ const refresh = useCallback((extraParams = {}) => {
10
+ return api.get(endpoint, Object.assign(Object.assign({}, params), extraParams));
11
+ }, [endpoint, params]);
12
+ const setFilter = useCallback((field, value) => {
13
+ setParams(prev => (Object.assign(Object.assign({}, prev), { page: 1, filter: Object.assign(Object.assign({}, prev.filter), { [field]: value }) })));
14
+ }, []);
15
+ const setPage = useCallback((page) => {
16
+ setParams(prev => (Object.assign(Object.assign({}, prev), { page })));
17
+ }, []);
18
+ const setSearch = useCallback((q) => {
19
+ setParams(prev => (Object.assign(Object.assign({}, prev), { page: 1, q })));
20
+ }, []);
21
+ const setSort = useCallback((sort) => {
22
+ setParams(prev => (Object.assign(Object.assign({}, prev), { sort })));
23
+ }, []);
24
+ const setPerPage = useCallback((per_page) => {
25
+ setParams(prev => (Object.assign(Object.assign({}, prev), { page: 1, per_page })));
26
+ }, []);
27
+ const resetFilters = useCallback(() => {
28
+ setParams(prev => (Object.assign(Object.assign({}, prev), { page: 1, q: undefined, sort: undefined, filter: undefined })));
29
+ }, []);
30
+ // Auto-refresh
31
+ useEffect(() => {
32
+ if (!autoFetch)
33
+ return;
34
+ // Skip the initial mount — let the consumer decide
35
+ if (!mountedRef.current) {
36
+ mountedRef.current = true;
37
+ refresh();
38
+ return;
39
+ }
40
+ refresh();
41
+ // eslint-disable-next-line react-hooks/exhaustive-deps
42
+ }, [params]);
43
+ return Object.assign(Object.assign({}, api), { params,
44
+ setParams,
45
+ setFilter,
46
+ setPage,
47
+ setSearch,
48
+ setSort,
49
+ setPerPage,
50
+ resetFilters,
51
+ refresh,
52
+ /** Pagination meta from __extraData */
53
+ pagination: ((_a = api.data) === null || _a === void 0 ? void 0 : _a.__extraData) || {} });
54
+ }
55
+ //# sourceMappingURL=useMkList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkList.js","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * useMkLocalStorage (Mobile)
3
+ * 🚀 Parity with Web but using AsyncStorage.
4
+ */
5
+ export declare function useMkLocalStorage<T>(key: string, initialValue: T): readonly [T, (value: T | ((val: T) => T)) => void];
6
+ //# sourceMappingURL=useMkLocalStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkLocalStorage.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkLocalStorage.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,wBAStC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,WAW7C"}
@@ -0,0 +1,28 @@
1
+ import { useState, useEffect } from 'react';
2
+ // Note: This requires @react-native-async-storage/async-storage
3
+ import AsyncStorage from '@react-native-async-storage/async-storage';
4
+ /**
5
+ * useMkLocalStorage (Mobile)
6
+ * 🚀 Parity with Web but using AsyncStorage.
7
+ */
8
+ export function useMkLocalStorage(key, initialValue) {
9
+ const [storedValue, setStoredValue] = useState(initialValue);
10
+ useEffect(() => {
11
+ AsyncStorage.getItem(key).then((item) => {
12
+ if (item)
13
+ setStoredValue(JSON.parse(item));
14
+ }).catch(console.error);
15
+ }, [key]);
16
+ const setValue = (value) => {
17
+ try {
18
+ const valueToStore = value instanceof Function ? value(storedValue) : value;
19
+ setStoredValue(valueToStore);
20
+ AsyncStorage.setItem(key, JSON.stringify(valueToStore));
21
+ }
22
+ catch (error) {
23
+ console.error(error);
24
+ }
25
+ };
26
+ return [storedValue, setValue];
27
+ }
28
+ //# sourceMappingURL=useMkLocalStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkLocalStorage.js","sourceRoot":"","sources":["../../src/hooks/useMkLocalStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,gEAAgE;AAChE,OAAO,YAAY,MAAM,2CAA2C,CAAC;AAErE;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAI,GAAW,EAAE,YAAe;IAC/D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAI,YAAY,CAAC,CAAC;IAEhE,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACpC,IAAI,IAAI;gBAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,MAAM,QAAQ,GAAG,CAAC,KAA0B,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC5E,cAAc,CAAC,YAAY,CAAC,CAAC;YAC7B,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAU,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * useMkPrevious (Mobile)
3
+ * 🚀 Parity with Web.
4
+ */
5
+ export declare const useMkPrevious: <T>(value: T, initialValue?: T) => T | undefined;
6
+ //# sourceMappingURL=useMkPrevious.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkPrevious.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkPrevious.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,KAAG,CAAC,GAAG,SAQjE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { useRef, useEffect } from "react";
2
+ /**
3
+ * useMkPrevious (Mobile)
4
+ * 🚀 Parity with Web.
5
+ */
6
+ export const useMkPrevious = (value, initialValue) => {
7
+ const ref = useRef(initialValue);
8
+ useEffect(() => {
9
+ ref.current = value;
10
+ }, [value]);
11
+ return ref.current;
12
+ };
13
+ //# sourceMappingURL=useMkPrevious.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkPrevious.js","sourceRoot":"","sources":["../../src/hooks/useMkPrevious.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAI,KAAQ,EAAE,YAAgB,EAAiB,EAAE;IAC1E,MAAM,GAAG,GAAG,MAAM,CAAgB,YAAY,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACX,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;IACxB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,GAAG,CAAC,OAAO,CAAC;AACvB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * useMkToggle (Mobile)
3
+ * 🚀 Parity with Web.
4
+ */
5
+ export declare const useMkToggle: (initialValue?: boolean) => [boolean, () => void, (v: boolean) => void];
6
+ //# sourceMappingURL=useMkToggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkToggle.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkToggle.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,eAAc,OAAe,KAAG,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAQrG,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { useState, useCallback } from 'react';
2
+ /**
3
+ * useMkToggle (Mobile)
4
+ * 🚀 Parity with Web.
5
+ */
6
+ export const useMkToggle = (initialValue = false) => {
7
+ const [value, setValue] = useState(initialValue);
8
+ const toggle = useCallback(() => {
9
+ setValue((v) => !v);
10
+ }, []);
11
+ return [value, toggle, setValue];
12
+ };
13
+ //# sourceMappingURL=useMkToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkToggle.js","sourceRoot":"","sources":["../../src/hooks/useMkToggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,eAAwB,KAAK,EAA+C,EAAE;IACxG,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAU,YAAY,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC,CAAC"}
@@ -0,0 +1,29 @@
1
+ export * from './components';
2
+ export * from './theme/MkThemeProvider';
3
+ export * from './context/MkApiContext';
4
+ export * from './context/MkAuthContext';
5
+ export * from './context/MkConfirmContext';
6
+ export * from './context/MkToastContext';
7
+ export { MkAuthProvider } from './auth/MkAuthProvider';
8
+ export type { MkAuthProviderProps } from './auth/MkAuthProvider';
9
+ export { useMkAuth } from './auth/useMkAuth';
10
+ export { MkAuthForm } from './auth/MkAuthForm';
11
+ export type { MkAuthFormProps } from './auth/MkAuthForm';
12
+ export type { MkAuthContextValue } from './auth/MkAuthContext';
13
+ export type { AdminDto, AuthTokens, LoginInput, LoginResponse, RefreshResponse } from './auth/types';
14
+ export { getAccessToken, setAccessToken, getRefreshToken, setRefreshToken, getUser, setUser, clearAll, SECURE_KEYS, } from './auth/secureStorage';
15
+ export type { SecureKey } from './auth/secureStorage';
16
+ export * from './hooks/useApi';
17
+ export * from './hooks/useMkList';
18
+ export * from './hooks/useMkInfiniteList';
19
+ export * from './hooks/useMkDebounce';
20
+ export * from './hooks/useMkEffectDebug';
21
+ export * from './hooks/useMkEvent';
22
+ export * from './hooks/useMkLocalStorage';
23
+ export * from './hooks/useMkPrevious';
24
+ export * from './hooks/useMkToggle';
25
+ export * from './hooks/useMkForm';
26
+ export * from './hooks/useMkCrud';
27
+ export * from './hooks/useMkFilePickerExpo';
28
+ export * from './hooks/useMkFilePickerCli';
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAG7B,cAAc,yBAAyB,CAAC;AAGxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrG,OAAO,EACH,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,OAAO,EACP,OAAO,EACP,QAAQ,EACR,WAAW,GACd,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAKlC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,32 @@
1
+ // Components
2
+ export * from './components';
3
+ // Theme
4
+ export * from './theme/MkThemeProvider';
5
+ // Contexts
6
+ export * from './context/MkApiContext';
7
+ export * from './context/MkAuthContext';
8
+ export * from './context/MkConfirmContext';
9
+ export * from './context/MkToastContext';
10
+ // Auth (SecureStore-backed, MK-MOB-1.0.3)
11
+ export { MkAuthProvider } from './auth/MkAuthProvider';
12
+ export { useMkAuth } from './auth/useMkAuth';
13
+ export { MkAuthForm } from './auth/MkAuthForm';
14
+ export { getAccessToken, setAccessToken, getRefreshToken, setRefreshToken, getUser, setUser, clearAll, SECURE_KEYS, } from './auth/secureStorage';
15
+ // Hooks
16
+ export * from './hooks/useApi';
17
+ export * from './hooks/useMkList';
18
+ export * from './hooks/useMkInfiniteList';
19
+ export * from './hooks/useMkDebounce';
20
+ export * from './hooks/useMkEffectDebug';
21
+ export * from './hooks/useMkEvent';
22
+ export * from './hooks/useMkLocalStorage';
23
+ export * from './hooks/useMkPrevious';
24
+ export * from './hooks/useMkToggle';
25
+ export * from './hooks/useMkForm';
26
+ export * from './hooks/useMkCrud';
27
+ // File picker adapters (optional peer deps — use the one that matches your setup)
28
+ // Expo: needs `expo-image-picker` + `expo-document-picker`
29
+ // RN CLI: needs `react-native-image-picker` + `react-native-document-picker`
30
+ export * from './hooks/useMkFilePickerExpo';
31
+ export * from './hooks/useMkFilePickerCli';
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,cAAc,cAAc,CAAC;AAE7B,QAAQ;AACR,cAAc,yBAAyB,CAAC;AAExC,WAAW;AACX,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AAEzC,0CAA0C;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI/C,OAAO,EACH,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,OAAO,EACP,OAAO,EACP,QAAQ,EACR,WAAW,GACd,MAAM,sBAAsB,CAAC;AAG9B,QAAQ;AACR,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAElC,kFAAkF;AAClF,6DAA6D;AAC7D,6EAA6E;AAC7E,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { MkTheme } from '@mk/core';
3
+ interface ThemeContextType {
4
+ theme: MkTheme;
5
+ isDark: boolean;
6
+ toggleTheme: () => void;
7
+ }
8
+ export declare const MkThemeProvider: React.FC<{
9
+ children: React.ReactNode;
10
+ initialDark?: boolean;
11
+ }>;
12
+ export declare const useMkTheme: () => ThemeContextType;
13
+ export {};
14
+ //# sourceMappingURL=MkThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MkThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuD,MAAM,OAAO,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAID,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,CAe1F,CAAC;AAEF,eAAO,MAAM,UAAU,wBAMtB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useState, useMemo } from 'react';
3
+ import { tokens } from '@mk/core';
4
+ const ThemeContext = createContext(undefined);
5
+ export const MkThemeProvider = ({ children, initialDark = false }) => {
6
+ const [isDark, setIsDark] = useState(initialDark);
7
+ const theme = useMemo(() => (isDark ? tokens.dark : tokens.light), [isDark]);
8
+ const value = {
9
+ theme,
10
+ isDark,
11
+ toggleTheme: () => setIsDark(!isDark),
12
+ };
13
+ return _jsx(ThemeContext.Provider, { value: value, children: children });
14
+ };
15
+ export const useMkTheme = () => {
16
+ const context = useContext(ThemeContext);
17
+ if (!context) {
18
+ throw new Error('useMkTheme must be used within a MkThemeProvider');
19
+ }
20
+ return context;
21
+ };
22
+ //# sourceMappingURL=MkThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MkThemeProvider.js","sourceRoot":"","sources":["../../src/theme/MkThemeProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAQlC,MAAM,YAAY,GAAG,aAAa,CAA+B,SAAS,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,eAAe,GAAmE,CAAC,EAC9F,QAAQ,EACR,WAAW,GAAG,KAAK,EACpB,EAAE,EAAE;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7E,MAAM,KAAK,GAAG;QACZ,KAAK;QACL,MAAM;QACN,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;KACtC,CAAC;IAEF,OAAO,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAyB,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @mk/eslint-plugin-mk (mobile variant)
3
+ *
4
+ * Re-exports the @makroz/web plugin — the rule is the same for any
5
+ * TypeScript project that follows the MME (R-MK-001) module layout.
6
+ * Keeping a per-package entry point lets mobile consumers depend on
7
+ * `@makroz/mobile/eslint-plugin-mk` without pulling in React-specific
8
+ * types from @makroz/web.
9
+ */
10
+ import webPlugin from '@makroz/web/eslint-plugin-mk';
11
+
12
+ const plugin = {
13
+ meta: {
14
+ ...webPlugin.meta,
15
+ name: '@mk/eslint-plugin-mk (mobile)',
16
+ },
17
+ rules: webPlugin.rules,
18
+ };
19
+
20
+ export default plugin;